diff core/src/luan/impl/LuanParser.java @ 688:f99f51bc5bea

fix up-values
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 18 Apr 2016 15:46:05 -0600
parents fc08c3b42010
children ca169567ce07
line wrap: on
line diff
--- a/core/src/luan/impl/LuanParser.java	Mon Apr 18 01:08:35 2016 -0600
+++ b/core/src/luan/impl/LuanParser.java	Mon Apr 18 15:46:05 2016 -0600
@@ -148,12 +148,16 @@
 				if( upSym.name.equals(name) )
 					return upSym;
 			}
-			for( Frame f=parent; f!=null; f=f.parent ) {
-				LocalSym sym = f.getLocalSym(name);
+			if( parent != null ) {
+				LocalSym sym = parent.getLocalSym(name);
 				if( sym != null ) {
 					sym.isPointer = true;
 					return addUpSym(name,sym.javaName);
 				}
+				UpSym upSym = parent.getUpSym(name);
+				if( upSym != null ) {
+					return addUpSym(name,"parentUpValues["+upSym.i+"]");
+				}
 			}
 			return null;
 		}
@@ -1933,6 +1937,7 @@
 				+"}  "
 
 				+"@Override public Object doCall(LuanState luan,Object[] args) throws LuanException {  "
+					+"final Pointer[] parentUpValues = upValues;  "
 					+"Object t;  "
 					+"Object[] a;  "
 					+ stmts
@@ -1961,6 +1966,7 @@
 			);
 		}
 		exp.add( ""
+					+"final Pointer[] parentUpValues = upValues;  "
 					+"Object t;  "
 					+"Object[] a;  "
 		);