示例#1
0
            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");
                }
            }