public override object Execute(ProtoCore.Runtime.Context c, Interpreter dsi) { Object retVal = base.Execute(c, dsi); if (retVal == null) { return(null); } StackValue propValue = (StackValue)retVal; StackValue thisObject = dsi.runtime.rmem.Stack.Last(); if (StackUtils.IsValidPointer(thisObject) && StackUtils.IsReferenceType(propValue)) { int classIndex = (int)thisObject.metaData.type; if (classIndex != ProtoCore.DSASM.Constants.kInvalidIndex) { var core = dsi.runtime.Core; int thisptr = (int)thisObject.opdata; int idx = core.ClassTable.ClassNodes[classIndex].symbols.IndexOf(PropertyName); StackValue oldValue = core.Heap.Heaplist[(int)thisObject.opdata].GetValue(idx, core); if (!StackUtils.Equals(oldValue, propValue)) { GCUtils.GCRetain(propValue, core); core.Heap.Heaplist[thisptr].SetValue(idx, propValue); } } } return(retVal); }