public static void SetValue(this CorValRef thisVal, EvaluationContext ctx, CorValRef val) { CorEvaluationContext cctx = (CorEvaluationContext)ctx; CorObjectAdaptor actx = (CorObjectAdaptor)ctx.Adapter; if (actx.IsEnum(ctx, thisVal.Val.ExactType) && !actx.IsEnum(ctx, val.Val.ExactType)) { ValueReference vr = actx.GetMember(ctx, null, thisVal, "value__"); vr.Value = val; // Required to make sure that var returns an up-to-date value object thisVal.IsValid = false; return; } CorReferenceValue s = thisVal.Val.CastToReferenceValue(); if (s != null) { CorReferenceValue v = val.Val.CastToReferenceValue(); if (v != null) { s.Value = v.Value; return; } } CorGenericValue gv = CorObjectAdaptor.GetRealObject(cctx, thisVal.Val) as CorGenericValue; if (gv != null) { gv.SetValue(ctx.Adapter.TargetObjectToObject(ctx, val)); } }
public object GetElement(int[] indices) { return(new CorValRef(delegate { // If we have a zombie state array, reload it. if (!obj.IsValid) { obj.Reload(); array = CorObjectAdaptor.GetRealObject(ctx, obj) as CorArrayValue; } return array != null ? array.GetElement(indices) : null; })); }
public override IStringAdaptor CreateStringAdaptor(EvaluationContext ctx, object str) { CorValue val = CorObjectAdaptor.GetRealObject(ctx, str); if (val is CorStringValue) { return(new StringAdaptor(ctx, (CorValRef)str, (CorStringValue)val)); } else { return(null); } }
public override ICollectionAdaptor CreateArrayAdaptor(EvaluationContext ctx, object arr) { CorValue val = CorObjectAdaptor.GetRealObject(ctx, arr); if (val is CorArrayValue) { return(new ArrayAdaptor(ctx, (CorValRef)arr, (CorArrayValue)val)); } else { return(null); } }
public int[] GetDimensions() { CorArrayValue array = CorObjectAdaptor.GetRealObject(ctx, obj) as CorArrayValue; if (array != null) { return(array.GetDimensions()); } else { return(new int[0]); } }
public ObjectValue CreateElementValue(ArrayElementGroup grp, ObjectPath path, int[] indices) { CorArrayValue array = CorObjectAdaptor.GetRealObject(ctx, obj) as CorArrayValue; if (array != null) { CorValRef elem = (CorValRef)GetElement(indices); return(ctx.Adapter.CreateObjectValue(ctx, grp, path, elem, ObjectValueFlags.ArrayElement)); } else { return(ObjectValue.CreateUnknown("?")); } }
public object GetElement(int[] indices) { return(new CorValRef(delegate { CorArrayValue array = CorObjectAdaptor.GetRealObject(ctx, obj) as CorArrayValue; if (array != null) { return array.GetElement(indices); } else { return null; } })); }
CorValRef Box(CorEvaluationContext ctx, CorValRef val) { CorValRef arr = new CorValRef(delegate { return(ctx.Session.NewArray(ctx, (CorType)GetValueType(ctx, val), 1)); }); CorArrayValue array = CorObjectAdaptor.GetRealObject(ctx, arr) as CorArrayValue; ArrayAdaptor realArr = new ArrayAdaptor(ctx, arr, array); realArr.SetElement(new int[] { 0 }, val); CorType at = (CorType)GetType(ctx, "System.Array"); object[] argTypes = new object[] { GetType(ctx, "System.Int32") }; return((CorValRef)RuntimeInvoke(ctx, at, arr, "GetValue", argTypes, new object[] { CreateValue(ctx, 0) })); }