Diff
Not logged in

Differences From Artifact [bc3c32f1d9aafc10]:

To Artifact [74dd93745d781116]:


114 Value eval( Fun e, Layer lay, Table ctx, bool overwriteCtx=CascadeCtx ) 114 Value eval( Fun e, Layer lay, Table ctx, bool overwriteCtx=CascadeCtx ) 115 { 115 { 116 if( isASTLayer(lay) ) 116 if( isASTLayer(lay) ) 117 { 117 { 118 // need this for correct scoping (outer scope macro vari 118 // need this for correct scoping (outer scope macro vari 119 Table newCtx = new Table(ctx, Table.Kind.NotPropagateSet 119 Table newCtx = new Table(ctx, Table.Kind.NotPropagateSet 120 foreach(p; e.params) 120 foreach(p; e.params) 121 newCtx.set(p.name, ValueLayer, new UndefinedValu | 121 newCtx.set(p.name, NoopLayer, null); 122 return ast2table(e, (AST e){return eval(e,lay,newCtx);}) 122 return ast2table(e, (AST e){return eval(e,lay,newCtx);}) 123 } 123 } 124 else 124 else 125 return createNewFunction(e, ctx); 125 return createNewFunction(e, ctx); 126 } 126 } 127 127 128 Value eval( Lay e, Layer lay, Table ctx, bool overwriteCtx=CascadeCtx ) 128 Value eval( Lay e, Layer lay, Table ctx, bool overwriteCtx=CascadeCtx ) ................................................................................................................................................................................ 136 Value eval( Let e, Layer lay, Table ctx, bool overwriteCtx=CascadeCtx ) 136 Value eval( Let e, Layer lay, Table ctx, bool overwriteCtx=CascadeCtx ) 137 { 137 { 138 Table newCtx = overwriteCtx ? ctx : new Table(ctx, Table.Kind.No 138 Table newCtx = overwriteCtx ? ctx : new Table(ctx, Table.Kind.No 139 if( isASTLayer(lay) ) 139 if( isASTLayer(lay) ) 140 return ast2table(e, (AST ee){ 140 return ast2table(e, (AST ee){ 141 // need this for correct scoping (outer scope ma 141 // need this for correct scoping (outer scope ma 142 if(ee is e.expr) 142 if(ee is e.expr) 143 newCtx.set(e.name, ValueLayer, new Undef | 143 newCtx.set(e.name, NoopLayer, null); 144 return eval(ee,lay,newCtx); 144 return eval(ee,lay,newCtx); 145 }); 145 }); 146 else 146 else 147 { 147 { 148 Value ri = eval(e.init, lay, newCtx); 148 Value ri = eval(e.init, lay, newCtx); 149 newCtx.set(e.name, e.layer.empty ? lay : e.layer, ri); 149 newCtx.set(e.name, e.layer.empty ? lay : e.layer, ri); 150 return eval(e.expr, lay, newCtx, OverwriteCtx); 150 return eval(e.expr, lay, newCtx, OverwriteCtx); ................................................................................................................................................................................ 216 { 216 { 217 assert( !isASTLayer(lay), "lift to the @macro layer should never 217 assert( !isASTLayer(lay), "lift to the @macro layer should never 218 218 219 // functions are automatically lifterd 219 // functions are automatically lifterd 220 if( cast(FunValue) v ) 220 if( cast(FunValue) v ) 221 return v; 221 return v; 222 222 223 if( !ctx.has(lay, SystemLayer) ) | 223 if( !ctx.has(lay, LiftLayer) ) 224 throw genex!RuntimeException(pos, "lift function for "~l 224 throw genex!RuntimeException(pos, "lift function for "~l 225 225 226 // similar to invokeFunction, but with only one argument bound t 226 // similar to invokeFunction, but with only one argument bound t 227 auto _f = ctx.get(lay, SystemLayer, pos); | 227 auto _f = ctx.get(lay, LiftLayer, pos); 228 if(auto f = cast(FunValue)_f) 228 if(auto f = cast(FunValue)_f) 229 { 229 { 230 Table newCtx = new Table(f.definitionContext(), Table.Ki 230 Table newCtx = new Table(f.definitionContext(), Table.Ki 231 auto ps = f.params(); 231 auto ps = f.params(); 232 if( ps.length != 1 ) 232 if( ps.length != 1 ) 233 throw genex!RuntimeException(pos, 233 throw genex!RuntimeException(pos, 234 text("lift function for", lay, " must ta 234 text("lift function for", lay, " must ta