public override void Emit(CompilationContext ctx) { //Basically we expect to see <lvalue> <- <Expression> if (!IsArrayRedimension) { if (ctx.debugBuild) { ctx.EmitRaw(string.Format("Trace.WriteLine(string.Format(\" {0} <- {{0}}\",", destination.Name)); expression.Emit(ctx); ctx.EmitRaw("));\r\n"); } string lval = destination.Name; if (!destination.Subscripted) { ctx.EmitRaw("frame.ExecutionContext[\"" + lval + "\"] = "); expression.Emit(ctx); ctx.EmitRaw(";\n"); } else { //ctx[lval, destination.Subscripts(ctx)] = expression.Evaluate(ctx); ctx.EmitRaw("frame.ExecutionContext[\"" + destination.Name + "\", "); destination.EmitSubscripts(ctx); ctx.EmitRaw("] = "); expression.Emit(ctx); ctx.EmitRaw(";\n"); //Debug.Assert(false); } } else { ctx.EmitRaw("frame.ExecutionContext.ReDim(\"" + this.destination.Name + "\","); expression.Emit(ctx); ctx.EmitRaw(");\n"); } }