public override StackValue Marshal(object obj, ProtoCore.Runtime.Context context, Interpreter dsi, ProtoCore.Type type) { string str = (string)obj; StackValue dsarray = PrimitiveMarshler.ConvertCSArrayToDSArray(kCharMarshaler, str.ToCharArray(), context, dsi, type); return(StackUtils.BuildString(dsarray.opdata)); }
/// <summary> /// /// </summary> /// <param name="obj"></param> /// <param name="context"></param> /// <param name="dsi"></param> /// <param name="type"></param> /// <returns></returns> public override StackValue Marshal(object obj, ProtoCore.Runtime.Context context, Interpreter dsi, ProtoCore.Type type) { if (obj == null) { return(StackUtils.BuildNull()); } FFIObjectMarshler marshaler = null; StackValue retVal; Type objType = obj.GetType(); if (type.IsIndexable) { if (obj is System.Collections.ICollection) { System.Collections.ICollection collection = obj as System.Collections.ICollection; object[] array = new object[collection.Count]; collection.CopyTo(array, 0); return(PrimitiveMarshler.ConvertCSArrayToDSArray(this, array, context, dsi, type)); } else if (obj is System.Collections.IEnumerable) { System.Collections.IEnumerable enumerable = obj as System.Collections.IEnumerable; return(PrimitiveMarshler.ConvertCSArrayToDSArray(this, enumerable, context, dsi, type)); } } Array arr = obj as Array; if (null != arr) { return(PrimitiveMarshler.ConvertCSArrayToDSArray(this, arr, context, dsi, type)); } else if ((PrimitiveMarshler.IsPrimitiveDSType(type) || PrimitiveMarshler.IsPrimitiveObjectType(obj, type)) && mPrimitiveMarshalers.TryGetValue(objType, out marshaler)) { return(marshaler.Marshal(obj, context, dsi, type)); } else if (CLRObjectMap.TryGetValue(obj, out retVal)) { return(retVal); } return(CreateDSObject(obj, context, dsi)); }