]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
added locals() and globals(); [raw_]input() uses readline()
authorGuido van Rossum <guido@python.org>
Fri, 7 Jul 1995 22:43:42 +0000 (22:43 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 7 Jul 1995 22:43:42 +0000 (22:43 +0000)
Python/bltinmodule.c

index 0dc6f00bffabe707f81ef9c75b70c4d7d9573703..7a55b51ddda2502d3e800f73823ce192df0e5413 100644 (file)
@@ -266,9 +266,11 @@ builtin_compile(self, args)
                start = file_input;
        else if (strcmp(startstr, "eval") == 0)
                start = eval_input;
+       else if (strcmp(startstr, "single") == 0)
+               start = single_input;
        else {
                err_setstr(ValueError,
-                          "compile() mode must be 'exec' or 'eval'");
+                  "compile() mode must be 'exec' or 'eval' or 'single'");
                return NULL;
        }
        return compile_string(str, filename, start);
@@ -461,6 +463,20 @@ builtin_getattr(self, args)
        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 *
 builtin_hasattr(self, args)
        object *self;
@@ -779,6 +795,20 @@ builtin_len(self, args)
                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 *
 builtin_long(self, args)
        object *self;
@@ -1058,6 +1088,8 @@ builtin_xrange(self, args)
        return newrangeobject(ilow, n, istep, 1);
 }
 
+extern char *my_readline PROTO((char *));
+
 static object *
 builtin_raw_input(self, args)
        object *self;
@@ -1068,6 +1100,38 @@ builtin_raw_input(self, args)
 
        if (!newgetargs(args, "|O:[raw_]input", &v))
                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) {
                f = sysget("stdout");
                if (f == NULL) {
@@ -1328,6 +1392,7 @@ static struct methodlist builtin_methods[] = {
        {"filter",      builtin_filter, 1},
        {"float",       builtin_float, 1},
        {"getattr",     builtin_getattr, 1},
+       {"globals",     builtin_globals, 1},
        {"hasattr",     builtin_hasattr, 1},
        {"hash",        builtin_hash, 1},
        {"hex",         builtin_hex, 1},
@@ -1335,6 +1400,7 @@ static struct methodlist builtin_methods[] = {
        {"input",       builtin_input, 1},
        {"int",         builtin_int, 1},
        {"len",         builtin_len, 1},
+       {"locals",      builtin_locals, 1},
        {"long",        builtin_long, 1},
        {"map",         builtin_map, 1},
        {"max",         builtin_max, 1},