From: <fwi...@us...> - 2006-05-18 20:58:29
|
Revision: 2734 Author: fwierzbicki Date: 2006-05-18 13:58:24 -0700 (Thu, 18 May 2006) ViewCVS: http://svn.sourceforge.net/jython/?rev=2734&view=rev Log Message: ----------- Backed off of newer undeprecated getBytes() method. It breaks compression using zlib.py. Modified Paths: -------------- trunk/jython/src/org/python/core/PyString.java Modified: trunk/jython/src/org/python/core/PyString.java =================================================================== --- trunk/jython/src/org/python/core/PyString.java 2006-05-18 06:17:03 UTC (rev 2733) +++ trunk/jython/src/org/python/core/PyString.java 2006-05-18 20:58:24 UTC (rev 2734) @@ -6,8 +6,7 @@ */ public class PyString extends PyBaseString implements ClassDictInit { - //~ BEGIN GENERATED - + //~ BEGIN GENERATED REGION -- DO NOT EDIT SEE gexpose.py /* type info */ public static final String exposed_name="str"; @@ -2628,7 +2627,7 @@ } }); } - //~ END GENERATED + //~ END GENERATED REGION -- DO NOT EDIT SEE gexpose.py private static final PyType STRTYPE = PyType.fromClass(PyString.class); @@ -3039,7 +3038,12 @@ } private byte[] getBytes() { - return string.getBytes(); + byte[] buf = new byte[string.length()]; + string.getBytes(0, string.length(), buf, 0); + return buf; + //XXX: would rather not use above getBytes since it is deprecated, + // but that breaks zlib.py -- need to figure out why and fix. + //return string.getBytes(); } public Object __tojava__(Class c) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2006-06-09 15:14:57
|
Revision: 2809 Author: fwierzbicki Date: 2006-06-09 08:14:53 -0700 (Fri, 09 Jun 2006) ViewCVS: http://svn.sourceforge.net/jython/?rev=2809&view=rev Log Message: ----------- Re-commiting the PyString that works better with test_descr. PyUnicode is still a problem. Modified Paths: -------------- trunk/jython/src/org/python/core/PyString.java Modified: trunk/jython/src/org/python/core/PyString.java =================================================================== --- trunk/jython/src/org/python/core/PyString.java 2006-06-09 13:22:16 UTC (rev 2808) +++ trunk/jython/src/org/python/core/PyString.java 2006-06-09 15:14:53 UTC (rev 2809) @@ -164,6 +164,71 @@ } dict.__setitem__("__add__",new PyMethodDescr("__add__",PyString.class,1,1,new exposed___add__(null,null))); + class exposed___getslice__ extends PyBuiltinFunctionNarrow { + + private PyString self; + + public PyObject getSelf() { + return self; + } + + exposed___getslice__(PyString self,PyBuiltinFunction.Info info) { + super(info); + this.self=self; + } + + public PyBuiltinFunction makeBound(PyObject self) { + return new exposed___getslice__((PyString)self,info); + } + + public PyObject __call__(PyObject arg0,PyObject arg1,PyObject arg2) { + return self.str___getslice__(arg0,arg1,arg2); + } + + public PyObject inst_call(PyObject gself,PyObject arg0,PyObject arg1,PyObject arg2) { + PyString self=(PyString)gself; + return self.str___getslice__(arg0,arg1,arg2); + } + + public PyObject __call__(PyObject arg0,PyObject arg1) { + return self.str___getslice__(arg0,arg1); + } + + public PyObject inst_call(PyObject gself,PyObject arg0,PyObject arg1) { + PyString self=(PyString)gself; + return self.str___getslice__(arg0,arg1); + } + + } + dict.__setitem__("__getslice__",new PyMethodDescr("__getslice__",PyString.class,2,3,new exposed___getslice__(null,null))); + class exposed___iter__ extends PyBuiltinFunctionNarrow { + + private PyString self; + + public PyObject getSelf() { + return self; + } + + exposed___iter__(PyString self,PyBuiltinFunction.Info info) { + super(info); + this.self=self; + } + + public PyBuiltinFunction makeBound(PyObject self) { + return new exposed___iter__((PyString)self,info); + } + + public PyObject __call__() { + return self.str___iter__(); + } + + public PyObject inst_call(PyObject gself) { + PyString self=(PyString)gself; + return self.str___iter__(); + } + + } + dict.__setitem__("__iter__",new PyMethodDescr("__iter__",PyString.class,0,0,new exposed___iter__(null,null))); class exposed___mul__ extends PyBuiltinFunctionNarrow { private PyString self; @@ -248,6 +313,62 @@ } dict.__setitem__("__rmul__",new PyMethodDescr("__rmul__",PyString.class,1,1,new exposed___rmul__(null,null))); + class exposed___str__ extends PyBuiltinFunctionNarrow { + + private PyString self; + + public PyObject getSelf() { + return self; + } + + exposed___str__(PyString self,PyBuiltinFunction.Info info) { + super(info); + this.self=self; + } + + public PyBuiltinFunction makeBound(PyObject self) { + return new exposed___str__((PyString)self,info); + } + + public PyObject __call__() { + return self.str___str__(); + } + + public PyObject inst_call(PyObject gself) { + PyString self=(PyString)gself; + return self.str___str__(); + } + + } + dict.__setitem__("__str__",new PyMethodDescr("__str__",PyString.class,0,0,new exposed___str__(null,null))); + class exposed___unicode__ extends PyBuiltinFunctionNarrow { + + private PyString self; + + public PyObject getSelf() { + return self; + } + + exposed___unicode__(PyString self,PyBuiltinFunction.Info info) { + super(info); + this.self=self; + } + + public PyBuiltinFunction makeBound(PyObject self) { + return new exposed___unicode__((PyString)self,info); + } + + public PyObject __call__() { + return self.str___unicode__(); + } + + public PyObject inst_call(PyObject gself) { + PyString self=(PyString)gself; + return self.str___unicode__(); + } + + } + dict.__setitem__("__unicode__",new PyMethodDescr("__unicode__",PyString.class,0,0,new exposed___unicode__(null,null))); class exposed___hash__ extends PyBuiltinFunctionNarrow { private PyString self; @@ -2694,13 +2815,7 @@ ArgParser ap = new ArgParser("str", args, keywords, new String[] { "S" }, 0); PyObject S = ap.getPyObject(0, null); if (new_.for_type == subtype) { - if (S == null) { - return new PyString(""); - } - if (S instanceof PyString) { - return S; - } - return S.__str__(); + return returnString(S); } else { if (S == null) { return new PyStringDerived(subtype, ""); @@ -2709,6 +2824,18 @@ } } + private static PyString returnString(PyObject S) { + if (S == null) { + return new PyString(""); + } + if (S instanceof PyStringDerived) { + return new PyString(S.toString()); + } if (S instanceof PyString) { + return (PyString)S; + } + return S.__str__(); + } + /** <i>Internal use only. Do not call this method explicit.</i> */ public static void classDictInit(PyObject dict) throws PyIgnoreMethodTag {} @@ -2717,9 +2844,21 @@ } public PyString __str__() { - return this; + return returnString(this); } + final PyString str___str__() { + return new PyString(this.toString()); + } + + public PyUnicode __unicode__() { + return str___unicode__(); + } + + final PyUnicode str___unicode__() { + return new PyUnicode(this.toString()); + } + public int __len__() { return str___len__(); } @@ -3173,6 +3312,30 @@ else return null; } + public PyObject __getslice__(PyObject s_start, PyObject s_stop) { + return str___getslice__(s_start,s_stop,null); + } + + public PyObject __getslice__(PyObject s_start, PyObject s_stop, PyObject s_step) { + return str___getslice__(s_start,s_stop,s_step); + } + + final PyObject str___getslice__(PyObject s_start, PyObject s_stop) { + return seq___getslice__(s_start,s_stop,null); + } + + final PyObject str___getslice__(PyObject s_start, PyObject s_stop, PyObject s_step) { + return seq___getslice__(s_start,s_stop,s_step); + } + + public PyObject __iter__() { + return str___iter__(); + } + + final PyObject str___iter__() { + return seq___iter__(); + } + /** * Used for pickling. * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cg...@us...> - 2006-08-15 04:03:50
|
Revision: 2890 Author: cgroves Date: 2006-08-14 21:03:46 -0700 (Mon, 14 Aug 2006) ViewCVS: http://svn.sourceforge.net/jython/?rev=2890&view=rev Log Message: ----------- Allow arbitrary precision for formatted strings, but only 250 chars for decimal, integer and long. From patch #1512745. Modified Paths: -------------- trunk/jython/src/org/python/core/PyString.java Modified: trunk/jython/src/org/python/core/PyString.java =================================================================== --- trunk/jython/src/org/python/core/PyString.java 2006-08-15 03:45:52 UTC (rev 2889) +++ trunk/jython/src/org/python/core/PyString.java 2006-08-15 04:03:46 UTC (rev 2890) @@ -4870,7 +4870,16 @@ } } + private void checkPrecision(String type) { + if(precision > 250) { + // A magic number. Larger than in CPython. + throw Py.OverflowError("formatted " + type + " is too long (precision too long?)"); + } + + } + public String formatLong(PyString arg, char type, boolean altFlag) { + checkPrecision("long"); String s = arg.toString(); int end = s.length(); int ptr = 0; @@ -4928,6 +4937,7 @@ } public String formatInteger(long v, int radix, boolean unsigned) { + checkPrecision("integer"); if (unsigned) { if (v < 0) v = 0x100000000l + v; @@ -4949,6 +4959,7 @@ } public String formatFloatDecimal(double v, boolean truncate) { + checkPrecision("decimal"); java.text.NumberFormat format = java.text.NumberFormat.getInstance( java.util.Locale.US); int prec = precision; @@ -5087,11 +5098,6 @@ precision = getNumber(); if (precision < -1) precision = 0; - if (precision > 250) { - // A magic number. Larger than in CPython. - throw Py.OverflowError( - "formatted float is too long (precision too long?)"); - } c = pop(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2006-11-27 02:08:29
|
Revision: 2994 http://svn.sourceforge.net/jython/?rev=2994&view=rev Author: fwierzbicki Date: 2006-11-26 18:08:28 -0800 (Sun, 26 Nov 2006) Log Message: ----------- String now takes an "object" keyword instead of "S". Modified Paths: -------------- trunk/jython/src/org/python/core/PyString.java Modified: trunk/jython/src/org/python/core/PyString.java =================================================================== --- trunk/jython/src/org/python/core/PyString.java 2006-11-27 01:51:43 UTC (rev 2993) +++ trunk/jython/src/org/python/core/PyString.java 2006-11-27 02:08:28 UTC (rev 2994) @@ -2820,7 +2820,7 @@ final static PyObject str_new(PyNewWrapper new_, boolean init, PyType subtype, PyObject[] args, String[] keywords) { - ArgParser ap = new ArgParser("str", args, keywords, new String[] { "S" }, 0); + ArgParser ap = new ArgParser("str", args, keywords, new String[] { "object" }, 0); PyObject S = ap.getPyObject(0, null); if (new_.for_type == subtype) { return returnString(S); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cg...@us...> - 2007-04-18 04:31:32
|
Revision: 3163 http://svn.sourceforge.net/jython/?rev=3163&view=rev Author: cgroves Date: 2007-04-17 21:31:31 -0700 (Tue, 17 Apr 2007) Log Message: ----------- fix problems in unicode escape decoding exposed by upgraded test_unicode Modified Paths: -------------- trunk/jython/src/org/python/core/PyString.java Modified: trunk/jython/src/org/python/core/PyString.java =================================================================== --- trunk/jython/src/org/python/core/PyString.java 2007-04-17 20:33:56 UTC (rev 3162) +++ trunk/jython/src/org/python/core/PyString.java 2007-04-18 04:31:31 UTC (rev 3163) @@ -1736,6 +1736,10 @@ /* \ - Escapes */ s++; + if (s == end) { + codecs.decoding_error("unicode escape", v, errors, "\\ at end of string"); + break; + } ch = str.charAt(s++); switch (ch) { @@ -1847,41 +1851,36 @@ if (value < 0) { codecs.decoding_error("unicode escape", v, errors, "Invalid Unicode Character Name"); - v.append('\\'); - v.append(str.charAt(s-1)); - break; - } - - if (value < 1<<16) { - /* In UCS-2 range, easy solution.. */ - v.append((char) value); } else { - /* Oops, its in UCS-4 space, */ - /* compute and append the two surrogates: */ - /* translate from 10000..10FFFF to 0..FFFFF */ - value -= 0x10000; - /* high surrogate = top 10 bits added to D800 */ - v.append((char) (0xD800 + (value >> 10))); + if (value < 1 << 16) { + /* In UCS-2 range, easy solution.. */ + v.append((char) value); + } else { + /* Oops, its in UCS-4 space, */ + /* compute and append the two surrogates: */ + /* translate from 10000..10FFFF to 0..FFFFF */ + value -= 0x10000; - /* low surrogate = bottom 10 bits added to DC00*/ - v.append((char) (0xDC00 + (value & ~0xFC00))); - } + /* high surrogate = top 10 bits added to D800 */ + v.append((char) (0xD800 + (value >> 10))); + + /* low surrogate = bottom 10 bits added to DC00 */ + v.append((char) (0xDC00 + (value & ~0xFC00))); + } + } s = endBrace + 1; + break; } else { codecs.decoding_error("unicode escape", v, errors, "Unicode name missing closing brace"); - v.append('\\'); - v.append(str.charAt(s-1)); - break; } - break; - } - codecs.decoding_error("unicode escape", v, errors, - "Missing opening brace for Unicode " + - "Character Name escape"); + } else { + codecs.decoding_error("unicode escape", v, errors, "Missing opening brace for Unicode " + + "Character Name escape"); + } + break; - /* fall through on purpose */ default: v.append('\\'); v.append(str.charAt(s-1)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cg...@us...> - 2007-05-14 05:06:59
|
Revision: 3224 http://svn.sourceforge.net/jython/?rev=3224&view=rev Author: cgroves Date: 2007-05-13 22:06:57 -0700 (Sun, 13 May 2007) Log Message: ----------- applied patch #1708080 from laukpe. Don't allow java-like format specifiers in float strings Modified Paths: -------------- trunk/jython/src/org/python/core/PyString.java Modified: trunk/jython/src/org/python/core/PyString.java =================================================================== --- trunk/jython/src/org/python/core/PyString.java 2007-05-11 05:49:00 UTC (rev 3223) +++ trunk/jython/src/org/python/core/PyString.java 2007-05-14 05:06:57 UTC (rev 3224) @@ -2795,6 +2795,11 @@ if (s != null) sval = s.toString(); try { + // Double.valueOf allows format specifier ("d" or "f") at the end + String lowSval = sval.toLowerCase(); + if (lowSval.endsWith("d") || lowSval.endsWith("f")) { + throw new NumberFormatException("format specifiers not allowed"); + } return Double.valueOf(sval).doubleValue(); } catch (NumberFormatException exc) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cg...@us...> - 2007-08-13 00:17:42
|
Revision: 3413 http://jython.svn.sourceforge.net/jython/?rev=3413&view=rev Author: cgroves Date: 2007-08-12 17:17:38 -0700 (Sun, 12 Aug 2007) Log Message: ----------- I screwed up count when I unified index lookups last week. The number of empty strings in a sequence is one greater than the length of the sequence and a found string shouldn't count if it goes over the edge of the sequence Modified Paths: -------------- trunk/jython/src/org/python/core/PyString.java Modified: trunk/jython/src/org/python/core/PyString.java =================================================================== --- trunk/jython/src/org/python/core/PyString.java 2007-08-12 22:01:25 UTC (rev 3412) +++ trunk/jython/src/org/python/core/PyString.java 2007-08-13 00:17:38 UTC (rev 3413) @@ -2746,15 +2746,16 @@ int[] indices = translateIndices(start, end); int n = sub.length(); if(n == 0) { - return indices[1] - indices[0]; + return indices[1] - indices[0] + 1; } int count = 0; - for(; indices[0] < indices[1]; count++) { + while(true){ int index = string.indexOf(sub, indices[0]); - if(index >= indices[1] || index == -1) { + indices[0] = index + n; + if(indices[0] > indices[1] || index == -1) { break; } - indices[0] = index + n; + count++; } return count; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cg...@us...> - 2007-11-12 03:28:08
|
Revision: 3668 http://jython.svn.sourceforge.net/jython/?rev=3668&view=rev Author: cgroves Date: 2007-11-11 19:28:06 -0800 (Sun, 11 Nov 2007) Log Message: ----------- Use String.getBytes with an encoding instead of a byte array since the latter isn't supported on CVM Modified Paths: -------------- trunk/jython/src/org/python/core/PyString.java Modified: trunk/jython/src/org/python/core/PyString.java =================================================================== --- trunk/jython/src/org/python/core/PyString.java 2007-11-11 23:42:10 UTC (rev 3667) +++ trunk/jython/src/org/python/core/PyString.java 2007-11-12 03:28:06 UTC (rev 3668) @@ -1,6 +1,8 @@ /// Copyright (c) Corporation for National Research Initiatives package org.python.core; +import java.io.UnsupportedEncodingException; + /** * A builtin python string. */ @@ -2113,10 +2115,12 @@ * the low-order bits of its corresponding char. */ public static byte[] to_bytes(String s) { - int len = s.length(); - byte[] b = new byte[len]; - s.getBytes(0, len, b, 0); - return b; + try { + return s.getBytes("ISO-8859-1"); + } catch(UnsupportedEncodingException e) { + // This JVM is whacked, it doesn't even have iso-8859-1 + throw Py.SystemError("Java couldn't find the ISO-8859-1 encoding"); + } } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pj...@us...> - 2008-04-06 17:07:23
|
Revision: 4308 http://jython.svn.sourceforge.net/jython/?rev=4308&view=rev Author: pjenvey Date: 2008-04-06 10:07:20 -0700 (Sun, 06 Apr 2008) Log Message: ----------- translate a failed int conversion to a TypeError Modified Paths: -------------- trunk/jython/src/org/python/core/PyString.java Modified: trunk/jython/src/org/python/core/PyString.java =================================================================== --- trunk/jython/src/org/python/core/PyString.java 2008-04-06 04:27:07 UTC (rev 4307) +++ trunk/jython/src/org/python/core/PyString.java 2008-04-06 17:07:20 UTC (rev 4308) @@ -2196,7 +2196,13 @@ } private String formatInteger(PyObject arg, int radix, boolean unsigned) { - return formatInteger(((PyInteger)arg.__int__()).getValue(), radix, unsigned); + PyInteger x; + try { + x = (PyInteger)arg.__int__(); + } catch (PyException pye) { + throw Py.TypeError("int argument required"); + } + return formatInteger(x.getValue(), radix, unsigned); } private String formatInteger(long v, int radix, boolean unsigned) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fwi...@us...> - 2008-06-16 13:20:50
|
Revision: 4650 http://jython.svn.sourceforge.net/jython/?rev=4650&view=rev Author: fwierzbicki Date: 2008-06-16 06:20:35 -0700 (Mon, 16 Jun 2008) Log Message: ----------- Oops some experimental code leaked into my last commit. Reverting. Modified Paths: -------------- trunk/jython/src/org/python/core/PyString.java Modified: trunk/jython/src/org/python/core/PyString.java =================================================================== --- trunk/jython/src/org/python/core/PyString.java 2008-06-16 13:17:01 UTC (rev 4649) +++ trunk/jython/src/org/python/core/PyString.java 2008-06-16 13:20:35 UTC (rev 4650) @@ -6,7 +6,6 @@ import org.python.core.util.ExtraMath; import org.python.core.util.StringUtil; -import org.python.expose.ExposedGet; import org.python.expose.ExposedMethod; import org.python.expose.ExposedNew; import org.python.expose.ExposedType; @@ -23,11 +22,6 @@ private transient int cached_hashcode=0; protected transient boolean interned=false; - @ExposedGet(name = "__doc__") - public PyObject getDoc() { - return new PyString("FOO"); - } - // for PyJavaClass.init() public PyString() { this(TYPE, ""); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |