private static IErlObject coreToErlObject(object o, ErlTypeOrder etp, bool strict) { if (o == null) { return(ErlAtom.Undefined); } var eh = strict ? ConvertErrorHandling.Throw : ConvertErrorHandling.ReturnDefault; var e = o as IErlObject; if (e != null) { return(e); } try { switch (etp) { case ErlTypeOrder.ErlObject: case ErlTypeOrder.ErlAtom: return(new ErlAtom(o.ToString())); case ErlTypeOrder.ErlBinary: return(new ErlBinary((byte[])o)); case ErlTypeOrder.ErlBoolean: return(new ErlBoolean(o.AsBool(handling: eh))); case ErlTypeOrder.ErlByte: return(new ErlByte(o.AsByte(handling: eh))); case ErlTypeOrder.ErlDouble: return(new ErlDouble(o.AsDouble(handling: eh))); case ErlTypeOrder.ErlLong: return(new ErlLong(o.AsLong(handling: eh))); case ErlTypeOrder.ErlList: { var list = new ErlList(); foreach (var item in (IEnumerable)o) { list.Add(item.ToErlObject()); } return(list); } case ErlTypeOrder.ErlString: return(new ErlString(o.AsString(handling: eh))); case ErlTypeOrder.ErlTuple: return(new ErlTuple((object[])o)); case ErlTypeOrder.ErlPid: case ErlTypeOrder.ErlPort: case ErlTypeOrder.ErlRef: case ErlTypeOrder.ErlVar: default: throw new Exception(); } } catch (Exception) { throw new ErlException (StringConsts.ERL_CANNOT_CONVERT_TYPES_ERROR, o.GetType().ToString(), etp.ToString()); } }