protected override void TranslateToILWithDupOfThisOb(ILGenerator il){
IReflect ir = this.rootObject.InferType(null);
Type tempType = Convert.ToType(ir);
this.rootObject.TranslateToIL(il, tempType);
if (ir == Typeob.Object || ir == Typeob.String || ir is TypedArray || (ir == tempType && Typeob.Array.IsAssignableFrom(tempType))){
tempType = Typeob.Object;
this.EmitILToLoadEngine(il);
il.Emit(OpCodes.Call, CompilerGlobals.toObjectMethod);
}
il.Emit(OpCodes.Dup);
this.temp = il.DeclareLocal(tempType);
il.Emit(OpCodes.Stloc, temp);
Convert.Emit(this, il, tempType, Typeob.Object);
this.TranslateToIL(il, Typeob.Object);
}