public override void VisitAssign(AssignStatement assign)
{
Argument arg = currentRoutine.GetArgument(assign.Name);
if (arg != null) {
if (arg.RawType.IsByRef) {
Type argType = arg.RawType.GetElementType();
ilGenerator.Emit(OpCodes.Ldarg, arg.Index);
assign.Value.Accept(this);
BoxIfNecessary(assign.Value.RawType, argType);
EmitStind(argType);
}
else {
assign.Value.Accept(this);
BoxIfNecessary(assign.Value.RawType, arg.RawType);
ilGenerator.Emit(OpCodes.Starg, arg.Index);
}
}
else {
LocalVariable local = localVariableStack.GetLocal(assign.Name);
local.EmitStorePrefix(ilGenerator);
assign.Value.Accept(this);
BoxIfNecessary(assign.Value.RawType, local.RawType);
local.EmitStore(ilGenerator);
}
}