public static createObject ( |
||
state | ||
Résultat |
// Public methos public IoObject getType(IoState state, string typeName) { Type t = null; foreach (string s in this.usingNamespaces.Keys) { IoCLRAssembly asm = this.usingNamespaces[s] as IoCLRAssembly; t = asm.assembly.GetType(s + "." + typeName); if (t != null) { IoCLRObject obj = IoCLRObject.createObject(state) as IoCLRObject; obj.clrType = t; obj.clrInstance = null; return(obj); } } if (t == null) { foreach (string s in this.loadedAssemblies.Keys) { IoCLRAssembly asm = this.loadedAssemblies[s] as IoCLRAssembly; t = asm.assembly.GetType(typeName); if (t != null) { IoCLRObject obj = IoCLRObject.createObject(state) as IoCLRObject; obj.clrType = t; obj.clrInstance = null; return(obj); } } } return(null); }
public override IoObject activate(IoObject self, IoObject target, IoObject locals, IoMessage m, IoObject slotContext) { IoCLRFunction method = self as IoCLRFunction; IoCLRObject obj = target as IoCLRObject; object result = null; object[] parameters = new object[method.evaluatedParameters.Count]; for (int i = 0; i < method.evaluatedParameters.Count; i++) { IoObject ep = method.evaluatedParameters[i] as IoObject; switch (ep.name) { case "Object": parameters[i] = ep; break; case "Number": { IoNumber num = ep as IoNumber; if (num.isInteger) { parameters[i] = num.longValue; } else { parameters[i] = num.doubleValue; } } break; case "Sequence": parameters[i] = (ep as IoSeq).value; break; case "CLRObject": parameters[i] = (ep as IoCLRObject).clrInstance; break; } } IoCLRObject clr = IoCLRObject.createObject(self.state); try { if (method.methodInfo is ConstructorInfo) { ConstructorInfo ci = method.methodInfo as ConstructorInfo; result = ci.Invoke(parameters); } else if (method.methodInfo is MethodInfo) { MethodInfo mi = method.methodInfo as MethodInfo; result = mi.Invoke(obj.clrInstance, parameters); } clr.clrType = result != null?result.GetType() : null; clr.clrInstance = result; } catch (Exception e) { Console.WriteLine(e.Message.ToString()); clr.clrType = null; clr.clrInstance = null; } return(clr); }