@@ -138,16 +138,17 @@ Table newCtx = overwriteCtx ? ctx : new Table(ctx, Table.Kind.NotPropagateSet); if( isASTLayer(lay) ) return ast2table(e, (AST ee){ // need this for correct scoping (outer scope macro variables must be hidden!) - if(ee is e.expr) + if(e.name!="_" && ee is e.expr) newCtx.set(e.name, NoopLayer, null); return eval(ee,lay,newCtx); }); else { Value ri = eval(e.init, lay, newCtx); - newCtx.set(e.name, e.layer.empty ? lay : e.layer, ri); + if(e.name!="_") + newCtx.set(e.name, e.layer.empty ? lay : e.layer, ri); return eval(e.expr, lay, newCtx, OverwriteCtx); } } @@ -462,8 +463,13 @@ auto e = new Evaluator; enrollRuntimeLibrary(e); assert_nothrow( e.evalString(`case 1`) ); assert_nothrow( e.evalString(`case 1 when 1: 2`) ); + + // this is a shorthand for + // @macro x = fun(){} in @macro(x) + // so it is ok to fail, but it is really incovenient on REPL + assert_nothrow( e.evalString(`@macro x=fun(){}`) ); } /* unittest