Mercurial Hosting > luan
changeset 688:f99f51bc5bea
fix up-values
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 18 Apr 2016 15:46:05 -0600 |
parents | fc08c3b42010 |
children | 51a134a8c89b |
files | core/src/luan/impl/LuanParser.java core/src/luan/modules/parsers/Theme.java |
diffstat | 2 files changed, 12 insertions(+), 8 deletions(-) [+] |
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; " );
--- a/core/src/luan/modules/parsers/Theme.java Mon Apr 18 01:08:35 2016 -0600 +++ b/core/src/luan/modules/parsers/Theme.java Mon Apr 18 15:46:05 2016 -0600 @@ -60,14 +60,13 @@ if( !parser.match('}') ) throw exception("unclosed define tag"); String block = parseBody("define:"+name); - String rtn = "function M." + name + "(env) " + block + "end; "; + String rtn = "function M." + name + "(env) " + block + " end; "; return parser.success(rtn); } private String parseBody(String tagName) throws ParseException { StringBuilder stmts = new StringBuilder(); int start = parser.currentIndex(); - stmts.append( "%>" ); int end = start; while( !matchEndTag(tagName) ) { if( parser.endOfInput() ) { @@ -92,7 +91,6 @@ end = parser.currentIndex(); } addText(start,end,stmts); - stmts.append( "<% "); return stmts.toString(); } @@ -107,7 +105,7 @@ private void addText(int start,int end,StringBuilder stmts) { if( start < end ) { - stmts.append( parser.text.substring(start,end) ); + stmts.append( "%>" ).append( parser.text.substring(start,end) ).append( "<%" ); } } @@ -123,7 +121,7 @@ if( !parser.match('}') ) return parser.failure(null); String block = parseBody("block:"+name); - String rtn = "<% env."+ name + "( env, function(env) " + block + "end) %>"; + String rtn = " env."+ name + "( env, function(env) " + block + "end); "; // String rtn = "<% env." + tag.name + "(" + (tag.attrs.isEmpty() ? "nil" : table(tag.attrs)) + ",env,function(env) %>" + block + "<% end) %>"; return parser.success(rtn); } @@ -138,7 +136,7 @@ if( !parser.match('}') ) return parser.failure(null); // rtn = "<% env." + name + (attrs.isEmpty() ? "()" : table(attrs)) + " %>"; - String rtn = "<% env." + name + "(env) %>"; + String rtn = " env." + name + "(env); "; return parser.success(rtn); }