diff options
author | Guido van Rossum <guido@python.org> | 1993-05-19 14:50:45 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1993-05-19 14:50:45 (GMT) |
commit | 25831652fd4c03323066d4cafdc0551c396a993e (patch) | |
tree | 69588df0f98b3280402cad3ed95865d06fa21702 /Python | |
parent | 687dd13bfec51849c93db7c538ff41d4c8ecddcb (diff) | |
download | cpython-25831652fd4c03323066d4cafdc0551c396a993e.zip cpython-25831652fd4c03323066d4cafdc0551c396a993e.tar.gz cpython-25831652fd4c03323066d4cafdc0551c396a993e.tar.bz2 |
Several changes in one:
(1) dictionaries/mappings now have attributes values() and items() as
well as keys(); at the C level, use the new function mappinggetnext()
to iterate over a dictionary.
(2) "class C(): ..." is now illegal; you must write "class C: ...".
(3) Class objects now know their own name (finally!); and minor
improvements to the way how classes, functions and methods are
represented as strings.
(4) Added an "access" statement and semantics. (This is still
experimental -- as long as you don't use the keyword 'access' nothing
should be changed.)
Diffstat (limited to 'Python')
-rw-r--r-- | Python/bltinmodule.c | 4 | ||||
-rw-r--r-- | Python/ceval.c | 213 | ||||
-rw-r--r-- | Python/compile.c | 137 | ||||
-rw-r--r-- | Python/graminit.c | 982 | ||||
-rw-r--r-- | Python/import.c | 43 | ||||
-rw-r--r-- | Python/marshal.c | 15 |
6 files changed, 745 insertions, 649 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index b74b9cc..3d9504b 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -796,7 +796,9 @@ getbuiltin(name) /* Predefined exceptions */ +object *AccessError; object *AttributeError; +object *ConflictError; object *EOFError; object *IOError; object *ImportError; @@ -827,7 +829,9 @@ newstdexception(name) static void initerrors() { + AccessError = newstdexception("AccessError"); AttributeError = newstdexception("AttributeError"); + ConflictError = newstdexception("ConflictError"); EOFError = newstdexception("EOFError"); IOError = newstdexception("IOError"); ImportError = newstdexception("ImportError"); diff --git a/Python/ceval.c b/Python/ceval.c index 44239e6..57abda6 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -84,9 +84,10 @@ static int cmp_exception PROTO((object *, object *)); static int cmp_member PROTO((object *, object *)); static object *cmp_outcome PROTO((int, object *, object *)); static int import_from PROTO((object *, object *, object *)); -static object *build_class PROTO((object *, object *)); +static object *build_class PROTO((object *, object *, object *)); static void locals_2_fast PROTO((frameobject *, int)); static void fast_2_locals PROTO((frameobject *)); +static int access_statement PROTO((object *, int, frameobject *)); /* Pointer to current frame, used to link new frames to */ @@ -743,10 +744,12 @@ eval_code(co, globals, locals, arg) break; case BUILD_CLASS: - w = POP(); + u = POP(); v = POP(); - x = build_class(v, w); + w = POP(); + x = build_class(u, v, w); PUSH(x); + DECREF(u); DECREF(v); DECREF(w); break; @@ -754,12 +757,24 @@ eval_code(co, globals, locals, arg) case STORE_NAME: w = GETNAMEV(oparg); v = POP(); + u = dict2lookup(f->f_locals, w); + if (u != NULL && is_accessobject(u)) { + err = setaccessvalue(u, (object *)NULL, v); + DECREF(v); + break; + } err = dict2insert(f->f_locals, w, v); DECREF(v); break; case DELETE_NAME: w = GETNAMEV(oparg); + u = dict2lookup(f->f_locals, w); + if (u != NULL && is_accessobject(u)) { + err = setaccessvalue(u, (object *)NULL, + (object *)NULL); + break; + } if ((err = dict2remove(f->f_locals, w)) != 0) err_setstr(NameError, getstringvalue(w)); break; @@ -952,12 +967,24 @@ eval_code(co, globals, locals, arg) case STORE_GLOBAL: w = GETNAMEV(oparg); v = POP(); + u = dict2lookup(f->f_locals, w); + if (u != NULL && is_accessobject(u)) { + err = setaccessvalue(u, (object *)NULL, v); + DECREF(v); + break; + } err = dict2insert(f->f_globals, w, v); DECREF(v); break; case DELETE_GLOBAL: w = GETNAMEV(oparg); + u = dict2lookup(f->f_locals, w); + if (u != NULL && is_accessobject(u)) { + err = setaccessvalue(u, (object *)NULL, + (object *)NULL); + break; + } if ((err = dict2remove(f->f_globals, w)) != 0) err_setstr(NameError, getstringvalue(w)); break; @@ -984,6 +1011,11 @@ eval_code(co, globals, locals, arg) } } } + if (is_accessobject(x)) { + x = getaccessvalue(x, (object *)NULL); + if (x == NULL) + break; + } INCREF(x); PUSH(x); break; @@ -1000,6 +1032,11 @@ eval_code(co, globals, locals, arg) break; } } + if (is_accessobject(x)) { + x = getaccessvalue(x, (object *)NULL); + if (x == NULL) + break; + } INCREF(x); PUSH(x); break; @@ -1011,6 +1048,11 @@ eval_code(co, globals, locals, arg) err_setstr(NameError, getstringvalue(w)); break; } + if (is_accessobject(x)) { + x = getaccessvalue(x, (object *)NULL); + if (x == NULL) + break; + } INCREF(x); PUSH(x); break; @@ -1041,15 +1083,25 @@ eval_code(co, globals, locals, arg) "undefined local variable"); break; } + if (is_accessobject(x)) { + x = getaccessvalue(x, (object *)NULL); + if (x == NULL) + break; + } INCREF(x); PUSH(x); break; case STORE_FAST: + v = POP(); w = GETLISTITEM(fastlocals, oparg); + if (w != NULL && is_accessobject(w)) { + err = setaccessvalue(w, (object *)NULL, v); + DECREF(v); + break; + } XDECREF(w); - w = POP(); - GETLISTITEM(fastlocals, oparg) = w; + GETLISTITEM(fastlocals, oparg) = v; break; case DELETE_FAST: @@ -1059,6 +1111,11 @@ eval_code(co, globals, locals, arg) "undefined local variable"); break; } + if (w != NULL && is_accessobject(w)) { + err = setaccessvalue(w, (object *)NULL, + (object *)NULL); + break; + } DECREF(x); GETLISTITEM(fastlocals, oparg) = NULL; break; @@ -1124,6 +1181,13 @@ eval_code(co, globals, locals, arg) err = import_from(f->f_locals, v, w); locals_2_fast(f, 0); break; + + case ACCESS_MODE: + v = POP(); + w = GETNAMEV(oparg); + err = access_statement(w, (int)getintvalue(v), f); + DECREF(v); + break; case JUMP_FORWARD: JUMPBY(oparg); @@ -1483,7 +1547,8 @@ fast_2_locals(f) /* Merge f->f_fastlocals into f->f_locals */ object *locals, *fast, *map; object *error_type, *error_value; - int i; + int pos; + object *key, *value; if (f == NULL) return; locals = f->f_locals; @@ -1495,16 +1560,10 @@ fast_2_locals(f) !is_dictobject(map)) return; err_get(&error_type, &error_value); - i = getdictsize(map); - while (--i >= 0) { - object *key; - object *value; + pos = 0; + while (mappinggetnext(map, &pos, &key, &value)) { int j; - key = getdict2key(map, i); - if (key == NULL) - continue; - value = dict2lookup(map, key); - if (value == NULL || !is_intobject(value)) + if (!is_intobject(value)) continue; j = getintvalue(value); value = getlistitem(fast, j); @@ -1529,7 +1588,8 @@ locals_2_fast(f, clear) /* Merge f->f_locals into f->f_fastlocals */ object *locals, *fast, *map; object *error_type, *error_value; - int i; + int pos; + object *key, *value; if (f == NULL) return; locals = f->f_locals; @@ -1541,16 +1601,10 @@ locals_2_fast(f, clear) !is_dictobject(map)) return; err_get(&error_type, &error_value); - i = getdictsize(map); - while (--i >= 0) { - object *key; - object *value; + pos = 0; + while (mappinggetnext(map, &pos, &key, &value)) { int j; - key = getdict2key(map, i); - if (key == NULL) - continue; - value = dict2lookup(map, key); - if (value == NULL || !is_intobject(value)) + if (!is_intobject(value)) continue; j = getintvalue(value); value = dict2lookup(locals, key); @@ -1907,14 +1961,7 @@ call_builtin(func, arg) return (*meth)(self, arg); } if (is_classobject(func)) { - if (arg != NULL && - !(is_tupleobject(arg) && - gettuplesize(arg) == 0)) { - err_setstr(TypeError, - "classobject() allows no arguments"); - return NULL; - } - return newinstanceobject(func); + return newinstanceobject(func, arg); } err_setstr(TypeError, "call of non-function"); return NULL; @@ -2258,19 +2305,14 @@ import_from(locals, v, name) object *w, *x; w = getmoduledict(v); if (getstringvalue(name)[0] == '*') { - int i; - int n = getdictsize(w); - for (i = 0; i < n; i++) { - name = getdict2key(w, i); - if (name == NULL || getstringvalue(name)[0] == '_') + int pos; + object *name, *value; + pos = 0; + while (mappinggetnext(w, &pos, &name, &value)) { + if (!is_stringobject(name) || + getstringvalue(name)[0] == '_') continue; - x = dict2lookup(w, name); - if (x == NULL) { - /* XXX can't happen? */ - err_setstr(SystemError, getstringvalue(name)); - return -1; - } - if (dict2insert(locals, name, x) != 0) + if (dict2insert(locals, name, value) != 0) return -1; } return 0; @@ -2290,27 +2332,74 @@ import_from(locals, v, name) } static object * -build_class(v, w) - object *v; /* None or tuple containing base classes */ - object *w; /* dictionary */ +build_class(methods, bases, name) + object *methods; /* dictionary */ + object *bases; /* tuple containing classes */ + object *name; /* string */ { - if (is_tupleobject(v)) { - int i; - for (i = gettuplesize(v); --i >= 0; ) { - object *x = gettupleitem(v, i); - if (!is_classobject(x)) { - err_setstr(TypeError, - "base is not a class object"); - return NULL; - } + int i; + if (!is_tupleobject(bases)) { + err_setstr(SystemError, "build_class with non-tuple bases"); + return NULL; + } + if (!is_dictobject(methods)) { + err_setstr(SystemError, "build_class with non-dictionary"); + return NULL; + } + if (!is_stringobject(name)) { + err_setstr(SystemError, "build_class witn non-string name"); + return NULL; + } + for (i = gettuplesize(bases); --i >= 0; ) { + object *base = gettupleitem(bases, i); + if (!is_classobject(base)) { + err_setstr(TypeError, + "base is not a class object"); + return NULL; } } + return newclassobject(bases, methods, name); +} + +static int +access_statement(name, mode, f) + object *name; + int mode; + frameobject *f; +{ + object *value; + int i = -1; + object *ac; + int ret; + if (f->f_localmap == NULL) + value = dict2lookup(f->f_locals, name); else { - v = NULL; + value = dict2lookup(f->f_localmap, name); + if (value == NULL || !is_intobject(value)) + value = NULL; + else { + i = getintvalue(value); + if (0 <= i && i < getlistsize(f->f_fastlocals)) + value = getlistitem(f->f_fastlocals, i); + else { + value = NULL; + i = -1; + } + } } - if (!is_dictobject(w)) { - err_setstr(SystemError, "build_class with non-dictionary"); - return NULL; + if (value && is_accessobject(value)) { + err_setstr(AccessError, "can't override access"); + return -1; + } + err_clear(); + ac = newaccessobject(value, (object*)NULL, (typeobject*)NULL, mode); + if (ac == NULL) + return -1; + if (i >= 0) + ret = setlistitem(f->f_fastlocals, i, ac); + else { + ret = dict2insert(f->f_locals, name, ac); + DECREF(ac); } - return newclassobject(v, w, (object *) NULL); + return ret; } diff --git a/Python/compile.c b/Python/compile.c index dd79937..d9d661c 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -1408,6 +1408,65 @@ com_global_stmt(c, n) } } +#define strequ(a, b) (strcmp((a), (b)) == 0) + +static void +com_access_stmt(c, n) + struct compiling *c; + node *n; +{ + int i, j, k, mode, imode; + object *vmode; + REQ(n, access_stmt); + /* 'access' NAME (',' NAME)* ':' accesstype (',' accesstype)* + accesstype: NAME+ */ + + /* Find where the colon is */ + i = 1; + while (TYPE(CHILD(n,i-1)) != COLON) + i += 1; + + /* Calculate the mode mask */ + mode = 0; + for (j = i; j < NCH(n); j += 2) { + int r=0,w=0,p=0; + for (k=0; k<NCH(CHILD(n,j)); k++) { + if (strequ(STR(CHILD(CHILD(n,j),k)), "public")) + p = 0; + else if (strequ(STR(CHILD(CHILD(n,j),k)), "protected")) + p = 1; + else if (strequ(STR(CHILD(CHILD(n,j),k)), "private")) + p = 2; + else if (strequ(STR(CHILD(CHILD(n,j),k)), "read")) + r = 1; + else if (strequ(STR(CHILD(CHILD(n,j),k)), "write")) + w = 1; + else /* XXX should make this an exception */ + fprintf(stderr, "bad access type %s\n", + STR(CHILD(CHILD(n,j),k))); + } + if (r == 0 && w == 0) + r =w = 1; + if (p == 0) { + if (r == 1) mode |= AC_R_PUBLIC; + if (w == 1) mode |= AC_W_PUBLIC; + } else if (p == 1) { + if (r == 1) mode |= AC_R_PROTECTED; + if (w == 1) mode |= AC_W_PROTECTED; + } else { + if (r == 1) mode |= AC_R_PRIVATE; + if (w == 1) mode |= AC_W_PRIVATE; + } + } + vmode = newintobject((long)mode); + imode = com_addconst(c, vmode); + XDECREF(vmode); + for (i = 1; TYPE(CHILD(n,i-1)) != COLON; i+=2) { + com_addoparg(c, LOAD_CONST, imode); + com_addopname(c, ACCESS_MODE, CHILD(n, i)); + } +} + static void com_if_stmt(c, n) struct compiling *c; @@ -1726,23 +1785,7 @@ com_funcdef(c, n) } static void -com_oldbases(c, n) - struct compiling *c; - node *n; -{ - int i; - REQ(n, baselist); - /* - baselist: atom arguments (',' atom arguments)* - arguments: '(' ')' - */ - for (i = 0; i < NCH(n); i += 3) - com_node(c, CHILD(n, i)); - com_addoparg(c, BUILD_TUPLE, (NCH(n)+1) / 3); -} - -static void -com_newbases(c, n) +com_bases(c, n) struct compiling *c; node *n; { @@ -1759,46 +1802,28 @@ com_classdef(c, n) struct compiling *c; node *n; { + int i; object *v; REQ(n, classdef); - /* - classdef: 'class' NAME - ['(' testlist ')' |'(' ')' ['=' baselist]] ':' suite - baselist: atom arguments (',' atom arguments)* - arguments: '(' ')' - */ - /* This piece of code must push a tuple on the stack (the bases) */ - if (TYPE(CHILD(n, 2)) != LPAR) { - /* New syntax without base classes: - class NAME ':' suite - ___________^ - */ - com_addoparg(c, BUILD_TUPLE, 0); - } - else { - if (TYPE(CHILD(n, 3)) == RPAR) { - /* Old syntax with or without base classes: - class NAME '(' ')' ['=' baselist] ':' suite - _______________^....^...^ - */ - if (TYPE(CHILD(n, 4)) == EQUAL) - com_oldbases(c, CHILD(n, 5)); - else - com_addoparg(c, BUILD_TUPLE, 0); - } - else { - /* New syntax with base classes: - class NAME '(' testlist ')' ':' suite - _______________^ - */ - com_newbases(c, CHILD(n, 3)); - } + /* classdef: class NAME ['(' testlist ')'] ':' suite */ + if ((v = newstringobject(STR(CHILD(n, 1)))) == NULL) { + c->c_errors++; + return; } + /* Push the class name on the stack */ + i = com_addconst(c, v); + com_addoparg(c, LOAD_CONST, i); + DECREF(v); + /* Push the tuple of base classes on the stack */ + if (TYPE(CHILD(n, 2)) != LPAR) + com_addoparg(c, BUILD_TUPLE, 0); + else + com_bases(c, CHILD(n, 3)); v = (object *)compile(n, c->c_filename); if (v == NULL) c->c_errors++; else { - int i = com_addconst(c, v); + i = com_addconst(c, v); com_addoparg(c, LOAD_CONST, i); com_addbyte(c, BUILD_FUNCTION); com_addbyte(c, UNARY_CALL); @@ -1882,6 +1907,9 @@ com_node(c, n) case global_stmt: com_global_stmt(c, n); break; + case access_stmt: + com_access_stmt(c, n); + break; case if_stmt: com_if_stmt(c, n); break; @@ -2084,9 +2112,8 @@ compile_node(c, n) break; case classdef: /* A class definition */ - /* classdef: 'class' NAME - ['(' testlist ')' |'(' ')' ['=' baselist]] - ':' suite */ + /* classdef: 'class' NAME ['(' testlist ')'] ':' suite */ + c->c_name = STR(CHILD(n, 1)); com_node(c, CHILD(n, NCH(n)-1)); /* The suite */ com_addbyte(c, LOAD_LOCALS); com_addbyte(c, RETURN_VALUE); @@ -2114,8 +2141,8 @@ compile_node(c, n) There is one problem: 'from foo import *' introduces local variables that we can't know while compiling. If this is the case, wo don't - optimize at all (this rarely happens, since import is mostly used - at the module level). + optimize at all (this rarely happens, since this form of import + statement is mostly used at the module level). Note that, because of this optimization, code like the following won't work: diff --git a/Python/graminit.c b/Python/graminit.c index 571a835..530ddf3 100644 --- a/Python/graminit.c +++ b/Python/graminit.c @@ -194,7 +194,7 @@ static state states_10[4] = { {2, arcs_10_2}, {1, arcs_10_3}, }; -static arc arcs_11_0[7] = { +static arc arcs_11_0[8] = { {26, 1}, {27, 1}, {28, 1}, @@ -202,19 +202,20 @@ static arc arcs_11_0[7] = { {30, 1}, {31, 1}, {32, 1}, + {33, 1}, }; static arc arcs_11_1[1] = { {0, 1}, }; static state states_11[2] = { - {7, arcs_11_0}, + {8, arcs_11_0}, {1, arcs_11_1}, }; static arc arcs_12_0[1] = { - {33, 1}, + {34, 1}, }; static arc arcs_12_1[2] = { - {34, 0}, + {35, 0}, {0, 1}, }; static state states_12[2] = { @@ -222,10 +223,10 @@ static state states_12[2] = { {2, arcs_12_1}, }; static arc arcs_13_0[1] = { - {35, 1}, + {36, 1}, }; static arc arcs_13_1[2] = { - {36, 2}, + {37, 2}, {0, 1}, }; static arc arcs_13_2[2] = { @@ -238,10 +239,10 @@ static state states_13[3] = { {2, arcs_13_2}, }; static arc arcs_14_0[1] = { - {37, 1}, + {38, 1}, }; static arc arcs_14_1[1] = { - {33, 2}, + {34, 2}, }; static arc arcs_14_2[1] = { {0, 2}, @@ -252,7 +253,7 @@ static state states_14[3] = { {1, arcs_14_2}, }; static arc arcs_15_0[1] = { - {38, 1}, + {39, 1}, }; static arc arcs_15_1[1] = { {0, 1}, @@ -262,10 +263,10 @@ static state states_15[2] = { {1, arcs_15_1}, }; static arc arcs_16_0[4] = { - {39, 1}, {40, 1}, {41, 1}, {42, 1}, + {43, 1}, }; static arc arcs_16_1[1] = { {0, 1}, @@ -275,7 +276,7 @@ static state states_16[2] = { {1, arcs_16_1}, }; static arc arcs_17_0[1] = { - {43, 1}, + {44, 1}, }; static arc arcs_17_1[1] = { {0, 1}, @@ -285,7 +286,7 @@ static state states_17[2] = { {1, arcs_17_1}, }; static arc arcs_18_0[1] = { - {44, 1}, + {45, 1}, }; static arc arcs_18_1[1] = { {0, 1}, @@ -295,7 +296,7 @@ static state states_18[2] = { {1, arcs_18_1}, }; static arc arcs_19_0[1] = { - {45, 1}, + {46, 1}, }; static arc arcs_19_1[2] = { {9, 2}, @@ -310,17 +311,17 @@ static state states_19[3] = { {1, arcs_19_2}, }; static arc arcs_20_0[1] = { - {46, 1}, + {47, 1}, }; static arc arcs_20_1[1] = { - {36, 2}, + {37, 2}, }; static arc arcs_20_2[2] = { {21, 3}, {0, 2}, }; static arc arcs_20_3[1] = { - {36, 4}, + {37, 4}, }; static arc arcs_20_4[1] = { {0, 4}, @@ -333,8 +334,8 @@ static state states_20[5] = { {1, arcs_20_4}, }; static arc arcs_21_0[2] = { - {47, 1}, - {48, 2}, + {48, 1}, + {49, 2}, }; static arc arcs_21_1[1] = { {13, 3}, @@ -347,7 +348,7 @@ static arc arcs_21_3[2] = { {0, 3}, }; static arc arcs_21_4[1] = { - {47, 5}, + {48, 5}, }; static arc arcs_21_5[2] = { {22, 6}, @@ -375,7 +376,7 @@ static state states_21[9] = { {1, arcs_21_8}, }; static arc arcs_22_0[1] = { - {49, 1}, + {50, 1}, }; static arc arcs_22_1[1] = { {13, 2}, @@ -389,330 +390,343 @@ static state states_22[3] = { {1, arcs_22_1}, {2, arcs_22_2}, }; -static arc arcs_23_0[6] = { - {50, 1}, +static arc arcs_23_0[1] = { {51, 1}, - {52, 1}, - {53, 1}, - {11, 1}, - {54, 1}, }; static arc arcs_23_1[1] = { - {0, 1}, -}; -static state states_23[2] = { - {6, arcs_23_0}, - {1, arcs_23_1}, -}; -static arc arcs_24_0[1] = { - {55, 1}, -}; -static arc arcs_24_1[1] = { - {36, 2}, + {13, 2}, }; -static arc arcs_24_2[1] = { +static arc arcs_23_2[2] = { + {21, 1}, {15, 3}, }; -static arc arcs_24_3[1] = { - {16, 4}, +static arc arcs_23_3[1] = { + {52, 4}, }; -static arc arcs_24_4[3] = { - {56, 1}, - {57, 5}, +static arc arcs_23_4[2] = { + {21, 3}, {0, 4}, }; -static arc arcs_24_5[1] = { - {15, 6}, +static state states_23[5] = { + {1, arcs_23_0}, + {1, arcs_23_1}, + {2, arcs_23_2}, + {1, arcs_23_3}, + {2, arcs_23_4}, }; -static arc arcs_24_6[1] = { - {16, 7}, +static arc arcs_24_0[1] = { + {13, 1}, }; -static arc arcs_24_7[1] = { - {0, 7}, +static arc arcs_24_1[2] = { + {13, 1}, + {0, 1}, }; -static state states_24[8] = { +static state states_24[2] = { {1, arcs_24_0}, - {1, arcs_24_1}, - {1, arcs_24_2}, - {1, arcs_24_3}, - {3, arcs_24_4}, - {1, arcs_24_5}, - {1, arcs_24_6}, - {1, arcs_24_7}, -}; -static arc arcs_25_0[1] = { - {58, 1}, -}; -static arc arcs_25_1[1] = { - {36, 2}, -}; -static arc arcs_25_2[1] = { - {15, 3}, -}; -static arc arcs_25_3[1] = { - {16, 4}, -}; -static arc arcs_25_4[2] = { - {57, 5}, - {0, 4}, + {2, arcs_24_1}, }; -static arc arcs_25_5[1] = { - {15, 6}, -}; -static arc arcs_25_6[1] = { - {16, 7}, +static arc arcs_25_0[6] = { + {53, 1}, + {54, 1}, + {55, 1}, + {56, 1}, + {11, 1}, + {57, 1}, }; -static arc arcs_25_7[1] = { - {0, 7}, +static arc arcs_25_1[1] = { + {0, 1}, }; -static state states_25[8] = { - {1, arcs_25_0}, +static state states_25[2] = { + {6, arcs_25_0}, {1, arcs_25_1}, - {1, arcs_25_2}, - {1, arcs_25_3}, - {2, arcs_25_4}, - {1, arcs_25_5}, - {1, arcs_25_6}, - {1, arcs_25_7}, }; static arc arcs_26_0[1] = { - {59, 1}, + {58, 1}, }; static arc arcs_26_1[1] = { - {33, 2}, + {37, 2}, }; static arc arcs_26_2[1] = { - {60, 3}, + {15, 3}, }; static arc arcs_26_3[1] = { - {9, 4}, + {16, 4}, }; -static arc arcs_26_4[1] = { - {15, 5}, +static arc arcs_26_4[3] = { + {59, 1}, + {60, 5}, + {0, 4}, }; static arc arcs_26_5[1] = { - {16, 6}, + {15, 6}, }; -static arc arcs_26_6[2] = { - {57, 7}, - {0, 6}, +static arc arcs_26_6[1] = { + {16, 7}, }; static arc arcs_26_7[1] = { - {15, 8}, -}; -static arc arcs_26_8[1] = { - {16, 9}, -}; -static arc arcs_26_9[1] = { - {0, 9}, + {0, 7}, }; -static state states_26[10] = { +static state states_26[8] = { {1, arcs_26_0}, {1, arcs_26_1}, {1, arcs_26_2}, {1, arcs_26_3}, - {1, arcs_26_4}, + {3, arcs_26_4}, {1, arcs_26_5}, - {2, arcs_26_6}, + {1, arcs_26_6}, {1, arcs_26_7}, - {1, arcs_26_8}, - {1, arcs_26_9}, }; static arc arcs_27_0[1] = { {61, 1}, }; static arc arcs_27_1[1] = { - {15, 2}, + {37, 2}, }; static arc arcs_27_2[1] = { - {16, 3}, + {15, 3}, }; -static arc arcs_27_3[2] = { - {62, 4}, - {63, 5}, +static arc arcs_27_3[1] = { + {16, 4}, }; -static arc arcs_27_4[1] = { - {15, 6}, +static arc arcs_27_4[2] = { + {60, 5}, + {0, 4}, }; static arc arcs_27_5[1] = { - {15, 7}, + {15, 6}, }; static arc arcs_27_6[1] = { - {16, 8}, + {16, 7}, }; static arc arcs_27_7[1] = { - {16, 9}, -}; -static arc arcs_27_8[2] = { - {62, 4}, - {0, 8}, -}; -static arc arcs_27_9[1] = { - {0, 9}, + {0, 7}, }; -static state states_27[10] = { +static state states_27[8] = { {1, arcs_27_0}, {1, arcs_27_1}, {1, arcs_27_2}, - {2, arcs_27_3}, - {1, arcs_27_4}, + {1, arcs_27_3}, + {2, arcs_27_4}, {1, arcs_27_5}, {1, arcs_27_6}, {1, arcs_27_7}, - {2, arcs_27_8}, - {1, arcs_27_9}, }; static arc arcs_28_0[1] = { - {64, 1}, + {62, 1}, }; -static arc arcs_28_1[2] = { - {36, 2}, - {0, 1}, +static arc arcs_28_1[1] = { + {34, 2}, }; -static arc arcs_28_2[2] = { - {21, 3}, - {0, 2}, +static arc arcs_28_2[1] = { + {63, 3}, }; static arc arcs_28_3[1] = { - {36, 4}, + {9, 4}, }; static arc arcs_28_4[1] = { - {0, 4}, + {15, 5}, }; -static state states_28[5] = { +static arc arcs_28_5[1] = { + {16, 6}, +}; +static arc arcs_28_6[2] = { + {60, 7}, + {0, 6}, +}; +static arc arcs_28_7[1] = { + {15, 8}, +}; +static arc arcs_28_8[1] = { + {16, 9}, +}; +static arc arcs_28_9[1] = { + {0, 9}, +}; +static state states_28[10] = { {1, arcs_28_0}, - {2, arcs_28_1}, - {2, arcs_28_2}, + {1, arcs_28_1}, + {1, arcs_28_2}, {1, arcs_28_3}, {1, arcs_28_4}, + {1, arcs_28_5}, + {2, arcs_28_6}, + {1, arcs_28_7}, + {1, arcs_28_8}, + {1, arcs_28_9}, }; -static arc arcs_29_0[2] = { - {3, 1}, - {2, 2}, +static arc arcs_29_0[1] = { + {64, 1}, }; static arc arcs_29_1[1] = { - {0, 1}, + {15, 2}, }; static arc arcs_29_2[1] = { - {65, 3}, + {16, 3}, }; -static arc arcs_29_3[1] = { - {6, 4}, +static arc arcs_29_3[2] = { + {65, 4}, + {66, 5}, }; -static arc arcs_29_4[2] = { - {6, 4}, - {66, 1}, +static arc arcs_29_4[1] = { + {15, 6}, }; -static state states_29[5] = { - {2, arcs_29_0}, +static arc arcs_29_5[1] = { + {15, 7}, +}; +static arc arcs_29_6[1] = { + {16, 8}, +}; +static arc arcs_29_7[1] = { + {16, 9}, +}; +static arc arcs_29_8[2] = { + {65, 4}, + {0, 8}, +}; +static arc arcs_29_9[1] = { + {0, 9}, +}; +static state states_29[10] = { + {1, arcs_29_0}, {1, arcs_29_1}, {1, arcs_29_2}, - {1, arcs_29_3}, - {2, arcs_29_4}, + {2, arcs_29_3}, + {1, arcs_29_4}, + {1, arcs_29_5}, + {1, arcs_29_6}, + {1, arcs_29_7}, + {2, arcs_29_8}, + {1, arcs_29_9}, }; static arc arcs_30_0[1] = { {67, 1}, }; static arc arcs_30_1[2] = { - {68, 0}, + {37, 2}, {0, 1}, }; -static state states_30[2] = { +static arc arcs_30_2[2] = { + {21, 3}, + {0, 2}, +}; +static arc arcs_30_3[1] = { + {37, 4}, +}; +static arc arcs_30_4[1] = { + {0, 4}, +}; +static state states_30[5] = { {1, arcs_30_0}, {2, arcs_30_1}, + {2, arcs_30_2}, + {1, arcs_30_3}, + {1, arcs_30_4}, }; -static arc arcs_31_0[1] = { - {69, 1}, +static arc arcs_31_0[2] = { + {3, 1}, + {2, 2}, }; -static arc arcs_31_1[2] = { - {70, 0}, +static arc arcs_31_1[1] = { {0, 1}, }; -static state states_31[2] = { - {1, arcs_31_0}, - {2, arcs_31_1}, +static arc arcs_31_2[1] = { + {68, 3}, }; -static arc arcs_32_0[2] = { - {71, 1}, - {72, 2}, +static arc arcs_31_3[1] = { + {6, 4}, }; -static arc arcs_32_1[1] = { - {69, 2}, +static arc arcs_31_4[2] = { + {6, 4}, + {69, 1}, }; -static arc arcs_32_2[1] = { - {0, 2}, +static state states_31[5] = { + {2, arcs_31_0}, + {1, arcs_31_1}, + {1, arcs_31_2}, + {1, arcs_31_3}, + {2, arcs_31_4}, }; -static state states_32[3] = { - {2, arcs_32_0}, - {1, arcs_32_1}, - {1, arcs_32_2}, +static arc arcs_32_0[1] = { + {70, 1}, +}; +static arc arcs_32_1[2] = { + {71, 0}, + {0, 1}, +}; +static state states_32[2] = { + {1, arcs_32_0}, + {2, arcs_32_1}, }; static arc arcs_33_0[1] = { - {73, 1}, + {72, 1}, }; static arc arcs_33_1[2] = { - {74, 0}, + {73, 0}, {0, 1}, }; static state states_33[2] = { {1, arcs_33_0}, {2, arcs_33_1}, }; -static arc arcs_34_0[10] = { - {75, 1}, - {76, 1}, - {77, 1}, - {78, 1}, - {79, 1}, - {80, 1}, - {81, 1}, - {60, 1}, - {71, 2}, - {82, 3}, +static arc arcs_34_0[2] = { + {74, 1}, + {75, 2}, }; static arc arcs_34_1[1] = { - {0, 1}, + {72, 2}, }; static arc arcs_34_2[1] = { - {60, 1}, -}; -static arc arcs_34_3[2] = { - {71, 1}, - {0, 3}, + {0, 2}, }; -static state states_34[4] = { - {10, arcs_34_0}, +static state states_34[3] = { + {2, arcs_34_0}, {1, arcs_34_1}, {1, arcs_34_2}, - {2, arcs_34_3}, }; static arc arcs_35_0[1] = { - {83, 1}, + {76, 1}, }; static arc arcs_35_1[2] = { - {84, 0}, + {77, 0}, {0, 1}, }; static state states_35[2] = { {1, arcs_35_0}, {2, arcs_35_1}, }; -static arc arcs_36_0[1] = { - {85, 1}, +static arc arcs_36_0[10] = { + {78, 1}, + {79, 1}, + {80, 1}, + {81, 1}, + {82, 1}, + {83, 1}, + {84, 1}, + {63, 1}, + {74, 2}, + {85, 3}, }; -static arc arcs_36_1[2] = { - {86, 0}, +static arc arcs_36_1[1] = { {0, 1}, }; -static state states_36[2] = { - {1, arcs_36_0}, - {2, arcs_36_1}, +static arc arcs_36_2[1] = { + {63, 1}, +}; +static arc arcs_36_3[2] = { + {74, 1}, + {0, 3}, +}; +static state states_36[4] = { + {10, arcs_36_0}, + {1, arcs_36_1}, + {1, arcs_36_2}, + {2, arcs_36_3}, }; static arc arcs_37_0[1] = { - {87, 1}, + {86, 1}, }; static arc arcs_37_1[2] = { - {88, 0}, + {87, 0}, {0, 1}, }; static state states_37[2] = { @@ -720,308 +734,291 @@ static state states_37[2] = { {2, arcs_37_1}, }; static arc arcs_38_0[1] = { - {89, 1}, + {88, 1}, }; -static arc arcs_38_1[3] = { - {90, 0}, - {91, 0}, +static arc arcs_38_1[2] = { + {89, 0}, {0, 1}, }; static state states_38[2] = { {1, arcs_38_0}, - {3, arcs_38_1}, + {2, arcs_38_1}, }; static arc arcs_39_0[1] = { - {92, 1}, + {90, 1}, }; -static arc arcs_39_1[3] = { - {93, 0}, - {94, 0}, +static arc arcs_39_1[2] = { + {91, 0}, {0, 1}, }; static state states_39[2] = { {1, arcs_39_0}, - {3, arcs_39_1}, + {2, arcs_39_1}, }; static arc arcs_40_0[1] = { + {92, 1}, +}; +static arc arcs_40_1[3] = { + {93, 0}, + {94, 0}, + {0, 1}, +}; +static state states_40[2] = { + {1, arcs_40_0}, + {3, arcs_40_1}, +}; +static arc arcs_41_0[1] = { {95, 1}, }; -static arc arcs_40_1[4] = { - {22, 0}, +static arc arcs_41_1[3] = { {96, 0}, {97, 0}, {0, 1}, }; -static state states_40[2] = { - {1, arcs_40_0}, - {4, arcs_40_1}, +static state states_41[2] = { + {1, arcs_41_0}, + {3, arcs_41_1}, }; -static arc arcs_41_0[4] = { - {93, 1}, - {94, 1}, +static arc arcs_42_0[1] = { {98, 1}, - {99, 2}, }; -static arc arcs_41_1[1] = { - {95, 3}, +static arc arcs_42_1[4] = { + {22, 0}, + {99, 0}, + {100, 0}, + {0, 1}, +}; +static state states_42[2] = { + {1, arcs_42_0}, + {4, arcs_42_1}, }; -static arc arcs_41_2[2] = { - {100, 2}, +static arc arcs_43_0[4] = { + {96, 1}, + {97, 1}, + {101, 1}, + {102, 2}, +}; +static arc arcs_43_1[1] = { + {98, 3}, +}; +static arc arcs_43_2[2] = { + {103, 2}, {0, 2}, }; -static arc arcs_41_3[1] = { +static arc arcs_43_3[1] = { {0, 3}, }; -static state states_41[4] = { - {4, arcs_41_0}, - {1, arcs_41_1}, - {2, arcs_41_2}, - {1, arcs_41_3}, +static state states_43[4] = { + {4, arcs_43_0}, + {1, arcs_43_1}, + {2, arcs_43_2}, + {1, arcs_43_3}, }; -static arc arcs_42_0[7] = { +static arc arcs_44_0[7] = { {17, 1}, - {101, 2}, - {103, 3}, - {106, 4}, + {104, 2}, + {106, 3}, + {109, 4}, {13, 5}, - {107, 5}, - {108, 5}, + {110, 5}, + {111, 5}, }; -static arc arcs_42_1[2] = { +static arc arcs_44_1[2] = { {9, 6}, {19, 5}, }; -static arc arcs_42_2[2] = { +static arc arcs_44_2[2] = { {9, 7}, - {102, 5}, -}; -static arc arcs_42_3[2] = { - {104, 8}, {105, 5}, }; -static arc arcs_42_4[1] = { +static arc arcs_44_3[2] = { + {107, 8}, + {108, 5}, +}; +static arc arcs_44_4[1] = { {9, 9}, }; -static arc arcs_42_5[1] = { +static arc arcs_44_5[1] = { {0, 5}, }; -static arc arcs_42_6[1] = { +static arc arcs_44_6[1] = { {19, 5}, }; -static arc arcs_42_7[1] = { - {102, 5}, -}; -static arc arcs_42_8[1] = { +static arc arcs_44_7[1] = { {105, 5}, }; -static arc arcs_42_9[1] = { - {106, 5}, -}; -static state states_42[10] = { - {7, arcs_42_0}, - {2, arcs_42_1}, - {2, arcs_42_2}, - {2, arcs_42_3}, - {1, arcs_42_4}, - {1, arcs_42_5}, - {1, arcs_42_6}, - {1, arcs_42_7}, - {1, arcs_42_8}, - {1, arcs_42_9}, -}; -static arc arcs_43_0[3] = { +static arc arcs_44_8[1] = { + {108, 5}, +}; +static arc arcs_44_9[1] = { + {109, 5}, +}; +static state states_44[10] = { + {7, arcs_44_0}, + {2, arcs_44_1}, + {2, arcs_44_2}, + {2, arcs_44_3}, + {1, arcs_44_4}, + {1, arcs_44_5}, + {1, arcs_44_6}, + {1, arcs_44_7}, + {1, arcs_44_8}, + {1, arcs_44_9}, +}; +static arc arcs_45_0[3] = { {17, 1}, - {101, 2}, - {110, 3}, + {104, 2}, + {113, 3}, }; -static arc arcs_43_1[2] = { +static arc arcs_45_1[2] = { {9, 4}, {19, 5}, }; -static arc arcs_43_2[1] = { - {109, 6}, +static arc arcs_45_2[1] = { + {112, 6}, }; -static arc arcs_43_3[1] = { +static arc arcs_45_3[1] = { {13, 5}, }; -static arc arcs_43_4[1] = { +static arc arcs_45_4[1] = { {19, 5}, }; -static arc arcs_43_5[1] = { +static arc arcs_45_5[1] = { {0, 5}, }; -static arc arcs_43_6[1] = { - {102, 5}, +static arc arcs_45_6[1] = { + {105, 5}, }; -static state states_43[7] = { - {3, arcs_43_0}, - {2, arcs_43_1}, - {1, arcs_43_2}, - {1, arcs_43_3}, - {1, arcs_43_4}, - {1, arcs_43_5}, - {1, arcs_43_6}, +static state states_45[7] = { + {3, arcs_45_0}, + {2, arcs_45_1}, + {1, arcs_45_2}, + {1, arcs_45_3}, + {1, arcs_45_4}, + {1, arcs_45_5}, + {1, arcs_45_6}, }; -static arc arcs_44_0[2] = { - {36, 1}, +static arc arcs_46_0[2] = { + {37, 1}, {15, 2}, }; -static arc arcs_44_1[2] = { +static arc arcs_46_1[2] = { {15, 2}, {0, 1}, }; -static arc arcs_44_2[2] = { - {36, 3}, +static arc arcs_46_2[2] = { + {37, 3}, {0, 2}, }; -static arc arcs_44_3[1] = { +static arc arcs_46_3[1] = { {0, 3}, }; -static state states_44[4] = { - {2, arcs_44_0}, - {2, arcs_44_1}, - {2, arcs_44_2}, - {1, arcs_44_3}, +static state states_46[4] = { + {2, arcs_46_0}, + {2, arcs_46_1}, + {2, arcs_46_2}, + {1, arcs_46_3}, }; -static arc arcs_45_0[1] = { - {73, 1}, +static arc arcs_47_0[1] = { + {76, 1}, }; -static arc arcs_45_1[2] = { +static arc arcs_47_1[2] = { {21, 2}, {0, 1}, }; -static arc arcs_45_2[2] = { - {73, 1}, +static arc arcs_47_2[2] = { + {76, 1}, {0, 2}, }; -static state states_45[3] = { - {1, arcs_45_0}, - {2, arcs_45_1}, - {2, arcs_45_2}, +static state states_47[3] = { + {1, arcs_47_0}, + {2, arcs_47_1}, + {2, arcs_47_2}, }; -static arc arcs_46_0[1] = { - {36, 1}, +static arc arcs_48_0[1] = { + {37, 1}, }; -static arc arcs_46_1[2] = { +static arc arcs_48_1[2] = { {21, 2}, {0, 1}, }; -static arc arcs_46_2[2] = { - {36, 1}, +static arc arcs_48_2[2] = { + {37, 1}, {0, 2}, }; -static state states_46[3] = { - {1, arcs_46_0}, - {2, arcs_46_1}, - {2, arcs_46_2}, +static state states_48[3] = { + {1, arcs_48_0}, + {2, arcs_48_1}, + {2, arcs_48_2}, }; -static arc arcs_47_0[1] = { - {36, 1}, +static arc arcs_49_0[1] = { + {37, 1}, }; -static arc arcs_47_1[1] = { +static arc arcs_49_1[1] = { {15, 2}, }; -static arc arcs_47_2[1] = { - {36, 3}, +static arc arcs_49_2[1] = { + {37, 3}, }; -static arc arcs_47_3[2] = { +static arc arcs_49_3[2] = { {21, 4}, {0, 3}, }; -static arc arcs_47_4[2] = { - {36, 1}, +static arc arcs_49_4[2] = { + {37, 1}, {0, 4}, }; -static state states_47[5] = { - {1, arcs_47_0}, - {1, arcs_47_1}, - {1, arcs_47_2}, - {2, arcs_47_3}, - {2, arcs_47_4}, +static state states_49[5] = { + {1, arcs_49_0}, + {1, arcs_49_1}, + {1, arcs_49_2}, + {2, arcs_49_3}, + {2, arcs_49_4}, }; -static arc arcs_48_0[1] = { - {111, 1}, +static arc arcs_50_0[1] = { + {114, 1}, }; -static arc arcs_48_1[1] = { +static arc arcs_50_1[1] = { {13, 2}, }; -static arc arcs_48_2[2] = { +static arc arcs_50_2[2] = { {17, 3}, {15, 4}, }; -static arc arcs_48_3[2] = { +static arc arcs_50_3[1] = { {9, 5}, - {19, 6}, }; -static arc arcs_48_4[1] = { - {16, 7}, -}; -static arc arcs_48_5[1] = { - {19, 8}, +static arc arcs_50_4[1] = { + {16, 6}, }; -static arc arcs_48_6[2] = { - {34, 9}, - {15, 4}, +static arc arcs_50_5[1] = { + {19, 7}, }; -static arc arcs_48_7[1] = { - {0, 7}, +static arc arcs_50_6[1] = { + {0, 6}, }; -static arc arcs_48_8[1] = { +static arc arcs_50_7[1] = { {15, 4}, }; -static arc arcs_48_9[1] = { - {112, 8}, -}; -static state states_48[10] = { - {1, arcs_48_0}, - {1, arcs_48_1}, - {2, arcs_48_2}, - {2, arcs_48_3}, - {1, arcs_48_4}, - {1, arcs_48_5}, - {2, arcs_48_6}, - {1, arcs_48_7}, - {1, arcs_48_8}, - {1, arcs_48_9}, -}; -static arc arcs_49_0[1] = { - {99, 1}, -}; -static arc arcs_49_1[1] = { - {113, 2}, -}; -static arc arcs_49_2[2] = { - {21, 0}, - {0, 2}, -}; -static state states_49[3] = { - {1, arcs_49_0}, - {1, arcs_49_1}, - {2, arcs_49_2}, -}; -static arc arcs_50_0[1] = { - {17, 1}, -}; -static arc arcs_50_1[1] = { - {19, 2}, -}; -static arc arcs_50_2[1] = { - {0, 2}, -}; -static state states_50[3] = { +static state states_50[8] = { {1, arcs_50_0}, {1, arcs_50_1}, - {1, arcs_50_2}, + {2, arcs_50_2}, + {1, arcs_50_3}, + {1, arcs_50_4}, + {1, arcs_50_5}, + {1, arcs_50_6}, + {1, arcs_50_7}, }; static dfa dfas[51] = { {256, "single_input", 0, 3, states_0, - "\004\060\002\000\150\370\203\054\000\000\000\140\244\234\000"}, + "\004\060\002\000\320\360\017\144\001\000\000\000\043\345\004"}, {257, "file_input", 0, 2, states_1, - "\204\060\002\000\150\370\203\054\000\000\000\140\244\234\000"}, + "\204\060\002\000\320\360\017\144\001\000\000\000\043\345\004"}, {258, "expr_input", 0, 3, states_2, - "\000\040\002\000\000\000\000\000\200\000\000\140\244\034\000"}, + "\000\040\002\000\000\000\000\000\000\004\000\000\043\345\000"}, {259, "eval_input", 0, 3, states_3, - "\000\040\002\000\000\000\000\000\200\000\000\140\244\034\000"}, + "\000\040\002\000\000\000\000\000\000\004\000\000\043\345\000"}, {260, "funcdef", 0, 6, states_4, "\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000"}, {261, "parameters", 0, 4, states_5, @@ -1033,108 +1030,108 @@ static dfa dfas[51] = { {264, "fplist", 0, 3, states_8, "\000\040\002\000\000\000\000\000\000\000\000\000\000\000\000"}, {265, "stmt", 0, 2, states_9, - "\000\060\002\000\150\370\203\054\000\000\000\140\244\234\000"}, + "\000\060\002\000\320\360\017\144\001\000\000\000\043\345\004"}, {266, "simple_stmt", 0, 4, states_10, - "\000\040\002\000\150\370\003\000\000\000\000\140\244\034\000"}, + "\000\040\002\000\320\360\017\000\000\000\000\000\043\345\000"}, {267, "small_stmt", 0, 2, states_11, - "\000\040\002\000\150\370\003\000\000\000\000\140\244\034\000"}, + "\000\040\002\000\320\360\017\000\000\000\000\000\043\345\000"}, {268, "expr_stmt", 0, 2, states_12, - "\000\040\002\000\000\000\000\000\000\000\000\140\244\034\000"}, + "\000\040\002\000\000\000\000\000\000\000\000\000\043\345\000"}, {269, "print_stmt", 0, 3, states_13, - "\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000"}, {270, "del_stmt", 0, 3, states_14, - "\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000"}, - {271, "pass_stmt", 0, 2, states_15, "\000\000\000\000\100\000\000\000\000\000\000\000\000\000\000"}, + {271, "pass_stmt", 0, 2, states_15, + "\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000"}, {272, "flow_stmt", 0, 2, states_16, - "\000\000\000\000\000\170\000\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\360\000\000\000\000\000\000\000\000\000"}, {273, "break_stmt", 0, 2, states_17, - "\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"}, - {274, "continue_stmt", 0, 2, states_18, "\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000"}, - {275, "return_stmt", 0, 3, states_19, + {274, "continue_stmt", 0, 2, states_18, "\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000"}, - {276, "raise_stmt", 0, 5, states_20, + {275, "return_stmt", 0, 3, states_19, "\000\000\000\000\000\100\000\000\000\000\000\000\000\000\000"}, + {276, "raise_stmt", 0, 5, states_20, + "\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000"}, {277, "import_stmt", 0, 9, states_21, - "\000\000\000\000\000\200\001\000\000\000\000\000\000\000\000"}, + "\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000"}, {278, "global_stmt", 0, 3, states_22, - "\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"}, - {279, "compound_stmt", 0, 2, states_23, - "\000\020\000\000\000\000\200\054\000\000\000\000\000\200\000"}, - {280, "if_stmt", 0, 8, states_24, - "\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000"}, - {281, "while_stmt", 0, 8, states_25, + "\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000"}, + {279, "access_stmt", 0, 5, states_23, + "\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000"}, + {280, "accesstype", 0, 2, states_24, + "\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000"}, + {281, "compound_stmt", 0, 2, states_25, + "\000\020\000\000\000\000\000\144\001\000\000\000\000\000\004"}, + {282, "if_stmt", 0, 8, states_26, "\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000"}, - {282, "for_stmt", 0, 10, states_26, - "\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000"}, - {283, "try_stmt", 0, 10, states_27, + {283, "while_stmt", 0, 8, states_27, "\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000"}, - {284, "except_clause", 0, 5, states_28, + {284, "for_stmt", 0, 10, states_28, + "\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000"}, + {285, "try_stmt", 0, 10, states_29, "\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000"}, - {285, "suite", 0, 5, states_29, - "\004\040\002\000\150\370\003\000\000\000\000\140\244\034\000"}, - {286, "test", 0, 2, states_30, - "\000\040\002\000\000\000\000\000\200\000\000\140\244\034\000"}, - {287, "and_test", 0, 2, states_31, - "\000\040\002\000\000\000\000\000\200\000\000\140\244\034\000"}, - {288, "not_test", 0, 3, states_32, - "\000\040\002\000\000\000\000\000\200\000\000\140\244\034\000"}, - {289, "comparison", 0, 2, states_33, - "\000\040\002\000\000\000\000\000\000\000\000\140\244\034\000"}, - {290, "comp_op", 0, 4, states_34, - "\000\000\000\000\000\000\000\020\200\370\007\000\000\000\000"}, - {291, "expr", 0, 2, states_35, - "\000\040\002\000\000\000\000\000\000\000\000\140\244\034\000"}, - {292, "xor_expr", 0, 2, states_36, - "\000\040\002\000\000\000\000\000\000\000\000\140\244\034\000"}, - {293, "and_expr", 0, 2, states_37, - "\000\040\002\000\000\000\000\000\000\000\000\140\244\034\000"}, - {294, "shift_expr", 0, 2, states_38, - "\000\040\002\000\000\000\000\000\000\000\000\140\244\034\000"}, - {295, "arith_expr", 0, 2, states_39, - "\000\040\002\000\000\000\000\000\000\000\000\140\244\034\000"}, - {296, "term", 0, 2, states_40, - "\000\040\002\000\000\000\000\000\000\000\000\140\244\034\000"}, - {297, "factor", 0, 4, states_41, - "\000\040\002\000\000\000\000\000\000\000\000\140\244\034\000"}, - {298, "atom", 0, 10, states_42, - "\000\040\002\000\000\000\000\000\000\000\000\000\240\034\000"}, - {299, "trailer", 0, 7, states_43, - "\000\000\002\000\000\000\000\000\000\000\000\000\040\100\000"}, - {300, "subscript", 0, 4, states_44, - "\000\240\002\000\000\000\000\000\200\000\000\140\244\034\000"}, - {301, "exprlist", 0, 3, states_45, - "\000\040\002\000\000\000\000\000\000\000\000\140\244\034\000"}, - {302, "testlist", 0, 3, states_46, - "\000\040\002\000\000\000\000\000\200\000\000\140\244\034\000"}, - {303, "dictmaker", 0, 5, states_47, - "\000\040\002\000\000\000\000\000\200\000\000\140\244\034\000"}, - {304, "classdef", 0, 10, states_48, - "\000\000\000\000\000\000\000\000\000\000\000\000\000\200\000"}, - {305, "baselist", 0, 3, states_49, - "\000\040\002\000\000\000\000\000\000\000\000\000\240\034\000"}, - {306, "arguments", 0, 3, states_50, - "\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000"}, -}; -static label labels[114] = { + {286, "except_clause", 0, 5, states_30, + "\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000"}, + {287, "suite", 0, 5, states_31, + "\004\040\002\000\320\360\017\000\000\000\000\000\043\345\000"}, + {288, "test", 0, 2, states_32, + "\000\040\002\000\000\000\000\000\000\004\000\000\043\345\000"}, + {289, "and_test", 0, 2, states_33, + "\000\040\002\000\000\000\000\000\000\004\000\000\043\345\000"}, + {290, "not_test", 0, 3, states_34, + "\000\040\002\000\000\000\000\000\000\004\000\000\043\345\000"}, + {291, "comparison", 0, 2, states_35, + "\000\040\002\000\000\000\000\000\000\000\000\000\043\345\000"}, + {292, "comp_op", 0, 4, states_36, + "\000\000\000\000\000\000\000\200\000\304\077\000\000\000\000"}, + {293, "expr", 0, 2, states_37, + "\000\040\002\000\000\000\000\000\000\000\000\000\043\345\000"}, + {294, "xor_expr", 0, 2, states_38, + "\000\040\002\000\000\000\000\000\000\000\000\000\043\345\000"}, + {295, "and_expr", 0, 2, states_39, + "\000\040\002\000\000\000\000\000\000\000\000\000\043\345\000"}, + {296, "shift_expr", 0, 2, states_40, + "\000\040\002\000\000\000\000\000\000\000\000\000\043\345\000"}, + {297, "arith_expr", 0, 2, states_41, + "\000\040\002\000\000\000\000\000\000\000\000\000\043\345\000"}, + {298, "term", 0, 2, states_42, + "\000\040\002\000\000\000\000\000\000\000\000\000\043\345\000"}, + {299, "factor", 0, 4, states_43, + "\000\040\002\000\000\000\000\000\000\000\000\000\043\345\000"}, + {300, "atom", 0, 10, states_44, + "\000\040\002\000\000\000\000\000\000\000\000\000\000\345\000"}, + {301, "trailer", 0, 7, states_45, + "\000\000\002\000\000\000\000\000\000\000\000\000\000\001\002"}, + {302, "subscript", 0, 4, states_46, + "\000\240\002\000\000\000\000\000\000\004\000\000\043\345\000"}, + {303, "exprlist", 0, 3, states_47, + "\000\040\002\000\000\000\000\000\000\000\000\000\043\345\000"}, + {304, "testlist", 0, 3, states_48, + "\000\040\002\000\000\000\000\000\000\004\000\000\043\345\000"}, + {305, "dictmaker", 0, 5, states_49, + "\000\040\002\000\000\000\000\000\000\004\000\000\043\345\000"}, + {306, "classdef", 0, 8, states_50, + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004"}, +}; +static label labels[115] = { {0, "EMPTY"}, {256, 0}, {4, 0}, {266, 0}, - {279, 0}, + {281, 0}, {257, 0}, {265, 0}, {0, 0}, {258, 0}, - {302, 0}, + {304, 0}, {259, 0}, {260, 0}, {1, "def"}, {1, 0}, {261, 0}, {11, 0}, - {285, 0}, + {287, 0}, {7, 0}, {262, 0}, {8, 0}, @@ -1151,10 +1148,11 @@ static label labels[114] = { {272, 0}, {277, 0}, {278, 0}, - {301, 0}, + {279, 0}, + {303, 0}, {22, 0}, {1, "print"}, - {286, 0}, + {288, 0}, {1, "del"}, {1, "pass"}, {273, 0}, @@ -1168,11 +1166,13 @@ static label labels[114] = { {1, "import"}, {1, "from"}, {1, "global"}, + {1, "access"}, {280, 0}, - {281, 0}, {282, 0}, {283, 0}, - {304, 0}, + {284, 0}, + {285, 0}, + {306, 0}, {1, "if"}, {1, "elif"}, {1, "else"}, @@ -1180,19 +1180,19 @@ static label labels[114] = { {1, "for"}, {1, "in"}, {1, "try"}, - {284, 0}, + {286, 0}, {1, "finally"}, {1, "except"}, {5, 0}, {6, 0}, - {287, 0}, + {289, 0}, {1, "or"}, - {288, 0}, + {290, 0}, {1, "and"}, {1, "not"}, - {289, 0}, {291, 0}, - {290, 0}, + {293, 0}, + {292, 0}, {20, 0}, {21, 0}, {28, 0}, @@ -1201,41 +1201,39 @@ static label labels[114] = { {29, 0}, {29, 0}, {1, "is"}, - {292, 0}, + {294, 0}, {18, 0}, - {293, 0}, + {295, 0}, {33, 0}, - {294, 0}, + {296, 0}, {19, 0}, - {295, 0}, + {297, 0}, {34, 0}, {35, 0}, - {296, 0}, + {298, 0}, {14, 0}, {15, 0}, - {297, 0}, + {299, 0}, {17, 0}, {24, 0}, {32, 0}, - {298, 0}, - {299, 0}, + {300, 0}, + {301, 0}, {9, 0}, {10, 0}, {26, 0}, - {303, 0}, + {305, 0}, {27, 0}, {25, 0}, {2, 0}, {3, 0}, - {300, 0}, + {302, 0}, {23, 0}, {1, "class"}, - {305, 0}, - {306, 0}, }; grammar gram = { 51, dfas, - {114, labels}, + {115, labels}, 256 }; diff --git a/Python/import.c b/Python/import.c index 4310afa..ec21b4c 100644 --- a/Python/import.c +++ b/Python/import.c @@ -54,7 +54,7 @@ extern char *argv0; /* Magic word to reject .pyc files generated by other Python versions */ -#define MAGIC 0x99BE3AL +#define MAGIC 0x999901L /* Increment by one for each incompatible change */ static object *modules; @@ -353,46 +353,27 @@ reload_module(m) return get_module(m, getmodulename(m), (object **)NULL); } -static void -cleardict(d) - object *d; -{ - int i; - for (i = getdictsize(d); --i >= 0; ) { - char *k; - k = getdictkey(d, i); - if (k != NULL) - (void) dictremove(d, k); - } -} - void doneimport() { if (modules != NULL) { - int i; + int pos; + object *modname, *module; /* Explicitly erase all modules; this is the safest way to get rid of at least *some* circular dependencies */ - for (i = getdictsize(modules); --i >= 0; ) { - object *k; - k = getdict2key(modules, i); - if (k != NULL) { - object *m; - m = dict2lookup(modules, k); - if (m == NULL) - err_clear(); - else if (is_moduleobject(m)) { - object *d; - d = getmoduledict(m); - if (d != NULL && is_dictobject(d)) { - cleardict(d); - } - } + pos = 0; + while (mappinggetnext(modules, &pos, &modname, &module)) { + if (is_moduleobject(module)) { + object *dict; + dict = getmoduledict(module); + if (dict != NULL && is_dictobject(dict)) + mappingclear(dict); } } - cleardict(modules); + mappingclear(modules); } DECREF(modules); + modules = NULL; } diff --git a/Python/marshal.c b/Python/marshal.c index 3853ff9..93503d1 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -174,17 +174,14 @@ w_object(v, p) } } else if (is_dictobject(v)) { + int pos; + object *key, *value; w_byte(TYPE_DICT, p); /* This one is NULL object terminated! */ - n = getdictsize(v); - for (i = 0; i < n; i++) { - object *key, *val; - key = getdict2key(v, (int)i); - if (key != NULL) { - val = dict2lookup(v, key); /* Can't be NULL */ - w_object(key, p); - w_object(val, p); - } + pos = 0; + while (mappinggetnext(v, &pos, &key, &value)) { + w_object(key, p); + w_object(value, p); } w_object((object *)NULL, p); } |