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; }
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; }
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); }
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; }
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); }
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); }
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; }
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))); }
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; }
/// <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); }
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; }
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; }