mirror of
https://github.com/python/cpython.git
synced 2025-09-13 04:08:37 +00:00
use getargs() in more cases;
oct(0) should return '0', not '00'
This commit is contained in:
parent
2c475427c2
commit
94390a4eaf
1 changed files with 48 additions and 63 deletions
|
@ -50,32 +50,25 @@ builtin_abs(self, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
static object *
|
static object *
|
||||||
builtin_apply(self, v)
|
builtin_apply(self, args)
|
||||||
object *self;
|
object *self;
|
||||||
object *v;
|
object *args;
|
||||||
{
|
{
|
||||||
object *func, *args;
|
object *func, *arglist;
|
||||||
if (v == NULL || !is_tupleobject(v) || gettuplesize(v) != 2) {
|
if (!getargs(args, "(OO)", &func, &arglist))
|
||||||
err_setstr(TypeError, "apply() requires (func,args)");
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
return call_object(func, arglist);
|
||||||
func = gettupleitem(v, 0);
|
|
||||||
args = gettupleitem(v, 1);
|
|
||||||
return call_object(func, args);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static object *
|
static object *
|
||||||
builtin_chr(self, v)
|
builtin_chr(self, args)
|
||||||
object *self;
|
object *self;
|
||||||
object *v;
|
object *args;
|
||||||
{
|
{
|
||||||
long x;
|
long x;
|
||||||
char s[1];
|
char s[1];
|
||||||
if (v == NULL || !is_intobject(v)) {
|
if (!getargs(args, "l", &x))
|
||||||
err_setstr(TypeError, "chr() requires int argument");
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
x = getintvalue(v);
|
|
||||||
if (x < 0 || x >= 256) {
|
if (x < 0 || x >= 256) {
|
||||||
err_setstr(ValueError, "chr() arg not in range(256)");
|
err_setstr(ValueError, "chr() arg not in range(256)");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -140,12 +133,8 @@ builtin_divmod(self, args)
|
||||||
object *args;
|
object *args;
|
||||||
{
|
{
|
||||||
object *v, *w, *x;
|
object *v, *w, *x;
|
||||||
if (args == NULL || !is_tupleobject(args) || gettuplesize(args) != 2) {
|
if (!getargs(args, "(OO)", &v, &w))
|
||||||
err_setstr(TypeError, "divmod() requires 2 arguments");
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
v = gettupleitem(args, 0);
|
|
||||||
w = gettupleitem(args, 1);
|
|
||||||
if (v->ob_type->tp_as_number == NULL ||
|
if (v->ob_type->tp_as_number == NULL ||
|
||||||
w->ob_type->tp_as_number == NULL) {
|
w->ob_type->tp_as_number == NULL) {
|
||||||
err_setstr(TypeError, "divmod() requires numeric arguments");
|
err_setstr(TypeError, "divmod() requires numeric arguments");
|
||||||
|
@ -186,6 +175,10 @@ exec_eval(v, start)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
s = getstringvalue(str);
|
s = getstringvalue(str);
|
||||||
|
if (strlen(s) != getstringsize(str)) {
|
||||||
|
err_setstr(ValueError, "embedded '\\0' in string arg");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
if (start == eval_input) {
|
if (start == eval_input) {
|
||||||
while (*s == ' ' || *s == '\t')
|
while (*s == ' ' || *s == '\t')
|
||||||
s++;
|
s++;
|
||||||
|
@ -216,6 +209,7 @@ builtin_execfile(self, v)
|
||||||
{
|
{
|
||||||
object *str = NULL, *globals = NULL, *locals = NULL, *w;
|
object *str = NULL, *globals = NULL, *locals = NULL, *w;
|
||||||
FILE* fp;
|
FILE* fp;
|
||||||
|
char *s;
|
||||||
int n;
|
int n;
|
||||||
if (v != NULL) {
|
if (v != NULL) {
|
||||||
if (is_stringobject(v))
|
if (is_stringobject(v))
|
||||||
|
@ -235,8 +229,12 @@ builtin_execfile(self, v)
|
||||||
"execfile arguments must be filename[,dict[,dict]]");
|
"execfile arguments must be filename[,dict[,dict]]");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
if (strlen(s) != getstringsize(str)) {
|
||||||
|
err_setstr(ValueError, "embedded '\\0' in string arg");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
BGN_SAVE
|
BGN_SAVE
|
||||||
fp = fopen(getstringvalue(str), "r");
|
fp = fopen(s, "r");
|
||||||
END_SAVE
|
END_SAVE
|
||||||
if (fp == NULL) {
|
if (fp == NULL) {
|
||||||
err_setstr(IOError, "execfile cannot open the file argument");
|
err_setstr(IOError, "execfile cannot open the file argument");
|
||||||
|
@ -276,34 +274,28 @@ builtin_float(self, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
static object *
|
static object *
|
||||||
builtin_getattr(self, v)
|
builtin_getattr(self, args)
|
||||||
object *self;
|
object *self;
|
||||||
object *v;
|
object *args;
|
||||||
{
|
{
|
||||||
object *name;
|
object *v;
|
||||||
if (v == NULL || !is_tupleobject(v) || gettuplesize(v) != 2 ||
|
char *name;
|
||||||
(name = gettupleitem(v, 1), !is_stringobject(name))) {
|
if (!getargs(args, "(Os)", &v, &name))
|
||||||
err_setstr(TypeError,
|
|
||||||
"getattr() arguments must be (object, string)");
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
return getattr(v, name);
|
||||||
return getattr(gettupleitem(v, 0), getstringvalue(name));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static object *
|
static object *
|
||||||
builtin_setattr(self, v)
|
builtin_setattr(self, args)
|
||||||
object *self;
|
object *self;
|
||||||
object *v;
|
object *args;
|
||||||
{
|
{
|
||||||
object *name;
|
object *v;
|
||||||
if (v == NULL || !is_tupleobject(v) || gettuplesize(v) != 3 ||
|
char *name;
|
||||||
(name = gettupleitem(v, 1), !is_stringobject(name))) {
|
object *value;
|
||||||
err_setstr(TypeError,
|
if (!getargs(args, "(OsO)", &v, &name, &value))
|
||||||
"setattr() arguments must be (object, string, object)");
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
if (setattr(v, name, value) != 0)
|
||||||
if (setattr(gettupleitem(v, 0),
|
|
||||||
getstringvalue(name), gettupleitem(v, 2)) != 0)
|
|
||||||
return NULL;
|
return NULL;
|
||||||
INCREF(None);
|
INCREF(None);
|
||||||
return None;
|
return None;
|
||||||
|
@ -502,7 +494,9 @@ builtin_oct(self, v)
|
||||||
if (is_intobject(v)) {
|
if (is_intobject(v)) {
|
||||||
char buf[20];
|
char buf[20];
|
||||||
long x = getintvalue(v);
|
long x = getintvalue(v);
|
||||||
if (x >= 0)
|
if (x == 0)
|
||||||
|
strcpy(buf, "0");
|
||||||
|
else if (x > 0)
|
||||||
sprintf(buf, "0%lo", x);
|
sprintf(buf, "0%lo", x);
|
||||||
else
|
else
|
||||||
sprintf(buf, "-0%lo", -x);
|
sprintf(buf, "-0%lo", -x);
|
||||||
|
@ -517,35 +511,30 @@ builtin_oct(self, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
static object *
|
static object *
|
||||||
builtin_open(self, v)
|
builtin_open(self, args)
|
||||||
object *self;
|
object *self;
|
||||||
object *v;
|
object *args;
|
||||||
{
|
{
|
||||||
object *name, *mode;
|
char *name, *mode;
|
||||||
if (v == NULL || !is_tupleobject(v) || gettuplesize(v) != 2 ||
|
if (!getargs(args, "(ss)", &name, &mode))
|
||||||
!is_stringobject(name = gettupleitem(v, 0)) ||
|
|
||||||
!is_stringobject(mode = gettupleitem(v, 1))) {
|
|
||||||
err_setstr(TypeError, "open() requires 2 string arguments");
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
return newfileobject(name, mode);
|
||||||
v = newfileobject(getstringvalue(name), getstringvalue(mode));
|
|
||||||
return v;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static object *
|
static object *
|
||||||
builtin_ord(self, v)
|
builtin_ord(self, args)
|
||||||
object *self;
|
object *self;
|
||||||
object *v;
|
object *args;
|
||||||
{
|
{
|
||||||
if (v == NULL || !is_stringobject(v)) {
|
char *s;
|
||||||
err_setstr(TypeError, "ord() must have string argument");
|
int len;
|
||||||
|
if (!getargs(args, "s#", &s, &len))
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
if (len != 1) {
|
||||||
if (getstringsize(v) != 1) {
|
|
||||||
err_setstr(ValueError, "ord() arg must have length 1");
|
err_setstr(ValueError, "ord() arg must have length 1");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return newintobject((long)(getstringvalue(v)[0] & 0xff));
|
return newintobject((long)(s[0] & 0xff));
|
||||||
}
|
}
|
||||||
|
|
||||||
static object *
|
static object *
|
||||||
|
@ -554,12 +543,8 @@ builtin_pow(self, args)
|
||||||
object *args;
|
object *args;
|
||||||
{
|
{
|
||||||
object *v, *w, *x;
|
object *v, *w, *x;
|
||||||
if (args == NULL || !is_tupleobject(args) || gettuplesize(args) != 2) {
|
if (!getargs(args, "(OO)", &v, &w))
|
||||||
err_setstr(TypeError, "pow() requires 2 arguments");
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
v = gettupleitem(args, 0);
|
|
||||||
w = gettupleitem(args, 1);
|
|
||||||
if (v->ob_type->tp_as_number == NULL ||
|
if (v->ob_type->tp_as_number == NULL ||
|
||||||
w->ob_type->tp_as_number == NULL) {
|
w->ob_type->tp_as_number == NULL) {
|
||||||
err_setstr(TypeError, "pow() requires numeric arguments");
|
err_setstr(TypeError, "pow() requires numeric arguments");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue