From: <fwi...@us...> - 2006-04-25 02:10:50
|
Revision: 2717 Author: fwierzbicki Date: 2006-04-24 19:10:43 -0700 (Mon, 24 Apr 2006) ViewCVS: http://svn.sourceforge.net/jython/?rev=2717&view=rev Log Message: ----------- Added the ability to pass a destination file to these gderived and gexpose. Modified Paths: -------------- trunk/sandbox/jt/gderived.py trunk/sandbox/jt/gexpose.py Modified: trunk/sandbox/jt/gderived.py =================================================================== --- trunk/sandbox/jt/gderived.py 2006-04-19 23:00:55 UTC (rev 2716) +++ trunk/sandbox/jt/gderived.py 2006-04-25 02:10:43 UTC (rev 2717) @@ -175,15 +175,23 @@ def generate(self): derived_templ = self.get_aux('derived_class') - print derived_templ.texpand({'base': self.base_class, 'decls': self.decls }) + return derived_templ.texpand({'base': self.base_class, 'decls': self.decls }) -def process(fn): +def process(fn, outfile=sys.stdout): gen = Gen() directives.execute(directives.load(fn),gen) - gen.generate() + result = gen.generate() + print >> outfile, result #gen.debug() +def usage(): + print "Usage: python %s infile [outfile]" % sys.argv[0] + if __name__ == '__main__': - process(sys.argv[1]) + if (len(sys.argv) < 2 or len(sys.argv) > 3): + usage() + elif (len(sys.argv) == 2): + process(sys.argv[1]) + elif (len(sys.argv) == 3): + process(sys.argv[1], file(sys.argv[2], 'w')) - Modified: trunk/sandbox/jt/gexpose.py =================================================================== --- trunk/sandbox/jt/gexpose.py 2006-04-19 23:00:55 UTC (rev 2716) +++ trunk/sandbox/jt/gexpose.py 2006-04-25 02:10:43 UTC (rev 2717) @@ -498,17 +498,24 @@ typeinfo = typeinfo.tfree() + typeinfo1.tfree() - print typeinfo.tnaked().texpand({'basic': basic.tbind(bindings), + return typeinfo.tnaked().texpand({'basic': basic.tbind(bindings), 'setup': setup},nindent=1) - -def process(fn): +def process(fn, outfile=sys.stdout): gen = Gen() directives.execute(directives.load(fn),gen) - gen.generate() + result = gen.generate() + print >> outfile, result #gen.debug() +def usage(): + print "Usage: python %s infile [outfile]" % sys.argv[0] + if __name__ == '__main__': - process(sys.argv[1]) - - + if (len(sys.argv) < 2 or len(sys.argv) > 3): + usage() + elif (len(sys.argv) == 2): + process(sys.argv[1]) + elif (len(sys.argv) == 3): + process(sys.argv[1], file(sys.argv[2], 'w')) + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2006-05-08 02:27:56
|
Revision: 2723 Author: fwierzbicki Date: 2006-05-07 19:27:47 -0700 (Sun, 07 May 2006) ViewCVS: http://svn.sourceforge.net/jython/?rev=2723&view=rev Log Message: ----------- gexpose.py extended to facilitate in-place updates of the generated code. Began implementing __reduce__ for pickle support. Modified Paths: -------------- trunk/sandbox/jt/baseset.expose trunk/sandbox/jt/complex.expose trunk/sandbox/jt/gexpose.py trunk/sandbox/jt/int.expose trunk/sandbox/jt/set.expose Modified: trunk/sandbox/jt/baseset.expose =================================================================== --- trunk/sandbox/jt/baseset.expose 2006-05-04 22:09:51 UTC (rev 2722) +++ trunk/sandbox/jt/baseset.expose 2006-05-08 02:27:47 UTC (rev 2723) @@ -13,6 +13,7 @@ expose_meth: baseset_> :o issubset o expose_meth: baseset_> :o issuperset o expose_meth: baseset_> :i __len__ +expose_meth: baseset_> :o __reduce__ expose_meth: __hash__ `ideleg`(hashCode); expose_meth: baseset_> __repr__ Modified: trunk/sandbox/jt/complex.expose =================================================================== --- trunk/sandbox/jt/complex.expose 2006-05-04 22:09:51 UTC (rev 2722) +++ trunk/sandbox/jt/complex.expose 2006-05-08 02:27:47 UTC (rev 2723) @@ -16,6 +16,7 @@ expose_new_immutable: expose_meth: conjugate expose_meth: :b __nonzero__ +expose_meth: :o __reduce__ expose_meth: __repr__ return new PyString(self.complex_toString()); expose_meth: __str__ Modified: trunk/sandbox/jt/gexpose.py =================================================================== --- trunk/sandbox/jt/gexpose.py 2006-05-04 22:09:51 UTC (rev 2722) +++ trunk/sandbox/jt/gexpose.py 2006-05-08 02:27:47 UTC (rev 2723) @@ -501,21 +501,52 @@ return typeinfo.tnaked().texpand({'basic': basic.tbind(bindings), 'setup': setup},nindent=1) -def process(fn, outfile=sys.stdout): +def process(fn, mergefile=None): gen = Gen() directives.execute(directives.load(fn),gen) result = gen.generate() - print >> outfile, result + if mergefile is None: + print result + else: + result = merge(mergefile, result) #gen.debug() def usage(): - print "Usage: python %s infile [outfile]" % sys.argv[0] + print "Usage: python %s infile [mergefile]" % sys.argv[0] +def merge(filename, generated): + in_generated = False + start_found = False + end_found = False + start_pattern = ' //~ BEGIN GENERATED REGION -- DO NOT EDIT SEE gexpose.py' + end_pattern = ' //~ END GENERATED REGION -- DO NOT EDIT SEE gexpose.py' + output = [] + f = file(filename, 'r') + for line in f: + if line.startswith(start_pattern): + in_generated = True + start_found = True + elif line.startswith(end_pattern): + in_generated = False + end_found = True + output.append('%s\n%s\n%s\n' % (start_pattern, generated, end_pattern)) + elif in_generated: + continue + else: + output.append(line) + f.close() + if not start_found: + raise 'pattern [%s] not found in %s' % (start_pattern, filename) + if not end_found: + raise 'pattern [%s] not found in %s' % (end_pattern, filename) + f = file(filename, 'w') + f.write("".join(output)) + mergefile.close() + if __name__ == '__main__': if (len(sys.argv) < 2 or len(sys.argv) > 3): usage() elif (len(sys.argv) == 2): process(sys.argv[1]) elif (len(sys.argv) == 3): - process(sys.argv[1], file(sys.argv[2], 'w')) - + process(sys.argv[1], sys.argv[2]) Modified: trunk/sandbox/jt/int.expose =================================================================== --- trunk/sandbox/jt/int.expose 2006-05-04 22:09:51 UTC (rev 2722) +++ trunk/sandbox/jt/int.expose 2006-05-08 02:27:47 UTC (rev 2723) @@ -13,6 +13,7 @@ expose_vanilla_pow expose_new_immutable: expose_meth: :b __nonzero__ +expose_meth: :o __reduce__ expose_meth: __repr__ return new PyString(self.int_toString()); expose_meth: __str__ @@ -22,4 +23,4 @@ # TODO # (__coerce__, __doc__) # -# (( __rand__, __rdivmod__, __rlshift__, __ror__, __rrshift__, __rxor__, __rpow__ )) \ No newline at end of file +# (( __rand__, __rdivmod__, __rlshift__, __ror__, __rrshift__, __rxor__, __rpow__ )) Modified: trunk/sandbox/jt/set.expose =================================================================== --- trunk/sandbox/jt/set.expose 2006-05-04 22:09:51 UTC (rev 2722) +++ trunk/sandbox/jt/set.expose 2006-05-08 02:27:47 UTC (rev 2723) @@ -14,6 +14,7 @@ expose_meth: :- intersection_update o expose_meth: :- symmetric_difference_update o expose_meth: :- difference_update o +expose_meth: :o __reduce__ expose_wide_meth: __init__ -1 -1 `vdeleg`(init); `void; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2006-05-14 01:51:10
|
Revision: 2726 Author: fwierzbicki Date: 2006-05-13 18:51:06 -0700 (Sat, 13 May 2006) ViewCVS: http://svn.sourceforge.net/jython/?rev=2726&view=rev Log Message: ----------- classmethod new-style class code generators. Added Paths: ----------- trunk/sandbox/jt/classmethod.derived trunk/sandbox/jt/classmethod.expose Added: trunk/sandbox/jt/classmethod.derived =================================================================== --- trunk/sandbox/jt/classmethod.derived (rev 0) +++ trunk/sandbox/jt/classmethod.derived 2006-05-14 01:51:06 UTC (rev 2726) @@ -0,0 +1,4 @@ +base_class: PyClassMethod +want_dict: true +ctr: +incl: object Added: trunk/sandbox/jt/classmethod.expose =================================================================== --- trunk/sandbox/jt/classmethod.expose (rev 0) +++ trunk/sandbox/jt/classmethod.expose 2006-05-14 01:51:06 UTC (rev 2726) @@ -0,0 +1,6 @@ +# setup +type_name: classmethod +type_class: PyClassMethod +# exposed methods +expose_meth: __get__ oo +expose_new_immutable: 1 1 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2006-05-19 18:59:31
|
Revision: 2735 Author: fwierzbicki Date: 2006-05-19 11:59:25 -0700 (Fri, 19 May 2006) ViewCVS: http://svn.sourceforge.net/jython/?rev=2735&view=rev Log Message: ----------- Cleanup of new-style class support. Modified Paths: -------------- trunk/sandbox/jt/complex.expose trunk/sandbox/jt/dict.expose trunk/sandbox/jt/int.expose trunk/sandbox/jt/type.expose Modified: trunk/sandbox/jt/complex.expose =================================================================== --- trunk/sandbox/jt/complex.expose 2006-05-18 20:58:24 UTC (rev 2734) +++ trunk/sandbox/jt/complex.expose 2006-05-19 18:59:25 UTC (rev 2735) @@ -16,7 +16,7 @@ expose_new_immutable: expose_meth: conjugate expose_meth: :b __nonzero__ -expose_meth: :o __reduce__ +#expose_meth: :o __reduce__ expose_meth: __repr__ return new PyString(self.complex_toString()); expose_meth: __str__ Modified: trunk/sandbox/jt/dict.expose =================================================================== --- trunk/sandbox/jt/dict.expose 2006-05-18 20:58:24 UTC (rev 2734) +++ trunk/sandbox/jt/dict.expose 2006-05-19 18:59:25 UTC (rev 2735) @@ -2,21 +2,17 @@ type_name: dict type_class: PyDictionary # exposed methods -expose_meth: fromkeys oo? +expose_binary: __ne__ __eq__ +expose_vanilla_cmp: +expose_meth: fromkeys o o? +expose_key_getitem: expose_meth: get oo? expose_meth: setdefault oo? -expose_new_mutable: -expose_wide_meth: __init__ -1 -1 - `vdeleg`(init); - `void; -expose_meth: popitem expose_meth: pop o o? +expose_meth: popitem expose_meth: :b has_key o -expose_binary: __ne__ __eq__ expose_meth: :b __contains__ o -expose_vanilla_cmp: expose_meth: :i __len__ -expose_key_getitem: expose_meth: :- __setitem__ oo expose_meth: :- __delitem__ o expose_meth: keys @@ -28,12 +24,15 @@ expose_meth: values expose_meth: :- clear expose_meth: copy +expose_meth: __iter__ expose_meth: __hash__ `ideleg`(hashCode); expose_meth: __repr__ `sdeleg`(toString); -expose_meth: __iter__ -expose_meth: fromkeys o o? +expose_new_mutable: +expose_wide_meth: __init__ -1 -1 + `vdeleg`(init); + `void; # TODO: # ('__getattribute__'), # '__lt__', '__gt__', '__ge__', __le__' Modified: trunk/sandbox/jt/int.expose =================================================================== --- trunk/sandbox/jt/int.expose 2006-05-18 20:58:24 UTC (rev 2734) +++ trunk/sandbox/jt/int.expose 2006-05-19 18:59:25 UTC (rev 2735) @@ -13,7 +13,7 @@ expose_vanilla_pow expose_new_immutable: expose_meth: :b __nonzero__ -expose_meth: :o __reduce__ +#expose_meth: :o __reduce__ expose_meth: __repr__ return new PyString(self.int_toString()); expose_meth: __str__ Modified: trunk/sandbox/jt/type.expose =================================================================== --- trunk/sandbox/jt/type.expose 2006-05-18 20:58:24 UTC (rev 2734) +++ trunk/sandbox/jt/type.expose 2006-05-19 18:59:25 UTC (rev 2735) @@ -7,6 +7,7 @@ expose_getset: __base__ getBase expose_getset: __bases__ getBases # exposed methods +#expose_meth: :o mro o expose_meth: __getattribute__ n{attribute name} String name = `arg0; PyObject ret = self.type___findattr__(name); @@ -23,4 +24,4 @@ # __cmp__ # __repr__ # __hash__', -# ( __doc__, __module__) \ No newline at end of file +# ( __doc__, __module__) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2006-05-24 17:16:32
|
Revision: 2759 Author: fwierzbicki Date: 2006-05-24 10:16:28 -0700 (Wed, 24 May 2006) ViewCVS: http://svn.sourceforge.net/jython/?rev=2759&view=rev Log Message: ----------- Templating code reverse-engineered from patch #1455153. Thanks to Khalid Zuberi. Modified Paths: -------------- trunk/sandbox/jt/object.derived trunk/sandbox/jt/sequence.expose Modified: trunk/sandbox/jt/object.derived =================================================================== --- trunk/sandbox/jt/object.derived 2006-05-24 17:14:45 UTC (rev 2758) +++ trunk/sandbox/jt/object.derived 2006-05-24 17:16:28 UTC (rev 2759) @@ -165,6 +165,35 @@ super.__setitem__(key,value); } + public PyObject __getitem__(PyObject key) { // ??? + PyType self_type=getType(); + PyObject impl=self_type.lookup("__getitem__"); + if (impl!=null) { + try { + return impl.__get__(this,self_type).__call__(key); + } catch (PyException exc) { + if (Py.matchException(exc,Py.LookupError)) + return null; + throw exc; + } + } + return super.__getitem__(key); + } + + public PyObject __getslice__(PyObject start, PyObject stop, PyObject step) { // ??? + PyType self_type=getType(); + PyObject impl=self_type.lookup("__getslice__"); + if (impl!=null) + try { + return impl.__get__(this,self_type).__call__(start, stop); + } catch (PyException exc) { + if (Py.matchException(exc,Py.LookupError)) + return null; + throw exc; + } + return super.__getslice__(start, stop, step); + } + public void __delitem__(PyObject key) { // ??? PyType self_type = getType(); PyObject impl = self_type.lookup("__delitem__"); @@ -196,19 +225,19 @@ PyString py_name = null; try { if (getattribute != null) { - return getattribute.__get__(this,self_type).__call__(py_name = new PyString(name)); + return getattribute.__get__(this,self_type).__call__(py_name = new PyString(name)); } else { - return super.__findattr__(name); + return super.__findattr__(name); } } catch(PyException e) { if (Py.matchException(e,Py.AttributeError)) { - PyObject getattr = self_type.lookup("__getattr__"); - if (getattr != null) - try { - return getattr.__get__(this,self_type).__call__(py_name!=null?py_name:new PyString(name)); - } catch(PyException e1) { - if (!Py.matchException(e1,Py.AttributeError)) throw e1; - } + PyObject getattr = self_type.lookup("__getattr__"); + if (getattr != null) + try { + return getattr.__get__(this,self_type).__call__(py_name!=null?py_name:new PyString(name)); + } catch(PyException e1) { + if (!Py.matchException(e1,Py.AttributeError)) throw e1; + } return null; } throw e; Modified: trunk/sandbox/jt/sequence.expose =================================================================== --- trunk/sandbox/jt/sequence.expose 2006-05-24 17:14:45 UTC (rev 2758) +++ trunk/sandbox/jt/sequence.expose 2006-05-24 17:16:28 UTC (rev 2759) @@ -7,6 +7,6 @@ expose_meth: seq_> :- __setitem__ oo expose_index_getitem: seq_> expose_meth: seq_> :b __nonzero__ -expose_meth: seq_> __getslice__ ooo +expose_meth: seq_> __getslice__ ooo? expose_meth: seq_> :- __delslice__ ooo -expose_meth: seq_> :- __setslice__ oooo +expose_meth: seq_> :- __setslice__ oooo? This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2006-05-26 02:17:55
|
Revision: 2761 Author: fwierzbicki Date: 2006-05-25 19:17:50 -0700 (Thu, 25 May 2006) ViewCVS: http://svn.sourceforge.net/jython/?rev=2761&view=rev Log Message: ----------- Start of 2.2 level pickle support. Modified Paths: -------------- trunk/sandbox/jt/int.derived trunk/sandbox/jt/int.expose trunk/sandbox/jt/object.derived Modified: trunk/sandbox/jt/int.derived =================================================================== --- trunk/sandbox/jt/int.derived 2006-05-26 02:15:40 UTC (rev 2760) +++ trunk/sandbox/jt/int.derived 2006-05-26 02:17:50 UTC (rev 2761) @@ -1,4 +1,4 @@ base_class: PyInteger want_dict: true -ctr: +ctr: int v incl: object Modified: trunk/sandbox/jt/int.expose =================================================================== --- trunk/sandbox/jt/int.expose 2006-05-26 02:15:40 UTC (rev 2760) +++ trunk/sandbox/jt/int.expose 2006-05-26 02:17:50 UTC (rev 2761) @@ -13,7 +13,7 @@ expose_vanilla_pow expose_new_immutable: expose_meth: :b __nonzero__ -#expose_meth: :o __reduce__ +expose_meth: :o __reduce__ expose_meth: __repr__ return new PyString(self.int_toString()); expose_meth: __str__ Modified: trunk/sandbox/jt/object.derived =================================================================== --- trunk/sandbox/jt/object.derived 2006-05-26 02:15:40 UTC (rev 2760) +++ trunk/sandbox/jt/object.derived 2006-05-26 02:17:50 UTC (rev 2761) @@ -14,6 +14,7 @@ unary1: __neg__ unary1: __abs__ unary1: __invert__ +unary1: __reduce__ binary: __add__ __radd__ \ __sub__ __rsub__ \ __mul__ __rmul__ \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2006-05-27 02:22:37
|
Revision: 2766 Author: fwierzbicki Date: 2006-05-26 19:22:32 -0700 (Fri, 26 May 2006) ViewCVS: http://svn.sourceforge.net/jython/?rev=2766&view=rev Log Message: ----------- pickle support + better code generation for __unicode__ method. Modified Paths: -------------- trunk/sandbox/jt/object.derived trunk/sandbox/jt/object.expose trunk/sandbox/jt/str.derived trunk/sandbox/jt/str.expose Modified: trunk/sandbox/jt/object.derived =================================================================== --- trunk/sandbox/jt/object.derived 2006-05-27 02:17:42 UTC (rev 2765) +++ trunk/sandbox/jt/object.derived 2006-05-27 02:22:32 UTC (rev 2766) @@ -3,7 +3,6 @@ ctr: unary1: __str__ string unary1: __repr__ string -unary1: __unicode__ unicode PyUnicode unary1: __hex__ string unary1: __oct__ string unary1: __int__ int PyObject @@ -71,6 +70,20 @@ return super.hashCode(); } + public PyUnicode __unicode__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__unicode__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyUnicode) + return(PyUnicode)res; + if (res instanceof PyString) + return new PyUnicode((PyString)res); + throw Py.TypeError("__unicode__"+" should return a "+"unicode"); + } + return super.__unicode__(); + } + public int __cmp__(PyObject other) { PyType self_type = getType(); PyObject impl = self_type.lookup("__cmp__"); Modified: trunk/sandbox/jt/object.expose =================================================================== --- trunk/sandbox/jt/object.expose 2006-05-27 02:17:42 UTC (rev 2765) +++ trunk/sandbox/jt/object.expose 2006-05-27 02:22:32 UTC (rev 2766) @@ -6,6 +6,7 @@ expose_getset: __doc__ getDoc # exposed methods +expose_meth: :o __reduce__ expose_meth: __str__ return self.__repr__(); expose_meth: __getattribute__ n{attribute name} @@ -25,5 +26,3 @@ expose_wide_meth: __init__ -1 -1 `vdeleg`(init); `void; -# TODO: -# __reduce__, Modified: trunk/sandbox/jt/str.derived =================================================================== --- trunk/sandbox/jt/str.derived 2006-05-27 02:17:42 UTC (rev 2765) +++ trunk/sandbox/jt/str.derived 2006-05-27 02:22:32 UTC (rev 2766) @@ -1,4 +1,4 @@ base_class: PyString want_dict: true -ctr: +ctr: String v incl: object Modified: trunk/sandbox/jt/str.expose =================================================================== --- trunk/sandbox/jt/str.expose 2006-05-27 02:17:42 UTC (rev 2765) +++ trunk/sandbox/jt/str.expose 2006-05-27 02:22:32 UTC (rev 2766) @@ -7,6 +7,7 @@ expose_meth: :i __len__ expose_meth: __add__ o expose_meth: __mul__ o +expose_meth: __reduce__ expose_meth: __rmul__ o expose_meth: __hash__ `ideleg`(hashCode); @@ -31,7 +32,14 @@ expose_meth: :b istitle expose_meth: :b isunicode expose_meth: :b isupper -expose_meth: :s join o +expose_meth: join o + String result = self.str_join(arg0); + //XXX: do we really need to check self? + if (self instanceof PyUnicode || arg0 instanceof PyUnicode) { + return new PyUnicode(result); + } else { + return new PyString(result); + } expose_meth: :s ljust i expose_meth: :s lower expose_meth: :s lstrip S? @@ -53,4 +61,3 @@ #TODO #expose_index_getitem: #expose_meth: :b __nonzero__ -#expose_meth: __reduce__ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2006-05-28 04:02:46
|
Revision: 2770 Author: fwierzbicki Date: 2006-05-27 21:02:41 -0700 (Sat, 27 May 2006) ViewCVS: http://svn.sourceforge.net/jython/?rev=2770&view=rev Log Message: ----------- added __reduce__ to list, complex and timetuple. Modified Paths: -------------- trunk/sandbox/jt/complex.derived trunk/sandbox/jt/complex.expose trunk/sandbox/jt/list.expose trunk/sandbox/jt/timetuple.expose Modified: trunk/sandbox/jt/complex.derived =================================================================== --- trunk/sandbox/jt/complex.derived 2006-05-28 03:58:51 UTC (rev 2769) +++ trunk/sandbox/jt/complex.derived 2006-05-28 04:02:41 UTC (rev 2770) @@ -1,4 +1,4 @@ base_class: PyComplex want_dict: true -ctr: +ctr: double real, double imaginary incl: object Modified: trunk/sandbox/jt/complex.expose =================================================================== --- trunk/sandbox/jt/complex.expose 2006-05-28 03:58:51 UTC (rev 2769) +++ trunk/sandbox/jt/complex.expose 2006-05-28 04:02:41 UTC (rev 2770) @@ -16,7 +16,7 @@ expose_new_immutable: expose_meth: conjugate expose_meth: :b __nonzero__ -#expose_meth: :o __reduce__ +expose_meth: :o __reduce__ expose_meth: __repr__ return new PyString(self.complex_toString()); expose_meth: __str__ Modified: trunk/sandbox/jt/list.expose =================================================================== --- trunk/sandbox/jt/list.expose 2006-05-28 03:58:51 UTC (rev 2769) +++ trunk/sandbox/jt/list.expose 2006-05-28 04:02:41 UTC (rev 2770) @@ -18,7 +18,7 @@ expose_meth: __radd__ o expose_meth: __iadd__ o expose_meth: __imul__ o -#expose_meth: __reduce__ +expose_meth: __reduce__ expose_meth: __mul__ o expose_meth: __rmul__ o expose_meth: __hash__ Modified: trunk/sandbox/jt/timetuple.expose =================================================================== --- trunk/sandbox/jt/timetuple.expose 2006-05-28 03:58:51 UTC (rev 2769) +++ trunk/sandbox/jt/timetuple.expose 2006-05-28 04:02:41 UTC (rev 2770) @@ -14,4 +14,5 @@ expose_getset: tm_isdst getIsdst # exposed methods expose_binary: __ne__ __eq__ +expose_meth: :o __reduce__ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2006-06-08 02:44:11
|
Revision: 2802 Author: fwierzbicki Date: 2006-06-07 07:46:58 -0700 (Wed, 07 Jun 2006) ViewCVS: http://svn.sourceforge.net/jython/?rev=2802&view=rev Log Message: ----------- Some classmethod fixups, also added classmethod mro() to type. Modified Paths: -------------- trunk/jython/src/org/python/core/PyClassMethod.java trunk/jython/src/org/python/core/PyType.java trunk/sandbox/jt/classmethod.expose trunk/sandbox/jt/type.expose Modified: trunk/jython/src/org/python/core/PyClassMethod.java =================================================================== --- trunk/jython/src/org/python/core/PyClassMethod.java 2006-06-07 01:20:56 UTC (rev 2801) +++ trunk/jython/src/org/python/core/PyClassMethod.java 2006-06-07 14:46:58 UTC (rev 2802) @@ -35,8 +35,17 @@ return self.classmethod___get__(arg0,arg1); } + public PyObject __call__(PyObject arg0) { + return self.classmethod___get__(arg0); + } + + public PyObject inst_call(PyObject gself,PyObject arg0) { + PyClassMethod self=(PyClassMethod)gself; + return self.classmethod___get__(arg0); + } + } - dict.__setitem__("__get__",new PyMethodDescr("__get__",PyClassMethod.class,2,2,new exposed___get__(null,null))); + dict.__setitem__("__get__",new PyMethodDescr("__get__",PyClassMethod.class,1,2,new exposed___get__(null,null))); dict.__setitem__("__new__",new PyNewWrapper(PyClassMethod.class,"__new__",1,1) { public PyObject new_impl(boolean init,PyType subtype,PyObject[]args,String[]keywords) { @@ -56,10 +65,18 @@ this.callable = callable; } + public PyObject __get__(PyObject obj) { + return classmethod___get__(obj, null); + } + public PyObject __get__(PyObject obj, PyObject type) { return classmethod___get__(obj, type); } + final PyObject classmethod___get__(PyObject obj) { + return classmethod___get__(obj, null); + } + final PyObject classmethod___get__(PyObject obj, PyObject type) { if (type == null) type = obj.getType(); Modified: trunk/jython/src/org/python/core/PyType.java =================================================================== --- trunk/jython/src/org/python/core/PyType.java 2006-06-07 01:20:56 UTC (rev 2801) +++ trunk/jython/src/org/python/core/PyType.java 2006-06-07 14:46:58 UTC (rev 2802) @@ -25,6 +25,43 @@ dict.__setitem__("__base__",new PyGetSetDescr("__base__",PyType.class,"getBase",null)); dict.__setitem__("__bases__",new PyGetSetDescr("__bases__",PyType.class,"getBases",null)); dict.__setitem__("__mro__",new PyGetSetDescr("__mro__",PyType.class,"getMro",null)); + class exposed_mro extends PyBuiltinFunctionNarrow { + + private PyType self; + + public PyObject getSelf() { + return self; + } + + exposed_mro(PyType self,PyBuiltinFunction.Info info) { + super(info); + this.self=self; + } + + public PyBuiltinFunction makeBound(PyObject self) { + return new exposed_mro((PyType)self,info); + } + + public PyObject __call__(PyObject arg0) { + return self.type_mro(arg0); + } + + public PyObject inst_call(PyObject gself,PyObject arg0) { + PyType self=(PyType)gself; + return self.type_mro(arg0); + } + + public PyObject __call__() { + return self.type_mro(); + } + + public PyObject inst_call(PyObject gself) { + PyType self=(PyType)gself; + return self.type_mro(); + } + + } + dict.__setitem__("mro", new PyClassMethod(new PyMethodDescr("mro",PyType.class,0,1,new exposed_mro(null,null)))); class exposed___getattribute__ extends PyBuiltinFunctionNarrow { private PyType self; @@ -468,7 +505,26 @@ System.out.println(new PyList(objs).toString()); } - final PyObject[] type_mro() { + + final PyTuple type_mro() { + return getMro(); + } + + final PyTuple type_mro(PyObject o) { + //FIXME: PyMethDescr should be gaurding against args that are not the + // correct type in the generated code, but that is not working. + // fix and delete this instanceof check. + if (!(o instanceof PyType)) { + throw Py.TypeError( + "descriptor 'mro' requires a 'type' object but received a '" + + o.getType().fastGetName() + + "'"); + } + PyType type = (PyType)o; + return type.type_mro(); + } + + final PyObject[] compute_mro() { PyObject[] bases = this.bases; int n = bases.length; for (int i=0; i < n; i++) { @@ -671,7 +727,7 @@ mro_meth = metatype.lookup("mro"); if (mro_meth == null) { - newmro = newtype.type_mro(); + newmro = newtype.compute_mro(); } else { newmro = Py.make_array(mro_meth.__get__(newtype,metatype).__call__()); } Modified: trunk/sandbox/jt/classmethod.expose =================================================================== --- trunk/sandbox/jt/classmethod.expose 2006-06-07 01:20:56 UTC (rev 2801) +++ trunk/sandbox/jt/classmethod.expose 2006-06-07 14:46:58 UTC (rev 2802) @@ -2,5 +2,5 @@ type_name: classmethod type_class: PyClassMethod # exposed methods -expose_meth: __get__ oo +expose_meth: __get__ oo? expose_new_immutable: 1 1 Modified: trunk/sandbox/jt/type.expose =================================================================== --- trunk/sandbox/jt/type.expose 2006-06-07 01:20:56 UTC (rev 2801) +++ trunk/sandbox/jt/type.expose 2006-06-07 14:46:58 UTC (rev 2802) @@ -8,7 +8,7 @@ expose_getset: __bases__ getBases expose_getset: __mro__ getMro # exposed methods -#expose_meth: :o mro o +expose_meth: :o mro o? expose_meth: __getattribute__ n{attribute name} String name = `arg0; PyObject ret = self.type___findattr__(name); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2006-06-08 02:57:53
|
Revision: 2803 Author: fwierzbicki Date: 2006-06-07 11:52:25 -0700 (Wed, 07 Jun 2006) ViewCVS: http://svn.sourceforge.net/jython/?rev=2803&view=rev Log Message: ----------- Added classmethod generation to gexpose, added classmethod to type.expose, and also fixed bug in float.expose. Modified Paths: -------------- trunk/sandbox/jt/directives.py trunk/sandbox/jt/float.expose trunk/sandbox/jt/gexpose-defs trunk/sandbox/jt/gexpose.py trunk/sandbox/jt/test.expose trunk/sandbox/jt/type.expose Modified: trunk/sandbox/jt/directives.py =================================================================== --- trunk/sandbox/jt/directives.py 2006-06-07 14:46:58 UTC (rev 2802) +++ trunk/sandbox/jt/directives.py 2006-06-07 18:52:25 UTC (rev 2803) @@ -111,4 +111,6 @@ +if __name__ == '__main__': + test() Modified: trunk/sandbox/jt/float.expose =================================================================== --- trunk/sandbox/jt/float.expose 2006-06-07 14:46:58 UTC (rev 2802) +++ trunk/sandbox/jt/float.expose 2006-06-07 18:52:25 UTC (rev 2803) @@ -18,7 +18,7 @@ expose_meth: __str__ return new PyString(self.float_toString()); expose_meth: __hash__ - return Py.newFloat(self.float_hashCode()); + return Py.newInteger(self.float_hashCode()); # TODO # (__coerce__, __doc__) # Modified: trunk/sandbox/jt/gexpose-defs =================================================================== --- trunk/sandbox/jt/gexpose-defs 2006-06-07 14:46:58 UTC (rev 2802) +++ trunk/sandbox/jt/gexpose-defs 2006-06-07 18:52:25 UTC (rev 2803) @@ -96,6 +96,38 @@ `minargs, `maxargs, new `concat`(exposed_,`name)(null, null))); + +define: expose_narrow_cmeth typ name minargs maxargs call_meths + class `concat`(exposed_,`name) extends PyBuiltinFunctionNarrow { + private `typ self; + + public PyObject getSelf() { + return self; + } + + `concat`(exposed_,`name)(`typ self, PyBuiltinFunction.Info info) { + super(info); + this.self = self; + } + + public PyBuiltinFunction makeBound(PyObject self) { + return new `concat`(exposed_,`name)((`typ)self, info); + } + + `call_meths; + + } + + dict.__setitem__( + `strfy`(`name), + new PyClassMethod( + new PyMethodDescr( + `strfy`(`name), + `typ.class, + `minargs, + `maxargs, + new `concat`(exposed_,`name)(null, null)))); + define: conv_error_handling unsafe_body try { `unsafe_body; Modified: trunk/sandbox/jt/gexpose.py =================================================================== --- trunk/sandbox/jt/gexpose.py 2006-06-07 14:46:58 UTC (rev 2802) +++ trunk/sandbox/jt/gexpose.py 2006-06-07 18:52:25 UTC (rev 2803) @@ -28,6 +28,7 @@ 'expose_vanilla_cmp','expose_vanilla_pow', 'expose_key_getitem', 'expose_index_getitem', + 'expose_cmeth', 'expose_meth', 'expose_wide_meth', 'expose_new_mutable', @@ -336,6 +337,41 @@ self.statements.append(expose.tbind(expose_bindings)) + #XXX: First pass is a c&p and modify of dire_expose_meth: do better. + def dire_expose_cmeth(self,name,parm,body): + parm, prefix, body = self.expose_meth_body(name, parm, body) + expose = self.get_aux('expose_narrow_cmeth') + + type_class = getattr(self,'type_class',None) + type_name = getattr(self,'type_name',None) + if type_class is None or type_name is None: + raise Exception,"type_class or type_name not defined" + parms = parm.strip().split(None,1) + if len(parms) not in (1,2): + self.invalid(name,parm) + if len(parms) == 1: + parms.append('') + expose_bindings = {} + expose_bindings['typ'] = type_class + expose_bindings['name'] = JavaTemplate(parms[0]) + expose_bindings['deleg_prefix'] = make_name(prefix) + + # !!! + call_meths_bindings = expose_bindings.copy() + + body_bindings = self.global_bindings.copy() + body_bindings.update(expose_bindings) + + call_meths_bindings['call_meths'] = self.get_aux('call_meths').tbind({'typ': type_class}) + + inst_call_meths,minargs,maxargs = self.handle_expose_meth_sig(parms[1],call_meths_bindings,body,body_bindings) + + expose_bindings['call_meths'] = inst_call_meths + expose_bindings['minargs'] = JavaTemplate(str(minargs)) + expose_bindings['maxargs'] = JavaTemplate(str(maxargs)) + + self.statements.append(expose.tbind(expose_bindings)) + def dire_expose_unary(self,name,parm,body): if body is not None: self.invalid(name,'non-empty body') Modified: trunk/sandbox/jt/test.expose =================================================================== --- trunk/sandbox/jt/test.expose 2006-06-07 14:46:58 UTC (rev 2802) +++ trunk/sandbox/jt/test.expose 2006-06-07 18:52:25 UTC (rev 2803) @@ -16,8 +16,9 @@ `ideleg`(imeth3,parent_); expose_meth: > imeth4 `ideleg`(imeth4); +expose_cmeth: cmeth expose_binary: prnt_> __add__ __sub__ expose_unary: prnt_> __hex__ - \ No newline at end of file + Modified: trunk/sandbox/jt/type.expose =================================================================== --- trunk/sandbox/jt/type.expose 2006-06-07 14:46:58 UTC (rev 2802) +++ trunk/sandbox/jt/type.expose 2006-06-07 18:52:25 UTC (rev 2803) @@ -7,8 +7,9 @@ expose_getset: __base__ getBase expose_getset: __bases__ getBases expose_getset: __mro__ getMro +# classmethods +expose_cmeth: :o mro o? # exposed methods -expose_meth: :o mro o? expose_meth: __getattribute__ n{attribute name} String name = `arg0; PyObject ret = self.type___findattr__(name); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2006-06-09 18:27:32
|
Revision: 2812 Author: fwierzbicki Date: 2006-06-09 11:27:27 -0700 (Fri, 09 Jun 2006) ViewCVS: http://svn.sourceforge.net/jython/?rev=2812&view=rev Log Message: ----------- Added unicode type to gexpose. Added some methods for test_descr work. Modified Paths: -------------- trunk/sandbox/jt/gexpose-defs trunk/sandbox/jt/gexpose.py trunk/sandbox/jt/str.expose trunk/sandbox/jt/tuple.expose trunk/sandbox/jt/unicode.expose Added Paths: ----------- trunk/sandbox/jt/super.derived Modified: trunk/sandbox/jt/gexpose-defs =================================================================== --- trunk/sandbox/jt/gexpose-defs 2006-06-09 18:22:26 UTC (rev 2811) +++ trunk/sandbox/jt/gexpose-defs 2006-06-09 18:27:27 UTC (rev 2812) @@ -184,6 +184,8 @@ return Py.newBoolean(`deleg`(`name,`deleg_prefix)); define: sdeleg: name deleg_prefix return new PyString(`deleg`(`name,`deleg_prefix)); +define: udeleg: name deleg_prefix + return new PyUnicode(`deleg`(`name,`deleg_prefix)); define: void: return Py.None; define: expose_new Modified: trunk/sandbox/jt/gexpose.py =================================================================== --- trunk/sandbox/jt/gexpose.py 2006-06-09 18:22:26 UTC (rev 2811) +++ trunk/sandbox/jt/gexpose.py 2006-06-09 18:27:27 UTC (rev 2812) @@ -258,7 +258,7 @@ for dv in dfls[rng-1-dflc:]: new_body_bindings["arg%d" % j] = dv j += 1 - for deleg_templ_name in ('void','deleg','vdeleg','rdeleg','ideleg','ldeleg','bdeleg','sdeleg'): + for deleg_templ_name in ('void','deleg','vdeleg','rdeleg','ideleg','ldeleg','bdeleg','sdeleg', 'udeleg'): deleg_templ = self.get_aux(deleg_templ_name) new_body_bindings[deleg_templ_name] = deleg_templ.tbind(new_body_bindings) body_jt = proto_body_jt.tbind(new_body_bindings) @@ -293,6 +293,7 @@ ":l" : "`ldeleg;", ":b" : "`bdeleg;", ":s" : "`sdeleg;", + ":u" : "`udeleg;", ":-" : "`vdeleg; `void; ", ":o" : "`rdeleg;" }.get(retk, None) Modified: trunk/sandbox/jt/str.expose =================================================================== --- trunk/sandbox/jt/str.expose 2006-06-09 18:22:26 UTC (rev 2811) +++ trunk/sandbox/jt/str.expose 2006-06-09 18:27:27 UTC (rev 2812) @@ -6,9 +6,14 @@ expose_meth: :b __contains__ o expose_meth: :i __len__ expose_meth: __add__ o +expose_meth: __getitem__ o +expose_meth: __getslice__ ooo? +expose_meth: __iter__ expose_meth: __mul__ o expose_meth: __reduce__ expose_meth: __rmul__ o +expose_meth: __str__ +expose_meth: __unicode__ expose_meth: __hash__ `ideleg`(hashCode); expose_meth: __repr__ Added: trunk/sandbox/jt/super.derived =================================================================== --- trunk/sandbox/jt/super.derived (rev 0) +++ trunk/sandbox/jt/super.derived 2006-06-09 18:27:27 UTC (rev 2812) @@ -0,0 +1,4 @@ +base_class: PySuper +want_dict: true +ctr: +incl: object Modified: trunk/sandbox/jt/tuple.expose =================================================================== --- trunk/sandbox/jt/tuple.expose 2006-06-09 18:22:26 UTC (rev 2811) +++ trunk/sandbox/jt/tuple.expose 2006-06-09 18:27:27 UTC (rev 2812) @@ -9,6 +9,8 @@ expose_meth: __reduce__ expose_meth: __mul__ o expose_meth: __rmul__ o +expose_meth: __getitem__ o +expose_meth: __getslice__ ooo? expose_meth: __hash__ `ideleg`(hashCode); expose_meth: __repr__ Modified: trunk/sandbox/jt/unicode.expose =================================================================== --- trunk/sandbox/jt/unicode.expose 2006-06-09 18:22:26 UTC (rev 2811) +++ trunk/sandbox/jt/unicode.expose 2006-06-09 18:27:27 UTC (rev 2812) @@ -6,19 +6,23 @@ expose_meth: :b __contains__ o expose_meth: :i __len__ expose_meth: __add__ o +expose_meth: __getslice__ ooo? +expose_meth: __iter__ expose_meth: __mul__ o expose_meth: __rmul__ o +expose_meth: __str__ +expose_meth: __unicode__ expose_meth: __hash__ `ideleg`(hashCode); expose_meth: __repr__ `sdeleg`(toString); -expose_meth: :s capitalize -expose_meth: :s center i +expose_meth: :u capitalize +expose_meth: :u center i expose_meth: :i count s i? i? -expose_meth: :s decode s? s? -expose_meth: :s encode s? s? +expose_meth: :u decode s? s? +expose_meth: :u encode s? s? expose_meth: :b endswith s i? i? -expose_meth: :s expandtabs i? +expose_meth: :u expandtabs i? expose_meth: :i find s i? i? expose_meth: :i index s i? i? expose_meth: :b isalnum @@ -31,24 +35,24 @@ expose_meth: :b istitle expose_meth: :b isunicode expose_meth: :b isupper -expose_meth: :s join o -expose_meth: :s ljust i -expose_meth: :s lower -expose_meth: :s lstrip S? -expose_meth: :s replace s s i? +expose_meth: :u join o +expose_meth: :u ljust i +expose_meth: :u lower +expose_meth: :u lstrip S? +expose_meth: :u replace s s i? expose_meth: :i rfind s i? i? expose_meth: :i rindex s i? i? -expose_meth: :s rjust i -expose_meth: :s rstrip S? +expose_meth: :u rjust i +expose_meth: :u rstrip S? expose_meth: :o split S? i? -expose_meth: :o splitlines o? +expose_meth: :o splitlines b? expose_meth: :b startswith s i? i? -expose_meth: :s strip S? -expose_meth: :s swapcase -expose_meth: :s title -expose_meth: :s translate s s? -expose_meth: :s upper -expose_meth: :s zfill i +expose_meth: :u strip S? +expose_meth: :u swapcase +expose_meth: :u title +expose_meth: :u translate s s? +expose_meth: :u upper +expose_meth: :u zfill i expose_new_immutable: #TODO #expose_index_getitem: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2006-06-09 19:18:04
|
Revision: 2813 Author: fwierzbicki Date: 2006-06-09 12:17:47 -0700 (Fri, 09 Jun 2006) ViewCVS: http://svn.sourceforge.net/jython/?rev=2813&view=rev Log Message: ----------- Fixed up PyUnicode, first cut at PyTypeDerived. Modified Paths: -------------- trunk/jython/src/org/python/core/PyString.java trunk/jython/src/org/python/core/PyType.java trunk/jython/src/org/python/core/PyUnicode.java Added Paths: ----------- trunk/jython/src/org/python/core/PyTypeDerived.java trunk/sandbox/jt/type.derived Modified: trunk/jython/src/org/python/core/PyString.java =================================================================== --- trunk/jython/src/org/python/core/PyString.java 2006-06-09 18:27:27 UTC (rev 2812) +++ trunk/jython/src/org/python/core/PyString.java 2006-06-09 19:17:47 UTC (rev 2813) @@ -2856,7 +2856,7 @@ if (S == null) { return new PyString(""); } - if (S instanceof PyStringDerived) { + if (S instanceof PyStringDerived || S instanceof PyUnicode) { return new PyString(S.toString()); } if (S instanceof PyString) { return (PyString)S; Modified: trunk/jython/src/org/python/core/PyType.java =================================================================== --- trunk/jython/src/org/python/core/PyType.java 2006-06-09 18:27:27 UTC (rev 2812) +++ trunk/jython/src/org/python/core/PyType.java 2006-06-09 19:17:47 UTC (rev 2813) @@ -304,7 +304,7 @@ } //~ END GENERATED REGION -- DO NOT EDIT SEE gexpose.py - public static PyObject type_new(PyObject new_, boolean init, + public static PyObject type_new(PyNewWrapper new_, boolean init, PyType subtype, PyObject[] args, String[] keywords) { if (args.length == 1 && keywords.length == 0) { return args[0].getType(); @@ -631,7 +631,7 @@ return base; } - public static PyObject newType(PyObject new_,PyType metatype,String name,PyTuple bases,PyObject dict) { + public static PyObject newType(PyNewWrapper new_,PyType metatype,String name,PyTuple bases,PyObject dict) { PyType object_type = fromClass(PyObject.class); PyObject[] bases_list = bases.getArray(); @@ -702,9 +702,13 @@ // xxx also __doc__ __module__ // xxx __slots__! + PyType newtype; + if (new_.for_type == metatype) { + newtype = new PyType(); // xxx set metatype + } else { + newtype = new PyTypeDerived(metatype); + } - PyType newtype = new PyType(); // xxx set metatype - newtype.name = name; newtype.base = base; newtype.bases = bases_list; @@ -813,6 +817,10 @@ private PyType() { } + PyType(PyType subtype) { + super(true); + } + private static String decapitalize(String s) { char c0 = s.charAt(0); if (Character.isUpperCase(c0)) { Added: trunk/jython/src/org/python/core/PyTypeDerived.java =================================================================== --- trunk/jython/src/org/python/core/PyTypeDerived.java (rev 0) +++ trunk/jython/src/org/python/core/PyTypeDerived.java 2006-06-09 19:17:47 UTC (rev 2813) @@ -0,0 +1,945 @@ +package org.python.core; + +public class PyTypeDerived extends PyType { + + private PyObject dict; + + public PyObject fastGetDict() { + return dict; + } + + public PyObject getDict() { + return dict; + } + + public PyTypeDerived(PyType subtype) { + super(subtype); + dict=subtype.instDict(); + } + + public PyString __str__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__str__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyString) + return(PyString)res; + throw Py.TypeError("__str__"+" should return a "+"string"); + } + return super.__str__(); + } + + public PyString __repr__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__repr__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyString) + return(PyString)res; + throw Py.TypeError("__repr__"+" should return a "+"string"); + } + return super.__repr__(); + } + + public PyString __hex__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__hex__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyString) + return(PyString)res; + throw Py.TypeError("__hex__"+" should return a "+"string"); + } + return super.__hex__(); + } + + public PyString __oct__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__oct__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyString) + return(PyString)res; + throw Py.TypeError("__oct__"+" should return a "+"string"); + } + return super.__oct__(); + } + + public PyObject __int__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__int__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyObject) + return(PyObject)res; + throw Py.TypeError("__int__"+" should return a "+"int"); + } + return super.__int__(); + } + + public PyFloat __float__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__float__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyFloat) + return(PyFloat)res; + throw Py.TypeError("__float__"+" should return a "+"float"); + } + return super.__float__(); + } + + public PyLong __long__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__long__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyLong) + return(PyLong)res; + throw Py.TypeError("__long__"+" should return a "+"long"); + } + return super.__long__(); + } + + public PyComplex __complex__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__complex__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyComplex) + return(PyComplex)res; + throw Py.TypeError("__complex__"+" should return a "+"complex"); + } + return super.__complex__(); + } + + public PyObject __pos__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__pos__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + return super.__pos__(); + } + + public PyObject __neg__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__neg__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + return super.__neg__(); + } + + public PyObject __abs__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__abs__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + return super.__abs__(); + } + + public PyObject __invert__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__invert__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + return super.__invert__(); + } + + public PyObject __reduce__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__reduce__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + return super.__reduce__(); + } + + public PyObject __add__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__add__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__add__(other); + } + + public PyObject __radd__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__radd__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__radd__(other); + } + + public PyObject __sub__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__sub__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__sub__(other); + } + + public PyObject __rsub__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rsub__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rsub__(other); + } + + public PyObject __mul__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__mul__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__mul__(other); + } + + public PyObject __rmul__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rmul__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rmul__(other); + } + + public PyObject __div__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__div__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__div__(other); + } + + public PyObject __rdiv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rdiv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rdiv__(other); + } + + public PyObject __floordiv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__floordiv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__floordiv__(other); + } + + public PyObject __rfloordiv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rfloordiv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rfloordiv__(other); + } + + public PyObject __truediv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__truediv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__truediv__(other); + } + + public PyObject __rtruediv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rtruediv__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rtruediv__(other); + } + + public PyObject __mod__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__mod__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__mod__(other); + } + + public PyObject __rmod__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rmod__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rmod__(other); + } + + public PyObject __divmod__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__divmod__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__divmod__(other); + } + + public PyObject __rdivmod__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rdivmod__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rdivmod__(other); + } + + public PyObject __pow__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__pow__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__pow__(other); + } + + public PyObject __rpow__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rpow__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rpow__(other); + } + + public PyObject __lshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__lshift__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__lshift__(other); + } + + public PyObject __rlshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rlshift__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rlshift__(other); + } + + public PyObject __rshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rshift__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rshift__(other); + } + + public PyObject __rrshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rrshift__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rrshift__(other); + } + + public PyObject __and__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__and__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__and__(other); + } + + public PyObject __rand__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rand__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rand__(other); + } + + public PyObject __or__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__or__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__or__(other); + } + + public PyObject __ror__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ror__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ror__(other); + } + + public PyObject __xor__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__xor__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__xor__(other); + } + + public PyObject __rxor__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__rxor__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__rxor__(other); + } + + public PyObject __lt__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__lt__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__lt__(other); + } + + public PyObject __le__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__le__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__le__(other); + } + + public PyObject __gt__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__gt__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__gt__(other); + } + + public PyObject __ge__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ge__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ge__(other); + } + + public PyObject __eq__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__eq__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__eq__(other); + } + + public PyObject __ne__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ne__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res==Py.NotImplemented) + return null; + return res; + } + return super.__ne__(other); + } + + public PyObject __iadd__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__iadd__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(other); + return super.__iadd__(other); + } + + public PyObject __isub__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__isub__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(other); + return super.__isub__(other); + } + + public PyObject __imul__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__imul__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(other); + return super.__imul__(other); + } + + public PyObject __idiv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__idiv__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(other); + return super.__idiv__(other); + } + + public PyObject __ifloordiv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ifloordiv__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(other); + return super.__ifloordiv__(other); + } + + public PyObject __itruediv__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__itruediv__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(other); + return super.__itruediv__(other); + } + + public PyObject __imod__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__imod__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(other); + return super.__imod__(other); + } + + public PyObject __ipow__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ipow__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(other); + return super.__ipow__(other); + } + + public PyObject __ilshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ilshift__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(other); + return super.__ilshift__(other); + } + + public PyObject __irshift__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__irshift__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(other); + return super.__irshift__(other); + } + + public PyObject __iand__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__iand__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(other); + return super.__iand__(other); + } + + public PyObject __ior__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ior__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(other); + return super.__ior__(other); + } + + public PyObject __ixor__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__ixor__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(other); + return super.__ixor__(other); + } + + public String toString() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__repr__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (!(res instanceof PyString)) + throw Py.TypeError("__repr__ should return a string"); + return((PyString)res).toString(); + } + return super.toString(); + } + + public int hashCode() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__hash__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyInteger) + return((PyInteger)res).getValue(); + throw Py.TypeError("__hash__ should return a int"); + } + if (self_type.lookup("__eq__")!=null||self_type.lookup("__cmp__")!=null) + throw Py.TypeError("unhashable type"); + return super.hashCode(); + } + + public PyUnicode __unicode__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__unicode__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyUnicode) + return(PyUnicode)res; + if (res instanceof PyString) + return new PyUnicode((PyString)res); + throw Py.TypeError("__unicode__"+" should return a "+"unicode"); + } + return super.__unicode__(); + } + + public int __cmp__(PyObject other) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__cmp__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(other); + if (res instanceof PyInteger) { + int v=((PyInteger)res).getValue(); + return v<0?-1:v>0?1:0; + } + throw Py.TypeError("__cmp__ should return a int"); + } + return super.__cmp__(other); + } + + public boolean __nonzero__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__nonzero__"); + if (impl==null) { + impl=self_type.lookup("__len__"); + if (impl==null) + return super.__nonzero__(); + } + return impl.__get__(this,self_type).__call__().__nonzero__(); + } + + public boolean __contains__(PyObject o) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__contains__"); + if (impl==null) + return super.__contains__(o); + return impl.__get__(this,self_type).__call__(o).__nonzero__(); + } + + public int __len__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__len__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyInteger) + return((PyInteger)res).getValue(); + throw Py.TypeError("__len__ should return a int"); + } + return super.__len__(); + } + + public PyObject __iter__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__iter__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(); + impl=self_type.lookup("__getitem__"); + if (impl==null) + return super.__iter__(); + return new PySequenceIter(this); + } + + public PyObject __iternext__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("next"); + if (impl!=null) { + try { + return impl.__get__(this,self_type).__call__(); + } catch (PyException exc) { + if (Py.matchException(exc,Py.StopIteration)) + return null; + throw exc; + } + } + return super.__iternext__(); // ??? + } + + public PyObject __finditem__(PyObject key) { // ??? + PyType self_type=getType(); + PyObject impl=self_type.lookup("__getitem__"); + if (impl!=null) + try { + return impl.__get__(this,self_type).__call__(key); + } catch (PyException exc) { + if (Py.matchException(exc,Py.LookupError)) + return null; + throw exc; + } + return super.__finditem__(key); + } + + public void __setitem__(PyObject key,PyObject value) { // ??? + PyType self_type=getType(); + PyObject impl=self_type.lookup("__setitem__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(key,value); + return; + } + super.__setitem__(key,value); + } + + public PyObject __getitem__(PyObject key) { // ??? + PyType self_type=getType(); + PyObject impl=self_type.lookup("__getitem__"); + if (impl!=null) { + try { + return impl.__get__(this,self_type).__call__(key); + } catch (PyException exc) { + if (Py.matchException(exc,Py.LookupError)) + return null; + throw exc; + } + } + return super.__getitem__(key); + } + + public PyObject __getslice__(PyObject start,PyObject stop,PyObject step) { // ??? + PyType self_type=getType(); + PyObject impl=self_type.lookup("__getslice__"); + if (impl!=null) + try { + return impl.__get__(this,self_type).__call__(start,stop); + } catch (PyException exc) { + if (Py.matchException(exc,Py.LookupError)) + return null; + throw exc; + } + return super.__getslice__(start,stop,step); + } + + public void __delitem__(PyObject key) { // ??? + PyType self_type=getType(); + PyObject impl=self_type.lookup("__delitem__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(key); + return; + } + super.__delitem__(key); + } + + public PyObject __call__(PyObject args[],String keywords[]) { + ThreadState ts=Py.getThreadState(); + if (ts.recursion_depth++>ts.systemState.getrecursionlimit()) + throw Py.RuntimeError("maximum __call__ recursion depth exceeded"); + try { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__call__"); + if (impl!=null) + return impl.__get__(this,self_type).__call__(args,keywords); + return super.__call__(args,keywords); + } finally { + --ts.recursion_depth; + } + } + + public PyObject __findattr__(String name) { + PyType self_type=getType(); + PyObject getattribute=self_type.lookup("__getattribute__"); + PyString py_name=null; + try { + if (getattribute!=null) { + return getattribute.__get__(this,self_type).__call__(py_name=new PyString(name)); + } else { + return super.__findattr__(name); + } + } catch (PyException e) { + if (Py.matchException(e,Py.AttributeError)) { + PyObject getattr=self_type.lookup("__getattr__"); + if (getattr!=null) + try { + return getattr.__get__(this,self_type).__call__(py_name!=null?py_name:new PyString(name)); + } catch (PyException e1) { + if (!Py.matchException(e1,Py.AttributeError)) + throw e1; + } + return null; + } + throw e; + } + } + + public void __setattr__(String name,PyObject value) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__setattr__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(new PyString(name),value); + return; + } + super.__setattr__(name,value); + } + + public void __delattr__(String name) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__delattr__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(new PyString(name)); + return; + } + super.__delattr__(name); + } + + public PyObject __get__(PyObject obj,PyObject type) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__get__"); + if (impl!=null) { + if (obj==null) + obj=Py.None; + if (type==null) + type=Py.None; + return impl.__get__(this,self_type).__call__(obj,type); + } + return super.__get__(obj,type); + } + + public void __set__(PyObject obj,PyObject value) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__set__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(obj,value); + return; + } + super.__set__(obj,value); + } + + public void __delete__(PyObject obj) { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__delete__"); + if (impl!=null) { + impl.__get__(this,self_type).__call__(obj); + return; + } + super.__delete__(obj); + } + + public void dispatch__init__(PyType type,PyObject[]args,String[]keywords) { + PyType self_type=getType(); + if (self_type.isSubType(type)) { + PyObject impl=self_type.lookup("__init__"); + if (impl!=null) + impl.__get__(this,self_type).__call__(args,keywords); + } + } + +} Modified: trunk/jython/src/org/python/core/PyUnicode.java =================================================================== --- trunk/jython/src/org/python/core/PyUnicode.java 2006-06-09 18:27:27 UTC (rev 2812) +++ trunk/jython/src/org/python/core/PyUnicode.java 2006-06-09 19:17:47 UTC (rev 2813) @@ -165,6 +165,71 @@ } dict.__setitem__("__add__",new PyMethodDescr("__add__",PyUnicode.class,1,1,new exposed___add__(null,null))); + class exposed___getslice__ extends PyBuiltinFunctionNarrow { + + private PyUnicode self; + + public PyObject getSelf() { + return self; + } + + exposed___getslice__(PyUnicode self,PyBuiltinFunction.Info info) { + super(info); + this.self=self; + } + + public PyBuiltinFunction makeBound(PyObject self) { + return new exposed___getslice__((PyUnicode)self,info); + } + + public PyObject __call__(PyObject arg0,PyObject arg1,PyObject arg2) { + return self.unicode___getslice__(arg0,arg1,arg2); + } + + public PyObject inst_call(PyObject gself,PyObject arg0,PyObject arg1,PyObject arg2) { + PyUnicode self=(PyUnicode)gself; + return self.unicode___getslice__(arg0,arg1,arg2); + } + + public PyObject __call__(PyObject arg0,PyObject arg1) { + return self.unicode___getslice__(arg0,arg1); + } + + public PyObject inst_call(PyObject gself,PyObject arg0,PyObject arg1) { + PyUnicode self=(PyUnicode)gself; + return self.unicode___getslice__(arg0,arg1); + } + + } + dict.__setitem__("__getslice__",new PyMethodDescr("__getslice__",PyUnicode.class,2,3,new exposed___getslice__(null,null))); + class exposed___iter__ extends PyBuiltinFunctionNarrow { + + private PyUnicode self; + + public PyObject getSelf() { + return self; + } + + exposed___iter__(PyUnicode self,PyBuiltinFunction.Info info) { + super(info); + this.self=self; + } + + public PyBuiltinFunction makeBound(PyObject self) { + return new exposed___iter__((PyUnicode)self,info); + } + + public PyObject __call__() { + return self.unicode___iter__(); + } + + public PyObject inst_call(PyObject gself) { + PyUnicode self=(PyUnicode)gself; + return self.unicode___iter__(); + } + + } + dict.__setitem__("__iter__",new PyMethodDescr("__iter__",PyUnicode.class,0,0,new exposed___iter__(null,null))); class exposed___mul__ extends PyBuiltinFunctionNarrow { private PyUnicode self; @@ -221,6 +286,62 @@ } dict.__setitem__("__rmul__",new PyMethodDescr("__rmul__",PyUnicode.class,1,1,new exposed___rmul__(null,null))); + class exposed___str__ extends PyBuiltinFunctionNarrow { + + private PyUnicode self; + + public PyObject getSelf() { + return self; + } + + exposed___str__(PyUnicode self,PyBuiltinFunction.Info info) { + super(info); + this.self=self; + } + + public PyBuiltinFunction makeBound(PyObject self) { + return new exposed___str__((PyUnicode)self,info); + } + + public PyObject __call__() { + return self.unicode___str__(); + } + + public PyObject inst_call(PyObject gself) { + PyUnicode self=(PyUnicode)gself; + return self.unicode___str__(); + } + + } + dict.__setitem__("__str__",new PyMethodDescr("__str__",PyUnicode.class,0,0,new exposed___str__(null,null))); + class exposed___unicode__ extends PyBuiltinFunctionNarrow { + + private PyUnicode self; + + public PyObject getSelf() { + return self; + } + + exposed___unicode__(PyUnicode self,PyBuiltinFunction.Info info) { + super(info); + this.self=self; + } + + public PyBuiltinFunction makeBound(PyObject self) { + return new exposed___unicode__((PyUnicode)self,info); + } + + public PyObject __call__() { + return self.unicode___unicode__(); + } + + public PyObject inst_call(PyObject gself) { + PyUnicode self=(PyUnicode)gself; + return self.unicode___unicode__(); + } + + } + dict.__setitem__("__unicode__",new PyMethodDescr("__unicode__",PyUnicode.class,0,0,new exposed___unicode__(null,null))); class exposed___hash__ extends PyBuiltinFunctionNarrow { private PyUnicode self; @@ -267,12 +388,12 @@ } public PyObject __call__() { - return new PyUnicode(self.unicode_toString()); + return new PyString(self.unicode_toString()); } public PyObject inst_call(PyObject gself) { PyUnicode self=(PyUnicode)gself; - return new PyUnicode(self.unicode_toString()); + return new PyString(self.unicode_toString()); } } @@ -2688,12 +2809,12 @@ return "'unicode' object"; } - public PyUnicode __unicode__() { - return this; + final PyUnicode unicode___unicode__() { + return str___unicode__(); } - public PyString __str__() { - return this; + public PyString unicode___str__() { + return str___str__(); } final int unicode___len__() { @@ -3006,4 +3127,21 @@ final String unicode_decode(String encoding, String errors) { return str_decode(encoding, errors); } + + final PyObject unicode___getslice__(PyObject s_start, PyObject s_stop) { + return str___getslice__(s_start,s_stop,null); + } + + final PyObject unicode___getslice__(PyObject s_start, PyObject s_stop, PyObject s_step) { + return str___getslice__(s_start,s_stop,s_step); + } + + final PyObject unicode___iter__() { + return str___iter__(); + } + + final PyObject unicode___getitem__(PyObject index) { + return str___getitem__(index); + } + } Added: trunk/sandbox/jt/type.derived =================================================================== --- trunk/sandbox/jt/type.derived (rev 0) +++ trunk/sandbox/jt/type.derived 2006-06-09 19:17:47 UTC (rev 2813) @@ -0,0 +1,4 @@ +base_class: PyType +want_dict: true +ctr: +incl: object This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: Samuele P. <ped...@st...> - 2006-06-12 20:00:12
|
> Added: trunk/sandbox/jt/type.derived > =================================================================== > --- trunk/sandbox/jt/type.derived (rev 0) > +++ trunk/sandbox/jt/type.derived 2006-06-09 19:17:47 UTC (rev 2813) > @@ -0,0 +1,4 @@ > +base_class: PyType > +want_dict: true > +ctr: > +incl: object if I remember correctly want_dict is only needed if the orignal type doesn't have a __dict__, but type has one. |
From: <fwi...@us...> - 2006-06-12 01:47:45
|
Revision: 2815 Author: fwierzbicki Date: 2006-06-11 18:47:39 -0700 (Sun, 11 Jun 2006) ViewCVS: http://svn.sourceforge.net/jython/?rev=2815&view=rev Log Message: ----------- >From patch 1501807. Thanks to Jeff Norton. Added Paths: ----------- trunk/sandbox/jt/README.txt trunk/sandbox/jt/bool.derived trunk/sandbox/jt/bool.expose Added: trunk/sandbox/jt/README.txt =================================================================== --- trunk/sandbox/jt/README.txt (rev 0) +++ trunk/sandbox/jt/README.txt 2006-06-12 01:47:39 UTC (rev 2815) @@ -0,0 +1,15 @@ +Some classes have generated code to enable their usage within Jython. Each +such file will have a generated section that is created with the gexpose.py +script. For the PyIntger class it is created thus: + + python gexpose.py int.expose ../../jython/src/org/python/core/PyInteger.java + +For each class their is an xxx.expose file describing what should be exposed. + +In addition their is an xxxDerived.java class that is completely generated +with the script gderived.py. For the PyInteger class it is created thus: + + python gderived.py int.derived >../../jython/src/org/python/core/PyIntegerDerived.java + +Note: The above exmples assume that the whole jython trunk is checked out so +that the trunk/sandbox directory is a sibling of the trunk/jython directory. Added: trunk/sandbox/jt/bool.derived =================================================================== --- trunk/sandbox/jt/bool.derived (rev 0) +++ trunk/sandbox/jt/bool.derived 2006-06-12 01:47:39 UTC (rev 2815) @@ -0,0 +1,4 @@ +base_class: PyBoolean +want_dict: true +ctr: +incl: object Added: trunk/sandbox/jt/bool.expose =================================================================== --- trunk/sandbox/jt/bool.expose (rev 0) +++ trunk/sandbox/jt/bool.expose 2006-06-12 01:47:39 UTC (rev 2815) @@ -0,0 +1,14 @@ +# setup +type_name: bool +type_class: PyBoolean +# exposed methods +expose_unary: __abs__ __neg__ __pos__ +expose_binary: __and__ __or__ __xor__ +expose_new_immutable: +expose_meth: :b __nonzero__ +expose_meth: __repr__ + return new PyString(self.bool_toString()); +expose_meth: __str__ + return new PyString(self.bool_toString()); +expose_meth: __hash__ + return Py.newInteger(self.bool_hashCode()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ped...@us...> - 2006-10-16 00:44:03
|
Revision: 2957 http://svn.sourceforge.net/jython/?rev=2957&view=rev Author: pedronis Date: 2006-10-15 17:43:44 -0700 (Sun, 15 Oct 2006) Log Message: ----------- - avoid needing to manually fix up the product of the templates, fixed a bunch of ctr: directives implemented a more precise check in __int__ (could be that such a strict check was implemented only in later versions of cpython) - add a basestring.expose - make str/unicode/tuple.expose more similar to list.expose. This avoids infinite recursions when subclassing and overriding __getitem__ as shown by test_descr slices. It should not be necessary btw for Py*Derived classes to override __getitem__. tweaking PyDictonary and commenting out a test we get to the end of test_descr now, without stack overflow explosions. Needs to be ported to the 2.3 branch, also there we should avoid to manually tweak the template product. We will need to change the derived templates to implement slots so just running gderived should do the job otherwise is very unpleasant. Modified Paths: -------------- trunk/sandbox/jt/float.derived trunk/sandbox/jt/list.expose trunk/sandbox/jt/long.derived trunk/sandbox/jt/object.derived trunk/sandbox/jt/str.expose trunk/sandbox/jt/tuple.expose trunk/sandbox/jt/unicode.derived trunk/sandbox/jt/unicode.expose Added Paths: ----------- trunk/sandbox/jt/basestring.expose Added: trunk/sandbox/jt/basestring.expose =================================================================== --- trunk/sandbox/jt/basestring.expose (rev 0) +++ trunk/sandbox/jt/basestring.expose 2006-10-16 00:43:44 UTC (rev 2957) @@ -0,0 +1,5 @@ +# setup +type_name: basestring +type_class: PyBaseString +type_base_class: PyObject + Modified: trunk/sandbox/jt/float.derived =================================================================== --- trunk/sandbox/jt/float.derived 2006-10-15 19:11:21 UTC (rev 2956) +++ trunk/sandbox/jt/float.derived 2006-10-16 00:43:44 UTC (rev 2957) @@ -1,4 +1,4 @@ base_class: PyFloat want_dict: true -ctr: +ctr: double v incl: object Modified: trunk/sandbox/jt/list.expose =================================================================== --- trunk/sandbox/jt/list.expose 2006-10-15 19:11:21 UTC (rev 2956) +++ trunk/sandbox/jt/list.expose 2006-10-16 00:43:44 UTC (rev 2957) @@ -3,6 +3,7 @@ type_class: PyList type_base_class: PyObject incl: sequence +#expose_meth: seq_> __iter__ # exposed methods expose_meth: :- append o expose_meth: :i count o Modified: trunk/sandbox/jt/long.derived =================================================================== --- trunk/sandbox/jt/long.derived 2006-10-15 19:11:21 UTC (rev 2956) +++ trunk/sandbox/jt/long.derived 2006-10-16 00:43:44 UTC (rev 2957) @@ -1,4 +1,4 @@ base_class: PyLong want_dict: true -ctr: +ctr: java.math.BigInteger v incl: object Modified: trunk/sandbox/jt/object.derived =================================================================== --- trunk/sandbox/jt/object.derived 2006-10-15 19:11:21 UTC (rev 2956) +++ trunk/sandbox/jt/object.derived 2006-10-16 00:43:44 UTC (rev 2957) @@ -5,7 +5,6 @@ unary1: __repr__ string unary1: __hex__ string unary1: __oct__ string -unary1: __int__ int PyObject unary1: __float__ float unary1: __long__ long unary1: __complex__ complex @@ -43,6 +42,18 @@ __ior__ \ __ixor__ rest: + public PyObject __int__() { + PyType self_type=getType(); + PyObject impl=self_type.lookup("__int__"); + if (impl!=null) { + PyObject res=impl.__get__(this,self_type).__call__(); + if (res instanceof PyInteger || res instanceof PyLong) + return(PyObject)res; + throw Py.TypeError("__int__"+" should return an integer"); + } + return super.__int__(); + } + public String toString() { PyType self_type = getType(); PyObject impl = self_type.lookup("__repr__"); @@ -179,21 +190,6 @@ super.__setitem__(key,value); } - public PyObject __getitem__(PyObject key) { // ??? - PyType self_type=getType(); - PyObject impl=self_type.lookup("__getitem__"); - if (impl!=null) { - try { - return impl.__get__(this,self_type).__call__(key); - } catch (PyException exc) { - if (Py.matchException(exc,Py.LookupError)) - return null; - throw exc; - } - } - return super.__getitem__(key); - } - public PyObject __getslice__(PyObject start, PyObject stop, PyObject step) { // ??? PyType self_type=getType(); PyObject impl=self_type.lookup("__getslice__"); Modified: trunk/sandbox/jt/str.expose =================================================================== --- trunk/sandbox/jt/str.expose 2006-10-15 19:11:21 UTC (rev 2956) +++ trunk/sandbox/jt/str.expose 2006-10-16 00:43:44 UTC (rev 2957) @@ -2,13 +2,13 @@ type_name: str type_class: PyString # exposed methods +expose_index_getitem: seq_> +expose_meth: seq_> __getslice__ ooo? +# expose_binary: __ne__ __eq__ expose_meth: :b __contains__ o expose_meth: :i __len__ expose_meth: __add__ o -expose_meth: __getitem__ o -expose_meth: __getslice__ ooo? -expose_meth: __iter__ expose_meth: __mul__ o expose_meth: __reduce__ expose_meth: __rmul__ o @@ -63,6 +63,4 @@ expose_meth: :s upper expose_meth: :s zfill i expose_new_immutable: -#TODO -#expose_index_getitem: #expose_meth: :b __nonzero__ Modified: trunk/sandbox/jt/tuple.expose =================================================================== --- trunk/sandbox/jt/tuple.expose 2006-10-15 19:11:21 UTC (rev 2956) +++ trunk/sandbox/jt/tuple.expose 2006-10-16 00:43:44 UTC (rev 2957) @@ -3,6 +3,10 @@ type_class: PyTuple type_base_class: PyObject # exposed methods +expose_index_getitem: seq_> +expose_meth: seq_> __getslice__ ooo? +#expose_meth: seq_> __iter__ +# expose_binary: __ne__ __eq__ expose_meth: :b __contains__ o expose_meth: :i __len__ @@ -10,12 +14,9 @@ expose_meth: __reduce__ expose_meth: __mul__ o expose_meth: __rmul__ o -expose_meth: __getitem__ o -expose_meth: __getslice__ ooo? expose_meth: __hash__ `ideleg`(hashCode); expose_meth: __repr__ `sdeleg`(toString); expose_new_immutable: -#expose_index_getitem: #expose_meth: :b __nonzero__ Modified: trunk/sandbox/jt/unicode.derived =================================================================== --- trunk/sandbox/jt/unicode.derived 2006-10-15 19:11:21 UTC (rev 2956) +++ trunk/sandbox/jt/unicode.derived 2006-10-16 00:43:44 UTC (rev 2957) @@ -1,4 +1,4 @@ base_class: PyUnicode want_dict: true -ctr: +ctr: String string incl: object Modified: trunk/sandbox/jt/unicode.expose =================================================================== --- trunk/sandbox/jt/unicode.expose 2006-10-15 19:11:21 UTC (rev 2956) +++ trunk/sandbox/jt/unicode.expose 2006-10-16 00:43:44 UTC (rev 2957) @@ -2,12 +2,13 @@ type_name: unicode type_class: PyUnicode # exposed methods +expose_index_getitem: seq_> +expose_meth: seq_> __getslice__ ooo? +# expose_binary: __ne__ __eq__ expose_meth: :b __contains__ o expose_meth: :i __len__ expose_meth: __add__ o -expose_meth: __getslice__ ooo? -expose_meth: __iter__ expose_meth: __mul__ o expose_meth: __rmul__ o expose_meth: __str__ @@ -50,11 +51,10 @@ expose_meth: :u strip S? expose_meth: :u swapcase expose_meth: :u title -expose_meth: :u translate s s? +#expose_meth: :u translate s s? expose_meth: :u upper expose_meth: :u zfill i expose_new_immutable: #TODO -#expose_index_getitem: #expose_meth: :b __nonzero__ #expose_meth: __reduce__ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |