mirror of https://github.com/python/cpython
added locals() and globals(); [raw_]input() uses readline()
This commit is contained in:
parent
064a62bc8a
commit
872537cc86
|
@ -266,9 +266,11 @@ builtin_compile(self, args)
|
||||||
start = file_input;
|
start = file_input;
|
||||||
else if (strcmp(startstr, "eval") == 0)
|
else if (strcmp(startstr, "eval") == 0)
|
||||||
start = eval_input;
|
start = eval_input;
|
||||||
|
else if (strcmp(startstr, "single") == 0)
|
||||||
|
start = single_input;
|
||||||
else {
|
else {
|
||||||
err_setstr(ValueError,
|
err_setstr(ValueError,
|
||||||
"compile() mode must be 'exec' or 'eval'");
|
"compile() mode must be 'exec' or 'eval' or 'single'");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return compile_string(str, filename, start);
|
return compile_string(str, filename, start);
|
||||||
|
@ -461,6 +463,20 @@ builtin_getattr(self, args)
|
||||||
return getattro(v, name);
|
return getattro(v, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static object *
|
||||||
|
builtin_globals(self, args)
|
||||||
|
object *self;
|
||||||
|
object *args;
|
||||||
|
{
|
||||||
|
object *d;
|
||||||
|
|
||||||
|
if (!newgetargs(args, ""))
|
||||||
|
return NULL;
|
||||||
|
d = getglobals();
|
||||||
|
INCREF(d);
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
static object *
|
static object *
|
||||||
builtin_hasattr(self, args)
|
builtin_hasattr(self, args)
|
||||||
object *self;
|
object *self;
|
||||||
|
@ -779,6 +795,20 @@ builtin_len(self, args)
|
||||||
return newintobject(len);
|
return newintobject(len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static object *
|
||||||
|
builtin_locals(self, args)
|
||||||
|
object *self;
|
||||||
|
object *args;
|
||||||
|
{
|
||||||
|
object *d;
|
||||||
|
|
||||||
|
if (!newgetargs(args, ""))
|
||||||
|
return NULL;
|
||||||
|
d = getlocals();
|
||||||
|
INCREF(d);
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
static object *
|
static object *
|
||||||
builtin_long(self, args)
|
builtin_long(self, args)
|
||||||
object *self;
|
object *self;
|
||||||
|
@ -1058,6 +1088,8 @@ builtin_xrange(self, args)
|
||||||
return newrangeobject(ilow, n, istep, 1);
|
return newrangeobject(ilow, n, istep, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern char *my_readline PROTO((char *));
|
||||||
|
|
||||||
static object *
|
static object *
|
||||||
builtin_raw_input(self, args)
|
builtin_raw_input(self, args)
|
||||||
object *self;
|
object *self;
|
||||||
|
@ -1068,6 +1100,38 @@ builtin_raw_input(self, args)
|
||||||
|
|
||||||
if (!newgetargs(args, "|O:[raw_]input", &v))
|
if (!newgetargs(args, "|O:[raw_]input", &v))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
if (getfilefile(sysget("stdin")) == stdin &&
|
||||||
|
getfilefile(sysget("stdout")) == stdout) {
|
||||||
|
object *po;
|
||||||
|
char *prompt;
|
||||||
|
char *s;
|
||||||
|
object *result;
|
||||||
|
if (v != NULL) {
|
||||||
|
po = strobject(v);
|
||||||
|
if (po == NULL)
|
||||||
|
return NULL;
|
||||||
|
prompt = getstringvalue(po);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
po = NULL;
|
||||||
|
prompt = "";
|
||||||
|
}
|
||||||
|
s = my_readline(prompt);
|
||||||
|
XDECREF(po);
|
||||||
|
if (s == NULL) {
|
||||||
|
err_set(KeyboardInterrupt);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (*s == '\0') {
|
||||||
|
err_set(EOFError);
|
||||||
|
result = NULL;
|
||||||
|
}
|
||||||
|
else { /* strip trailing '\n' */
|
||||||
|
result = newsizedstringobject(s, strlen(s)-1);
|
||||||
|
}
|
||||||
|
free(s);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
if (v != NULL) {
|
if (v != NULL) {
|
||||||
f = sysget("stdout");
|
f = sysget("stdout");
|
||||||
if (f == NULL) {
|
if (f == NULL) {
|
||||||
|
@ -1328,6 +1392,7 @@ static struct methodlist builtin_methods[] = {
|
||||||
{"filter", builtin_filter, 1},
|
{"filter", builtin_filter, 1},
|
||||||
{"float", builtin_float, 1},
|
{"float", builtin_float, 1},
|
||||||
{"getattr", builtin_getattr, 1},
|
{"getattr", builtin_getattr, 1},
|
||||||
|
{"globals", builtin_globals, 1},
|
||||||
{"hasattr", builtin_hasattr, 1},
|
{"hasattr", builtin_hasattr, 1},
|
||||||
{"hash", builtin_hash, 1},
|
{"hash", builtin_hash, 1},
|
||||||
{"hex", builtin_hex, 1},
|
{"hex", builtin_hex, 1},
|
||||||
|
@ -1335,6 +1400,7 @@ static struct methodlist builtin_methods[] = {
|
||||||
{"input", builtin_input, 1},
|
{"input", builtin_input, 1},
|
||||||
{"int", builtin_int, 1},
|
{"int", builtin_int, 1},
|
||||||
{"len", builtin_len, 1},
|
{"len", builtin_len, 1},
|
||||||
|
{"locals", builtin_locals, 1},
|
||||||
{"long", builtin_long, 1},
|
{"long", builtin_long, 1},
|
||||||
{"map", builtin_map, 1},
|
{"map", builtin_map, 1},
|
||||||
{"max", builtin_max, 1},
|
{"max", builtin_max, 1},
|
||||||
|
|
Loading…
Reference in New Issue