Ejemplo n.º 1
0
        public override void Inherit(VirtualMachine vm, IodineObject self, IodineObject [] arguments)
        {
            var obj = Invoke(vm, arguments);

            foreach (KeyValuePair <string, IodineObject> kv in Attributes)
            {
                if (!self.HasAttribute(kv.Key))
                {
                    self.SetAttribute(kv.Key, kv.Value);
                }
                if (!obj.HasAttribute(kv.Key))
                {
                    obj.SetAttribute(kv.Key, kv.Value);
                }
            }
            Dictionary <string, IodineObject> childAttributes = obj.Attributes;

            foreach (KeyValuePair <string, IodineObject> kv in childAttributes)
            {
                if (kv.Value is IodineBoundMethod)
                {
                    IodineBoundMethod wrapper = (IodineBoundMethod)kv.Value;
                    wrapper.Bind(self);
                }
            }
            self.SetAttribute("__super__", obj);
            self.Base = obj;
        }
Ejemplo n.º 2
0
 public IodineObject BindAttributes(IodineObject obj)
 {
     foreach (KeyValuePair<string, IodineObject> kv in attributes) {
         if (!obj.HasAttribute (kv.Key))
             obj.SetAttribute (kv.Key, kv.Value);
     }
     return obj;
 }
Ejemplo n.º 3
0
		public override void Inherit (VirtualMachine vm, IodineObject self, IodineObject[] arguments)
		{
			foreach (IodineMethod method in RequiredMethods) {
				if (!self.HasAttribute (method.Name)) {
					vm.RaiseException (new IodineNotSupportedException ());
					return;
				}
			}
			self.Interfaces.Add (this);
		}
Ejemplo n.º 4
0
 public virtual void Inherit(VirtualMachine vm, IodineObject self, IodineObject[] arguments)
 {
     IodineObject obj = this.Invoke (vm, arguments);
     foreach (string attr in attributes.Keys) {
         if (!self.HasAttribute (attr))
             self.SetAttribute (attr, attributes [attr]);
         obj.SetAttribute (attr, attributes [attr]);
     }
     self.SetAttribute ("__super__", obj);
     self.Base = obj;
 }
Ejemplo n.º 5
0
 public virtual IodineObject BindAttributes(IodineObject obj)
 {
     foreach (KeyValuePair <string, IodineObject> kv in Attributes)
     {
         if (!obj.HasAttribute(kv.Key))
         {
             obj.SetAttribute(kv.Key, kv.Value);
         }
     }
     return(obj);
 }
Ejemplo n.º 6
0
 public override void Inherit(VirtualMachine vm, IodineObject self, IodineObject[] arguments)
 {
     foreach (IodineMethod method in RequiredMethods)
     {
         if (!self.HasAttribute(method.Name))
         {
             vm.RaiseException(new IodineNotSupportedException());
             return;
         }
     }
     self.Interfaces.Add(this);
 }
Ejemplo n.º 7
0
        public virtual void Inherit(VirtualMachine vm, IodineObject self, IodineObject[] arguments)
        {
            var obj = Invoke(vm, arguments);

            foreach (string attr in Attributes.Keys)
            {
                if (!self.HasAttribute(attr))
                {
                    self.SetAttribute(attr, Attributes [attr]);
                }
                obj.SetAttribute(attr, Attributes [attr]);
            }
            self.SetAttribute("__super__", obj);
            self.Base = obj;
        }
Ejemplo n.º 8
0
        private IodineObject hasAttribute(VirtualMachine vm, IodineObject self, IodineObject[] args)
        {
            if (args.Length < 2)
            {
                vm.RaiseException(new IodineArgumentException(2));
                return(null);
            }
            IodineObject o1  = args [0];
            IodineString str = args [1] as IodineString;

            if (str == null)
            {
                vm.RaiseException(new IodineTypeException("Str"));
                return(null);
            }
            return(IodineBool.Create(o1.HasAttribute(str.Value)));
        }
Ejemplo n.º 9
0
        public override void Inherit(VirtualMachine vm, IodineObject self, IodineObject[] arguments)
        {
            IodineObject obj = Invoke(vm, arguments);

            foreach (KeyValuePair <string, IodineObject> kv in Attributes)
            {
                if (!self.HasAttribute(kv.Key))
                {
                    self.SetAttribute(kv.Key, kv.Value);
                }
                if (!obj.HasAttribute(kv.Key))
                {
                    obj.SetAttribute(kv.Key, kv.Value);
                }
            }
            self.SetAttribute("__super__", obj);
            self.Base = obj;
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Determines whether an object has this trait
        /// </summary>
        /// <returns><c>true</c> if obj has trait; otherwise, <c>false</c>.</returns>
        /// <param name="obj">Object.</param>
        public bool HasTrait(IodineObject obj)
        {
            foreach (IodineMethod method in RequiredMethods)
            {
                if (obj.HasAttribute(method.Name))
                {
                    IodineObject attr = obj.GetAttribute(method.Name);

                    IodineMethod objMethod = attr as IodineMethod;

                    if (objMethod == null)
                    {
                        // HACK: Make builtin methods work
                        if (attr is BuiltinMethodCallback)
                        {
                            continue;
                        }
                        if (attr is IodineBoundMethod)
                        {
                            objMethod = ((IodineBoundMethod)attr).Method;
                        }
                        else
                        {
                            return(false);
                        }
                    }

                    bool match = method.AcceptsKeywordArgs == objMethod.AcceptsKeywordArgs &&
                                 method.Variadic == objMethod.Variadic &&
                                 method.ParameterCount == objMethod.ParameterCount;

                    if (!match)
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }
            }

            return(true);
        }
Ejemplo n.º 11
0
        public override void Inherit(VirtualMachine vm, IodineObject self, IodineObject[] arguments)
        {
            IodineObject obj = Invoke (vm, arguments);

            foreach (KeyValuePair<string, IodineObject> kv in attributes) {
                if (!self.HasAttribute (kv.Key))
                    self.SetAttribute (kv.Key, kv.Value);
                if (!obj.HasAttribute (kv.Key))
                    obj.SetAttribute (kv.Key, kv.Value);
            }
            self.SetAttribute ("__super__", obj);
            self.Base = obj;
        }
Ejemplo n.º 12
0
		public override void Inherit (VirtualMachine vm, IodineObject self, IodineObject[] arguments)
		{
			IodineObject obj = Invoke (vm, arguments);

			foreach (KeyValuePair<string, IodineObject> kv in Attributes) {
				if (!self.HasAttribute (kv.Key))
					self.SetAttribute (kv.Key, kv.Value);
				if (!obj.HasAttribute (kv.Key)) {
					obj.SetAttribute (kv.Key, kv.Value);
				}
			}
			Dictionary<string, IodineObject> childAttributes = obj.Attributes;

			foreach (KeyValuePair<string, IodineObject> kv in childAttributes) {
				if (kv.Value is IodineInstanceMethodWrapper) {
					IodineInstanceMethodWrapper wrapper = (IodineInstanceMethodWrapper)kv.Value;
					wrapper.Rewrap (self);
				}
			}
			self.SetAttribute ("__super__", obj);
			self.Base = obj;
		}