*** __builtin__.java.old Thu Dec 30 18:30:08 2004 --- __builtin__.java Thu Dec 30 18:30:26 2004 *************** *** 43,52 **** --- 43,54 ---- return __builtin__.list(arg1); case 8: return __builtin__.tuple(arg1); case 11: return Py.newInteger(__builtin__.id(arg1)); + case 12: + return __builtin__.sum(arg1); default: throw argCountError(1); } } *************** *** 60,69 **** --- 62,73 ---- return Py.newInteger(__builtin__.cmp(arg1, arg2)); case 9: return __builtin__.apply(arg1, arg2); case 10: return Py.newBoolean(__builtin__.isinstance(arg1, arg2)); + case 12: + return __builtin__.sum(arg1, arg2); default: throw argCountError(2); } } *************** *** 136,145 **** --- 140,150 ---- dict.__setitem__("tuple", new BuiltinFunctions("tuple", 8, 1)); dict.__setitem__("apply", new BuiltinFunctions("apply", 9, 2, 3)); dict.__setitem__("isinstance", new BuiltinFunctions("isinstance", 10, 2)); dict.__setitem__("id", new BuiltinFunctions("id", 11, 1)); + dict.__setitem__("sum", new BuiltinFunctions("sum", 12, 1, 2)); dict.__setitem__("__import__", new ImportFunction()); dict.__delitem__("execfile_flags"); // -execfile_flags } *************** *** 864,873 **** --- 869,908 ---- public static PyString str(PyObject o) { return o.__str__(); } + public static PyObject sum(PyObject seq, PyObject result) { + PyObject temp; + PyObject item; + PyObject iter; + + if(result == null) { + result = new PyInteger(0); + } + else { + if(result instanceof PyString) + throw Py.TypeError("sum() can't sum strings [use ''.join(seq) instead]"); + } + + iter = seq.__iter__(); + for(;;) { + item = iter.__iternext__(); + if(item == null) + break; + temp = result._add(item); + result = temp; + if(result == null) + break; + } + return result; + } + + public static PyObject sum(PyObject seq) { + return sum(seq, null); + } + public static PyString unicode(PyObject v) { return unicode(v.__str__(), null, null); } public static PyString unicode(PyString v, String encoding) {