public override bool TryGetMember(GetMemberBinder binder, out object result) { if (internalObject.HasAttribute(binder.Name)) { IodineObject obj = internalObject.GetAttribute(binder.Name); result = typeRegistry.ConvertToNativeObject(obj); return(true); } result = null; return(true); }
public T Call <T> (string name, params object[] args) { IodineObject[] arguments = new IodineObject[args.Length]; for (int i = 0; i < args.Length; i++) { arguments [i] = typeRegistry.ConvertToIodineObject(args [i]); } IodineObject ret = Context.Invoke(module.GetAttribute(name), arguments); return((T)typeRegistry.ConvertToNativeObject(ret, typeof(T))); }
public static BuiltinMethodCallback Create(TypeRegistry registry, IEnumerable <MethodInfo> info, object self = null) { return(new BuiltinMethodCallback(((VirtualMachine vm, IodineObject @this, IodineObject[] arguments) => { var suitableOverloads = info.Where(p => p.GetParameters().Length == arguments.Length); foreach (MethodInfo overload in suitableOverloads) { var types = overload.GetParameters().Select(p => p.ParameterType).ToArray(); object[] objects = new object[arguments.Length]; bool mappingExists = true; for (int i = 0; i < arguments.Length; i++) { if (!registry.TypeMappingExists(arguments [i].TypeDef, types [i])) { mappingExists = false; break; } objects [i] = registry.ConvertToNativeObject(arguments [i], types [i]); } if (mappingExists) { return registry.ConvertToIodineObject(overload.Invoke(self, objects)); } } // No suitable overload found Console.WriteLine("No suitable overload found!"); return null; }), null)); }
public static InternalMethodCallback Create (TypeRegistry registry, IEnumerable<MethodInfo> info, object self = null) { return new InternalMethodCallback (((VirtualMachine vm, IodineObject @this, IodineObject[] arguments) => { var suitableOverloads = info.Where (p => p.GetParameters ().Length == arguments.Length); foreach (MethodInfo overload in suitableOverloads) { var types = overload.GetParameters ().Select (p => p.ParameterType).ToArray (); object[] objects = new object[arguments.Length]; bool mappingExists = true; for (int i = 0; i < arguments.Length; i++) { if (!registry.TypeMappingExists (arguments [i].TypeDef, types [i])) { mappingExists = false; break; } objects [i] = registry.ConvertToNativeObject (arguments [i], types [i]); } if (mappingExists) { return registry.ConvertToIodineObject (overload.Invoke (self, objects)); } } // No suitable overload found Console.WriteLine ("No suitable overload found!"); return null; }), null); }
public override object ConvertFrom(TypeRegistry registry, IodineObject obj) { var list = (IodineList)obj; var arr = new object [list.Objects.Count]; for (var i = 0; i < list.Objects.Count; i++) { arr [i] = registry.ConvertToNativeObject(list.Objects [i]); } return(arr); }
public static BuiltinMethodCallback Create(TypeRegistry registry, MethodInfo info, object self = null) { return(new BuiltinMethodCallback(((VirtualMachine vm, IodineObject @this, IodineObject[] arguments) => { Type[] types = info.GetParameters().Select(p => p.ParameterType).ToArray(); int i = 0; object[] objects = arguments.Select(p => registry.ConvertToNativeObject(p, types [i++])).ToArray(); return registry.ConvertToIodineObject(info.Invoke(self, objects)); }), null)); }
public static InternalMethodCallback Create (TypeRegistry registry, MethodInfo info, object self = null) { return new InternalMethodCallback (((VirtualMachine vm, IodineObject @this, IodineObject[] arguments) => { Type[] types = info.GetParameters ().Select (p => p.ParameterType).ToArray (); int i = 0; object[] objects = arguments.Select (p => registry.ConvertToNativeObject (p, types [i++])).ToArray (); return registry.ConvertToIodineObject (info.Invoke (self, objects)); }), null); }
public override IodineObject Invoke(VirtualMachine vm, IodineObject[] arguments) { int i = 0; var suitableOverload = type.GetConstructors().Where(p => p.GetParameters().Length == arguments.Length). FirstOrDefault(); Type[] types = suitableOverload.GetParameters().Select(p => p.ParameterType).ToArray(); object[] objects = arguments.Select(p => typeRegistry.ConvertToNativeObject(p, types [i++])).ToArray(); return(ObjectWrapper.CreateFromObject(typeRegistry, this, suitableOverload.Invoke(objects))); }
public IodineObject Set(VirtualMachine vm, IodineObject value) { fieldInfo.SetValue(self, typeRegistry.ConvertToNativeObject(value, fieldInfo.FieldType)); return(null); }
public IodineObject Set(VirtualMachine vm, IodineObject value) { propertyInfo.SetValue(self, typeRegistry.ConvertToNativeObject(value, propertyInfo.PropertyType)); return(null); }