changeset 155:db7b3902e01c

fix parsing problems git-svn-id: https://luan-java.googlecode.com/svn/trunk@156 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Wed, 18 Jun 2014 07:38:46 +0000
parents c2e5101682ae
children 925ba2d59b9d
files src/luan/interp/LuanParser.java
diffstat 1 files changed, 22 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/src/luan/interp/LuanParser.java	Tue Jun 17 09:55:43 2014 +0000
+++ b/src/luan/interp/LuanParser.java	Wed Jun 18 07:38:46 2014 +0000
@@ -525,10 +525,10 @@
 
 	private Stmt FnCallStmt() throws ParseException {
 		parser.begin();
-		Code code = VarExp(In.NOTHING);
-		if( !(code instanceof FnCall) )
+		Expressions exp = VarExp(In.NOTHING);
+		if( !(exp instanceof FnCall) )
 			return parser.failure(null);
-		FnCall fnCall = (FnCall)code;
+		FnCall fnCall = (FnCall)exp;
 		return parser.success( new FnCallStmt(fnCall) );
 	}
 
@@ -536,8 +536,8 @@
 		int start = parser.begin();
 		Var var = VarZ(In.NOTHING);
 		if( var==null )
-			return null;
-		return var.settable();
+			return parser.failure(null);
+		return parser.success( var.settable() );
 	}
 
 	private Expressions RequiredExpr(In in) throws ParseException {
@@ -820,21 +820,22 @@
 	}
 
 	private Var Var2(In in,int start,Expressions exp1) throws ParseException {
+		parser.begin();
 		Var var = VarExt(in,start,exp1);
 		if( var != null )
-			return var;
+			return parser.success(var);
 		if( parser.match("->") ) {
 			Spaces(in);
 			List<Expressions> builder = new ArrayList<Expressions>();
 			builder.add(exp1);
 			Expr exp2 = expr(RequiredVarExpB(in));
 			FnCall fnCall = required(Args( in, start, exp2, builder ));
-			return exprVar(fnCall);
+			return parser.success(exprVar(fnCall));
 		}
 		FnCall fnCall = Args( in, start, expr(exp1), new ArrayList<Expressions>() );
 		if( fnCall != null )
-			return exprVar(fnCall);
-		return null;
+			return parser.success(exprVar(fnCall));
+		return parser.failure(null);
 	}
 
 	private Expressions RequiredVarExpB(In in) throws ParseException {
@@ -1259,22 +1260,22 @@
 		parser.begin();
 		if( !parser.match('\\') )
 			return parser.failure(null);
-		if( parser.match('a') )  return '\u0007';
-		if( parser.match('b') )  return '\b';
-		if( parser.match('f') )  return '\f';
-		if( parser.match('n') )  return '\n';
-		if( parser.match('r') )  return '\r';
-		if( parser.match('t') )  return '\t';
-		if( parser.match('v') )  return '\u000b';
-		if( parser.match('\\') )  return '\\';
-		if( parser.match('"') )  return '"';
-		if( parser.match('\'') )  return '\'';
+		if( parser.match('a') )  return parser.success('\u0007');
+		if( parser.match('b') )  return parser.success('\b');
+		if( parser.match('f') )  return parser.success('\f');
+		if( parser.match('n') )  return parser.success('\n');
+		if( parser.match('r') )  return parser.success('\r');
+		if( parser.match('t') )  return parser.success('\t');
+		if( parser.match('v') )  return parser.success('\u000b');
+		if( parser.match('\\') )  return parser.success('\\');
+		if( parser.match('"') )  return parser.success('"');
+		if( parser.match('\'') )  return parser.success('\'');
 		int start = parser.currentIndex();
 		if( parser.match('x') && HexDigit() && HexDigit() )
-			return (char)Integer.parseInt(parser.textFrom(start+1),16);
+			return parser.success((char)Integer.parseInt(parser.textFrom(start+1),16));
 		if( Digit() ) {
 			if( Digit() ) Digit();  // optional
-			return (char)Integer.parseInt(parser.textFrom(start));
+			return parser.success((char)Integer.parseInt(parser.textFrom(start)));
 		}
 		return parser.failure(null);
 	}