Ejemplo n.º 1
0
		private PropertyWrapper (TypeRegistry registry, PropertyInfo property, object self)
			: base (IodineProperty.TypeDefinition)
		{
			typeRegistry = registry;
			propertyInfo = property;
			this.self = self;
		}
Ejemplo n.º 2
0
		public static ClassWrapper CreateFromType (TypeRegistry registry, Type type, string name)
		{
			ClassWrapper wrapper = new ClassWrapper (registry, type, name);

			foreach (MemberInfo info in type.GetMembers (BindingFlags.Public | BindingFlags.Static)) {
				switch (info.MemberType) {
				case MemberTypes.Method:
					if (!wrapper.HasAttribute (info.Name)) {
						
						wrapper.SetAttribute (info.Name, CreateMultiMethod (registry, type, info.Name));
					}
					break;
				case MemberTypes.Field:
					wrapper.SetAttribute (info.Name, FieldWrapper.Create (registry, (FieldInfo)info));
					break;
				case MemberTypes.Property:
					wrapper.SetAttribute (info.Name, PropertyWrapper.Create (registry, (PropertyInfo)info));
					break;
				}
			}

			registry.AddTypeMapping (type, wrapper, new ObjectTypeMapping (wrapper, registry));

			return wrapper;
		}
Ejemplo n.º 3
0
		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);
		}
Ejemplo n.º 4
0
		private FieldWrapper (TypeRegistry registry, FieldInfo field, object self)
			: base (IodineProperty.TypeDefinition)
		{
			typeRegistry = registry;
			fieldInfo = field;
			this.self = self;
		}
Ejemplo n.º 5
0
		public override IodineObject ConvertFrom (TypeRegistry registry, object obj)
		{
			object[] arr = (object[])obj;
			IodineObject[] iodineObjects = new IodineObject[arr.Length];
			for (int i = 0; i < arr.Length; i++) {
				iodineObjects [i] = registry.ConvertToIodineObject (arr [i]);
			}
			return new IodineList (iodineObjects);
		}
Ejemplo n.º 6
0
		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);
		}
Ejemplo n.º 7
0
		private static InternalMethodCallback CreateMultiMethod (TypeRegistry registry,
			Type type,
			object self, 
			string name)
		{
			var methods = type.GetMembers (BindingFlags.Public | BindingFlags.Instance)
				.Where (p => p.Name == name && p.MemberType == MemberTypes.Method)
				.Select (p => (MethodInfo)p);
			
			if (methods.Count () > 1) {
				return MethodWrapper.Create (registry, methods, self); 
			} else {
				return MethodWrapper.Create (registry, methods.First (), self); 
			}
		}
Ejemplo n.º 8
0
		public static ObjectWrapper CreateFromObject (TypeRegistry registry, ClassWrapper clazz, object obj)
		{
			Type type = obj.GetType ();
			ObjectWrapper wrapper = new ObjectWrapper (clazz, obj);
			foreach (MemberInfo info in type.GetMembers (BindingFlags.Instance | BindingFlags.Public)) {
				switch (info.MemberType) {
				case MemberTypes.Method:
					if (!wrapper.HasAttribute (info.Name)) {
						wrapper.SetAttribute (info.Name, CreateMultiMethod (registry, type, obj,
							info.Name));
					}
					break;
				case MemberTypes.Field:
					wrapper.SetAttribute (info.Name, FieldWrapper.Create (registry, (FieldInfo)info,
						obj));
					break;
				case MemberTypes.Property:
					wrapper.SetAttribute (info.Name, PropertyWrapper.Create (registry, (PropertyInfo)info,
						obj));
					break;
				}
			}
			return wrapper;
		}
Ejemplo n.º 9
0
		private static InternalMethodCallback CreateMultiMethod (TypeRegistry registry,
			Type type,
			string name)
		{
			var methods = type.GetMembers (BindingFlags.Public | BindingFlags.Static)
				.Where (p => p.Name == name && p.MemberType == MemberTypes.Method)
				.Select (p => (MethodInfo)p);
			return MethodWrapper.Create (registry, methods, null); 
		}
Ejemplo n.º 10
0
 public override object ConvertFrom(TypeRegistry registry, IodineObject obj)
 {
     return((Int32)((IodineInteger)obj).Value);
 }
Ejemplo n.º 11
0
		public override object ConvertFrom (TypeRegistry registry, IodineObject obj)
		{
			ObjectWrapper wrapper = obj as ObjectWrapper;
			return wrapper.Object;
		}
Ejemplo n.º 12
0
		public override object ConvertFrom (TypeRegistry registry, IodineObject obj)
		{
			return ((IodineString)obj).Value;
		}
Ejemplo n.º 13
0
		public override object ConvertFrom (TypeRegistry registry, IodineObject obj)
		{
			IodineBool boolean = obj as IodineBool;
			return boolean.Value;
		}
Ejemplo n.º 14
0
 public abstract object ConvertFrom(TypeRegistry registry, IodineObject obj);
Ejemplo n.º 15
0
		public override object ConvertFrom (TypeRegistry registry, IodineObject obj)
		{
			return Convert.ToChar (obj.ToString ());
		}
Ejemplo n.º 16
0
 public override IodineObject ConvertFrom(TypeRegistry registry, object obj)
 {
     return(new IodineString(Convert.ToChar(obj).ToString()));
 }
Ejemplo n.º 17
0
		public static FieldWrapper Create (TypeRegistry registry, FieldInfo field, object self = null)
		{
			return new FieldWrapper (registry, field, self);
		}
Ejemplo n.º 18
0
 private ClassWrapper(TypeRegistry registry, Type type, string name)
     : base(name)
 {
     typeRegistry = registry;
     this.type    = type;
 }
Ejemplo n.º 19
0
		public override object ConvertFrom (TypeRegistry registry, IodineObject obj)
		{
			return (Single)((IodineFloat)obj).Value;
		}
Ejemplo n.º 20
0
 public override object ConvertFrom(TypeRegistry registry, IodineObject obj)
 {
     return(((IodineString)obj).Value);
 }
Ejemplo n.º 21
0
		public override IodineObject ConvertFrom (TypeRegistry registry, object obj)
		{
			return ObjectWrapper.CreateFromObject (typeRegistry, classWrapper, obj);
		}
Ejemplo n.º 22
0
		public abstract object ConvertFrom (TypeRegistry registry, IodineObject obj);
Ejemplo n.º 23
0
		public override IodineObject ConvertFrom (TypeRegistry registry, object obj)
		{
			return new IodineFloat (Convert.ToDouble (obj));
		}
Ejemplo n.º 24
0
		public override object ConvertFrom (TypeRegistry registry, IodineObject obj)
		{
			return (Int16)((IodineInteger)obj).Value;
		}
Ejemplo n.º 25
0
		public override IodineObject ConvertFrom (TypeRegistry registry, object obj)
		{
			return new IodineInteger (Convert.ToInt64 (obj));
		}
Ejemplo n.º 26
0
 public override IodineObject ConvertFrom(TypeRegistry registry, object obj)
 {
     return(new IodineInteger(Convert.ToInt64(obj)));
 }
Ejemplo n.º 27
0
 public static PropertyWrapper Create(TypeRegistry registry, PropertyInfo property,
                                      object self = null)
 {
     return(new PropertyWrapper(registry, property, self));
 }
Ejemplo n.º 28
0
		internal static IodineDynamicObject Create (IodineObject obj, VirtualMachine vm, TypeRegistry registry)
		{
			return new IodineDynamicObject (obj, vm, registry);
		}
Ejemplo n.º 29
0
		public override IodineObject ConvertFrom (TypeRegistry registry, object obj)
		{
			return ((IodineBool)obj).Value ? IodineBool.True : IodineBool.False;
		}
Ejemplo n.º 30
0
		private ClassWrapper (TypeRegistry registry, Type type, string name)
			: base (name)
		{
			typeRegistry = registry;
			this.type = type;
		}
Ejemplo n.º 31
0
		public override IodineObject ConvertFrom (TypeRegistry registry, object obj)
		{
			return new IodineString (obj.ToString ());
		}
Ejemplo n.º 32
0
		public ObjectTypeMapping (ClassWrapper wrapper, TypeRegistry registry)
		{
			classWrapper = wrapper;
			typeRegistry = registry;
		}
Ejemplo n.º 33
0
		public static PropertyWrapper Create (TypeRegistry registry, PropertyInfo property,
			object self = null)
		{
			return new PropertyWrapper (registry, property, self);
		}
Ejemplo n.º 34
0
 public override object ConvertFrom(TypeRegistry registry, IodineObject obj)
 {
     return((Single)((IodineFloat)obj).Value);
 }
Ejemplo n.º 35
0
 public override IodineObject ConvertFrom(TypeRegistry registry, object obj)
 {
     return(new IodineFloat(Convert.ToDouble(obj)));
 }
Ejemplo n.º 36
0
		IodineDynamicObject (IodineObject obj, VirtualMachine vm, TypeRegistry registry)
		{
			typeRegistry = registry;
			internalObject = obj;
			internalVm = vm;
		}