comparison core/src/luan/impl/LuanParser.java @ 369:85bf9f0379aa

template statements no longer depend on 'Io' being defined
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 17 Apr 2015 06:25:38 -0600
parents 5e34702423a0
children e89bf64a0d05
comparison
equal deleted inserted replaced
368:2af805677fc4 369:85bf9f0379aa
263 } 263 }
264 } 264 }
265 265
266 private Stmt TemplateStmt() throws ParseException { 266 private Stmt TemplateStmt() throws ParseException {
267 int start = parser.currentIndex(); 267 int start = parser.currentIndex();
268 Expressions exp = TemplateExpressions(In.NOTHING); 268 Expressions exprs = TemplateExpressions(In.NOTHING);
269 if( exp == null ) 269 if( exprs == null )
270 return null; 270 return null;
271 Expr fnExp = (Expr)nameVar(start,"Io").expr(); 271 LuanSource.Element se = se(start,"require 'luan:Io'");
272 LuanSource.Element se = se(start,"stdout"); 272 FnCall requireCall = new FnCall( se, new ConstExpr(se,PackageLuan.requireFn), new ConstExpr(se,"luan:Io") );
273 fnExp = new IndexExpr( se, fnExp, new ConstExpr(se,"stdout") ); 273 se = se(start,"stdout");
274 Expr stdoutExp = new IndexExpr( se, expr(requireCall), new ConstExpr(se,"stdout") );
274 se = se(start,"write"); 275 se = se(start,"write");
275 fnExp = new IndexExpr( se, fnExp, new ConstExpr(se,"write") ); 276 Expr writeExp = new IndexExpr( se, stdoutExp, new ConstExpr(se,"write") );
276 FnCall fnCall = new FnCall( se(start), fnExp, exp ); 277 FnCall writeCall = new FnCall( se(start), writeExp, exprs );
277 return new ExpressionsStmt(fnCall); 278 return new ExpressionsStmt(writeCall);
278 } 279 }
279 280
280 private Expressions TemplateExpressions(In in) throws ParseException { 281 private Expressions TemplateExpressions(In in) throws ParseException {
281 if( in.template ) 282 if( in.template )
282 return null; 283 return null;