protected void AddProtocolWrappersForObject() { __getitem__F = MethodWrapper.MakeUndefined(this, SymbolTable.GetItem); __setitem__F = MethodWrapper.MakeUndefined(this, SymbolTable.SetItem); __getattribute__F = MethodWrapper.MakeForObject(this, SymbolTable.GetAttribute, new CallTarget2(GetAttributeMethod)); __getattr__F = MethodWrapper.MakeUndefined(this, SymbolTable.GetAttr); __setattr__F = MethodWrapper.MakeForObject(this, SymbolTable.SetAttr, new CallTarget3(SetAttrMethod)); __delattr__F = MethodWrapper.MakeForObject(this, SymbolTable.DelAttr, new CallTarget2(DelAttrMethod)); __cmp__F = MethodWrapper.MakeUndefined(this, SymbolTable.Cmp); //!!! __str__F = MethodWrapper.MakeForObject(this, SymbolTable.String, new CallTarget1(StrMethod)); __repr__F = MethodWrapper.MakeForObject(this, SymbolTable.Repr, new CallTarget1(ReprMethod)); }
public static MethodWrapper MakeForObject(PythonType pt, SymbolId name, Delegate func) { MethodWrapper ret = new MethodWrapper(pt, name); ret.isObjectMethod = true; ret.isBuiltinMethod = true; ret.isSuperTypeMethod = false; ret.func = BuiltinFunction.Make((string)SymbolTable.IdToString(name), func, new MethodBase[] { func.Method }); ret.funcAsFunc = ret.func as BuiltinFunction; //pt.dict[name] = ret; return(ret); }
protected void AddProtocolWrappers() { if (type == typeof(object)) { AddProtocolWrappersForObject(); return; } __getitem__F = MethodWrapper.Make(this, SymbolTable.GetItem); __setitem__F = MethodWrapper.Make(this, SymbolTable.SetItem); __getattribute__F = MethodWrapper.Make(this, SymbolTable.GetAttribute); __getattr__F = MethodWrapper.Make(this, SymbolTable.GetAttr); __setattr__F = MethodWrapper.Make(this, SymbolTable.SetAttr); __delattr__F = MethodWrapper.Make(this, SymbolTable.DelAttr); __cmp__F = MethodWrapper.Make(this, SymbolTable.Cmp); __repr__F = MethodWrapper.Make(this, SymbolTable.Repr); __str__F = MethodWrapper.Make(this, SymbolTable.String); }
public void UpdateFromBases(Tuple mro) { if (!isSuperTypeMethod) { return; } Debug.Assert(mro.Count > 0); MethodWrapper current = (MethodWrapper)myField.GetValue(mro[0]); for (int i = 1; i < mro.Count; i++) { if (current != null && !current.isSuperTypeMethod) { break; } object baseTypeObj = mro[i]; PythonType baseType = baseTypeObj as PythonType; if (baseType == null) { System.Diagnostics.Debug.Assert(baseTypeObj is DynamicType); continue; } baseType.Initialize(); string fieldname = (string)SymbolTable.IdToString(name); current = (MethodWrapper)myField.GetValue(baseType); } if (current != null) { UpdateFromBase(current); } }