From ebe78a431a8b2b682a978887b242742376c7eabd Mon Sep 17 00:00:00 2001 From: Nicolas Cannasse Date: Mon, 7 Jul 2008 17:44:38 +0000 Subject: [PATCH] added comments --- Test.hx | 2 ++ hscript/Expr.hx | 1 + hscript/Parser.hx | 41 ++++++++++++++++++++++++++++++++++++++++- 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/Test.hx b/Test.hx index 030faea..ddba781 100644 --- a/Test.hx +++ b/Test.hx @@ -3,6 +3,7 @@ class Test { static function main() { var script = " var sum = 0; + // blablabla for( a in angles ) sum += Math.cos(a); sum; @@ -33,6 +34,7 @@ class Test { var angles = [0,1,2,3]; var i = 0; var sum = 0; + /* comment */ while( i < angles.length ) sum += Math.cos(angles[i++]); sum; diff --git a/hscript/Expr.hx b/hscript/Expr.hx index 79cf8c2..96bd173 100644 --- a/hscript/Expr.hx +++ b/hscript/Expr.hx @@ -55,6 +55,7 @@ enum Error { EInvalidChar( c : Int ); EUnexpected( s : String ); EUnterminatedString; + EUnterminatedComment; EUnknownVariable( v : String ); EInvalidIterator( v : String ); EInvalidOp( op : String ); diff --git a/hscript/Parser.hx b/hscript/Parser.hx index 8210092..f44fdd9 100644 --- a/hscript/Parser.hx +++ b/hscript/Parser.hx @@ -78,6 +78,7 @@ class Parser { } public function parseString( s : String ) { + line = 1; return parse( new haxe.io.StringInput(s) ); } @@ -324,10 +325,12 @@ class Parser { var c; var b = new StringBuf(); var esc = false; + var old = line; while( true ) { try { c = s.readByte(); } catch( e : Dynamic ) { + line = old; throw Error.EUnterminatedString; } if( esc ) { @@ -345,8 +348,10 @@ class Parser { esc = true; else if( c == until ) break; - else + else { + if( c == 10 ) line++; b.addChar(c); + } } return b.toString(); } @@ -403,6 +408,8 @@ class Parser { while( true ) { char = readChar(s); if( !ops[char] ) { + if( op.charCodeAt(0) == 47 ) + return tokenComment(s,op,char); this.char = char; return TOp(op); } @@ -427,6 +434,38 @@ class Parser { return null; } + function tokenComment( s : haxe.io.Input, op : String, char : Int ) { + var c = op.charCodeAt(1); + if( c == 47 ) { // comment + try { + while( char != 10 ) + char = s.readByte(); + this.char = char; + } catch( e : Dynamic ) { + } + return token(s); + } + if( c == 42 ) { /* comment */ + var old = line; + try { + while( true ) { + while( char != 42 ) { + if( char == 10 ) line++; + char = s.readByte(); + } + char = s.readByte(); + if( char == 47 ) + break; + } + } catch( e : Dynamic ) { + line = old; + throw Error.EUnterminatedComment; + } + return token(s); + } + return TOp(op); + } + function constString( c ) { return switch(c) { case CInt(v): Std.string(v);