internal void TranslateToILToSaveLocals(ILGenerator il){
this.TranslateToILToCopyOuterScopeLocals(il, false, null);
if (!this.must_save_stack_locals)
return;
int offset = (this.attributes&MethodAttributes.Static) == MethodAttributes.Static ? 0 : 1;
int extras = 3;
if (this.isMethod)
extras = 0;
else if (!this.hasArgumentsObject)
extras = 2;
int n = this.fields.Length;
this.TranslateToILToLoadEngine(il);
il.Emit(OpCodes.Call, CompilerGlobals.scriptObjectStackTopMethod);
ScriptObject scope = globals.ScopeStack.Peek();
while (scope is WithObject || scope is BlockScope){
il.Emit(OpCodes.Call, CompilerGlobals.getParentMethod);
scope = scope.GetParent();
}
il.Emit(OpCodes.Castclass, Typeob.StackFrame);
il.Emit(OpCodes.Ldfld, CompilerGlobals.localVarsField);
for (int i = 0; i < n; i++){
JSLocalField f = this.fields[i];
if (f.IsLiteral && !(f.value is FunctionObject))
continue;
il.Emit(OpCodes.Dup);
ConstantWrapper.TranslateToILInt(il, f.slotNumber);
int j = System.Array.IndexOf(this.formal_parameters, f.Name);
if (j >= 0 || (f.Name.Equals("arguments") && this.hasArgumentsObject)){
Convert.EmitLdarg(il, (short)(j+extras+offset));
}else{
il.Emit(OpCodes.Ldloc, (LocalBuilder)f.metaData);
}
Convert.Emit(this.body, il, f.FieldType, Typeob.Object);
il.Emit(OpCodes.Stelem_Ref);
}
il.Emit(OpCodes.Pop);
}