/* Generic operations on objects */
extern int printobject PROTO((object *, FILE *, int));
extern object * reprobject PROTO((object *));
+extern object * strobject PROTO((object *));
extern int cmpobject PROTO((object *, object *));
extern object *getattr PROTO((object *, char *));
extern int hasattr PROTO((object *, char *));
DEL(mpzp);
} /* mpz_dealloc() */
-/* ARGSUSED */
-static int
-mpz_print(v, fp, flags)
- object *v;
- FILE *fp;
- int flags; /* Not used but required by interface */
-{
- stringobject *str
- = (stringobject *)mpz_format(v, 10, (unsigned char)1);
-
- if (str == NULL)
- return -1;
-
- fputs(GETSTRINGVALUE(str), fp);
- DECREF(str);
- return 0;
-} /* mpz_print() */
-
/* pointers to frequently used values 0, 1 and -1 */
static mpzobject *mpz_value_zero, *mpz_value_one, *mpz_value_mone;
0, /*tp_itemsize*/
/* methods */
mpz_dealloc, /*tp_dealloc*/
- mpz_print, /*tp_print*/
+ 0, /*tp_print*/
mpz_getattr, /*tp_getattr*/
0, /*tp_setattr*/
mpz_compare, /*tp_compare*/
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);
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)) {
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;
err_badarg();
return NULL;
}
- if (is_stringobject(v)) {
- INCREF(v);
- return v;
- }
- else
- return reprobject(v);
+ return strobject(v);
}
static object *
#include "graminit.h"
#include "pythonrun.h"
+#include <ctype.h>
+
/* Turn this on if your compiler chokes on the big switch: */
/* #define CASE_TOO_BIG 1 /**/
w = sysget("stdout");
if (softspace(w, 1))
writestring(" ", w);
- if (is_stringobject(v)) {
+ err = writeobject(v, w, PRINT_RAW);
+ if (err == 0 && is_stringobject(v)) {
+ /* XXX move into writeobject() ? */
char *s = getstringvalue(v);
int len = getstringsize(v);
- err = writeobject(v, w, PRINT_RAW);
- if (err == 0 && len > 0 && s[len-1] == '\n')
+ if (len > 0 && isspace(s[len-1]) &&
+ s[len-1] != ' ')
softspace(w, 0);
}
- else {
- err = writeobject(v, w, 0);
- }
DECREF(v);
break;