summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1993-11-05 10:22:19 (GMT)
committerGuido van Rossum <guido@python.org>1993-11-05 10:22:19 (GMT)
commitc60041175547df61e67ff167bd5ad18f7967795d (patch)
treed22af13adf57d915922d4806b79213ad326603ef /Objects
parent2e8f8a398e135ce4ec235c33eb64c29e6b6114ea (diff)
downloadcpython-c60041175547df61e67ff167bd5ad18f7967795d.zip
cpython-c60041175547df61e67ff167bd5ad18f7967795d.tar.gz
cpython-c60041175547df61e67ff167bd5ad18f7967795d.tar.bz2
* mpzmodule.c: removed redundant mpz_print function.
* object.[ch], bltinmodule.c, fileobject.c: changed str() to call strobject() which calls an object's __str__ method if it has one. strobject() is also called by writeobject() when PRINT_RAW is passed. * ceval.c: rationalize code for PRINT_ITEM (no change in function!) * funcobject.c, codeobject.c: added compare and hash functionality. Functions with identical code objects and the same global dictionary are equal. Code objects are equal when their code, constants list and names list are identical (i.e. the filename and code name don't count). (hash doesn't work yet since the constants are in a list and lists can't be hashed -- suppose this should really be done with a tuple now we have resizetuple!)
Diffstat (limited to 'Objects')
-rw-r--r--Objects/fileobject.c15
-rw-r--r--Objects/object.c36
2 files changed, 41 insertions, 10 deletions
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index 7ed4fcd..518fe04 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -680,16 +680,13 @@ writeobject(v, f, flags)
writer = getattr(f, "write");
if (writer == NULL)
return -1;
- if ((flags & PRINT_RAW) && is_stringobject(v)) {
- value = v;
- INCREF(value);
- }
- else {
+ if (flags & PRINT_RAW)
+ value = strobject(v);
+ else
value = reprobject(v);
- if (value == NULL) {
- DECREF(writer);
- return -1;
- }
+ if (value == NULL) {
+ DECREF(writer);
+ return -1;
}
result = call_object(writer, value);
DECREF(writer);
diff --git a/Objects/object.c b/Objects/object.c
index 73fba50..7a7383e 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -124,7 +124,11 @@ printobject(op, fp, flags)
op->ob_type->tp_name, (long)op);
}
else {
- object *s = reprobject(op);
+ object *s;
+ if (flags & PRINT_RAW)
+ s = strobject(op);
+ else
+ s = reprobject(op);
if (s == NULL)
ret = -1;
else if (!is_stringobject(s)) {
@@ -171,6 +175,36 @@ reprobject(v)
return (*v->ob_type->tp_repr)(v);
}
+object *
+strobject(v)
+ object *v;
+{
+ if (v == NULL)
+ return newstringobject("<NULL>");
+ if (is_stringobject(v)) {
+ INCREF(v);
+ return v;
+ }
+ else {
+ object *func = getattr(v, "__str__");
+ object *args;
+ object *res;
+ if (func == NULL) {
+ err_clear();
+ return reprobject(v);
+ }
+ args = newtupleobject(0);
+ if (args == NULL)
+ res = NULL;
+ else {
+ res = call_object(func, args);
+ DECREF(args);
+ }
+ DECREF(func);
+ return res;
+ }
+}
+
int
cmpobject(v, w)
object *v, *w;