package org.python.core; public class PySuper extends PyObject implements PyType.Newstyle { //~ BEGIN GENERATED REGION -- DO NOT EDIT SEE gexpose.py /* type info */ public static final String exposed_name="super"; public static void typeSetup(PyObject dict,PyType.Newstyle marker) { dict.__setitem__("__thisclass__",new PyGetSetDescr("__thisclass__",PySuper.class,"getThisClass",null,null)); dict.__setitem__("__self__",new PyGetSetDescr("__self__",PySuper.class,"getSelf",null,null)); dict.__setitem__("__self_class__",new PyGetSetDescr("__self_class__",PySuper.class,"getSelfClass",null,null)); class exposed___getattribute__ extends PyBuiltinMethodNarrow { exposed___getattribute__(PyObject self,PyBuiltinFunction.Info info) { super(self,info); } public PyBuiltinFunction bind(PyObject self) { return new exposed___getattribute__(self,info); } public PyObject __call__(PyObject arg0) { try { String name=(arg0.asName(0)); PyObject ret=((PySuper)self).super___findattr__(name); if (ret==null) ((PySuper)self).noAttributeError(name); return ret; } catch (PyObject.ConversionException e) { String msg; switch (e.index) { case 0: msg="attribute name must be a string"; break; default: msg="xxx"; } throw Py.TypeError(msg); } } } dict.__setitem__("__getattribute__",new PyMethodDescr("__getattribute__",PySuper.class,1,1,new exposed___getattribute__(null,null))); class exposed___get__ extends PyBuiltinMethodNarrow { exposed___get__(PyObject self,PyBuiltinFunction.Info info) { super(self,info); } public PyBuiltinFunction bind(PyObject self) { return new exposed___get__(self,info); } public PyObject __call__(PyObject arg0,PyObject arg1) { PyObject obj=(arg0==Py.None)?null:arg1; PyObject type=(arg1==Py.None)?null:arg0; return((PySuper)self).super___get__(obj,type); } public PyObject __call__(PyObject arg0) { PyObject obj=(arg0==Py.None)?null:(null); PyObject type=((null)==Py.None)?null:arg0; return((PySuper)self).super___get__(obj,type); } } dict.__setitem__("__get__",new PyMethodDescr("__get__",PySuper.class,1,2,new exposed___get__(null,null))); class exposed___init__ extends PyBuiltinMethod { exposed___init__(PyObject self,PyBuiltinFunction.Info info) { super(self,info); } public PyBuiltinFunction bind(PyObject self) { return new exposed___init__(self,info); } public PyObject __call__(PyObject[]args) { return __call__(args,Py.NoKeywords); } public PyObject __call__(PyObject[]args,String[]keywords) { ((PySuper)self).super_init(args,keywords); return Py.None; } } dict.__setitem__("__init__",new PyMethodDescr("__init__",PySuper.class,-1,-1,new exposed___init__(null,null))); dict.__setitem__("__new__",new PyNewWrapper(PySuper.class,"__new__",-1,-1) { public PyObject new_impl(boolean init,PyType subtype,PyObject[]args,String[]keywords) { PySuper newobj; if (for_type==subtype) { newobj=new PySuper(); if (init) newobj.super_init(args,keywords); } else { newobj=new PySuperDerived(subtype); } return newobj; } }); } //~ END GENERATED REGION -- DO NOT EDIT SEE gexpose.py private static final PyType SUPERTYPE = PyType.fromClass(PySuper.class); protected PyType thisClass; protected PyObject self; protected PyType selfClass; private PyType supercheck(PyType type,PyObject obj) { if (obj instanceof PyType && ((PyType)obj).isSubType(type)) { return (PyType)obj; } PyType obj_type = obj.getType(); if (obj_type.isSubType(type)) return obj_type; throw Py.TypeError("super(type, obj): "+ "obj must be an instance or subtype of type"); } public void super_init(PyObject[] args, String[] keywords) { if (keywords.length != 0 || !PyBuiltinFunction.DefaultInfo.check(args.length, 1, 2)) { throw PyBuiltinFunction.DefaultInfo.unexpectedCall(args.length, keywords.length != 0, "super", 1, 2); } if (!(args[0] instanceof PyType)) { throw Py.TypeError("super: argument 1 must be type"); } PyType type = (PyType)args[0]; PyObject obj = null; PyType obj_type = null; if (args.length == 2 && args[1] != Py.None) obj = args[1]; if (obj != null) { obj_type = supercheck(type, obj); } this.thisClass = type; this.self = obj; this.selfClass = obj_type; } public PySuper() { this(SUPERTYPE); } public PySuper(PyType subType) { super(subType); } public PyObject getSelf() { return self; } public PyType getSelfClass() { return selfClass; } public PyType getThisClass() { return thisClass; } public PyObject __findattr__(String name) { return super___findattr__(name); } final PyObject super___findattr__(String name) { if (selfClass != null && name != "__class__") { PyObject descr = selfClass.super_lookup(thisClass, name); return descr.__get__(selfClass == self ? null : self, selfClass); } return super.__findattr__(name); } public PyObject __get__(PyObject obj, PyObject type) { return super___get__(obj,type); } final PyObject super___get__(PyObject obj, PyObject type) { //xxx subtype case! if (obj == null || obj == Py.None || self != null) return this; PyType obj_type = supercheck(this.thisClass, obj); PySuper newsuper = new PySuper(); newsuper.thisClass = this.thisClass; newsuper.self = obj; newsuper.selfClass = obj_type; return newsuper; } }