@@ -184,9 +184,9 @@ override Value eval_( Let e, Table ctx, bool ctxMod ) { if( !ctxMod ) ctx = new Table(ctx, Table.Kind.NotPropagateSet); - Value ri = this.eval(e.init, ctx); + Value ri = this.eval(e.vdef, ctx); ctx.set(e.name, e.layer.empty ? layerID(): e.layer, ri); return this.eval(e.expr, ctx, OverwriteCtx); } override Value eval_( App e, Table ctx, bool ctxMod ) @@ -202,9 +202,9 @@ { // incremental execution of let-expressions if(auto le = cast(Let)e) { - AST ai = runMacro(le.init, ctx); + AST ai = runMacro(le.vdef, ctx); if( !ctxMod ) ctx = new Table(ctx, Table.Kind.NotPropagateSet); @@ -242,9 +242,14 @@ override Value eval_( Var e, Table ctx, bool ctxMod ) { if( ctx.has(e.name, layerID()) ) return ctx.get(e.name, layerID()); - return this.lift(ctx.get(e.name, ValueLayer, e.pos), ctx, e.pos); + Value v; + try { v = ctx.get(e.name, ValueLayer, e.pos); } + catch ( RuntimeException ) { + throw genex!RuntimeException(e.pos, e.name~" not found in layer "~layerID()~" nor "~ValueLayer); + } + return this.lift(v, ctx, e.pos); } } // Macro layer. For optimization, if AST didn't change it returns null @@ -285,18 +290,18 @@ { if( !ctxMod ) ctx = new Table(ctx, Table.Kind.NotPropagateSet); - Value ai = this.eval(e.init, ctx); + Value ai = this.eval(e.vdef, ctx); ctx.set(e.name, NoopLayer, null); Value ae = this.eval(e.expr, ctx, OverwriteCtx); if( ai is null && ae is null ) return null; - if( ai is null ) ai = ast2table(e.init); + if( ai is null ) ai = ast2table(e.vdef); if( ae is null ) ae = ast2table(e.expr); return ast2table(e, delegate Value (AST _){ - if(_ is e.init) { return ai; } + if(_ is e.vdef) { return ai; } if(_ is e.expr) { return ae; } assert(false); }); }