Mercurial > cpython-lru_cache-weakref
annotate Modules/parsermodule.c @ 78088:eaafae4e275e
Null merge
| author | Antoine Pitrou <solipsis@pitrou.net> |
|---|---|
| date | Fri, 13 Jul 2012 21:14:03 +0200 |
| parents | d50577c5711b |
| children | f7248550059c |
| rev | line source |
|---|---|
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1 /* parsermodule.c |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2 * |
| 4084 | 3 * Copyright 1995-1996 by Fred L. Drake, Jr. and Virginia Polytechnic |
| 4 * Institute and State University, Blacksburg, Virginia, USA. | |
| 5 * Portions copyright 1991-1995 by Stichting Mathematisch Centrum, | |
| 6 * Amsterdam, The Netherlands. Copying is permitted under the terms | |
| 7 * associated with the main Python distribution, with the additional | |
| 8 * restriction that this additional notice be included and maintained | |
| 9 * on all distributed copies. | |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
10 * |
| 4084 | 11 * This module serves to replace the original parser module written |
| 12 * by Guido. The functionality is not matched precisely, but the | |
| 13 * original may be implemented on top of this. This is desirable | |
| 14 * since the source of the text to be parsed is now divorced from | |
| 15 * this interface. | |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
16 * |
| 4084 | 17 * Unlike the prior interface, the ability to give a parse tree |
| 18 * produced by Python code as a tuple to the compiler is enabled by | |
| 19 * this module. See the documentation for more details. | |
| 8196 | 20 * |
| 21 * I've added some annotations that help with the lint code-checking | |
| 22 * program, but they're not complete by a long shot. The real errors | |
| 23 * that lint detects are gone, but there are still warnings with | |
| 24 * Py_[X]DECREF() and Py_[X]INCREF() macros. The lint annotations | |
| 25 * look like "NOTE(...)". | |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
26 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
27 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
28 #include "Python.h" /* general Python API */ |
|
49624
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
29 #include "Python-ast.h" /* mod_ty */ |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
30 #include "graminit.h" /* symbols defined in the grammar */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
31 #include "node.h" /* internal parser structure */ |
|
21237
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
32 #include "errcode.h" /* error codes for PyNode_*() */ |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
33 #include "token.h" /* token definitions */ |
|
49624
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
34 #include "grammar.h" |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
35 #include "parsetok.h" |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
36 /* ISTERMINAL() / ISNONTERMINAL() */ |
|
49624
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
37 #undef Yield |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
38 #include "ast.h" |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
39 |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
40 extern grammar _PyParser_Grammar; /* From graminit.c */ |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
41 |
| 8196 | 42 #ifdef lint |
| 43 #include <note.h> | |
| 44 #else | |
| 45 #define NOTE(x) | |
| 46 #endif | |
| 47 | |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
48 /* String constants used to initialize module attributes. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
49 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
50 */ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23538
diff
changeset
|
51 static char parser_copyright_string[] = |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23538
diff
changeset
|
52 "Copyright 1995-1996 by Virginia Polytechnic Institute & State\n\ |
|
4099
3a3b36716689
Patches to make it compile with K&R C
Guido van Rossum <guido@python.org>
parents:
4092
diff
changeset
|
53 University, Blacksburg, Virginia, USA, and Fred L. Drake, Jr., Reston,\n\ |
|
3a3b36716689
Patches to make it compile with K&R C
Guido van Rossum <guido@python.org>
parents:
4092
diff
changeset
|
54 Virginia, USA. Portions copyright 1991-1995 by Stichting Mathematisch\n\ |
|
3a3b36716689
Patches to make it compile with K&R C
Guido van Rossum <guido@python.org>
parents:
4092
diff
changeset
|
55 Centrum, Amsterdam, The Netherlands."; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
56 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
57 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23538
diff
changeset
|
58 PyDoc_STRVAR(parser_doc_string, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23538
diff
changeset
|
59 "This is an interface to Python's internal parser."); |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23538
diff
changeset
|
60 |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23538
diff
changeset
|
61 static char parser_version_string[] = "0.5"; |
| 4084 | 62 |
| 63 | |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
64 typedef PyObject* (*SeqMaker) (Py_ssize_t length); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
65 typedef int (*SeqInserter) (PyObject* sequence, |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
66 Py_ssize_t index, |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
67 PyObject* element); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
68 |
|
13620
5b727ab37092
Spelling fixes supplied by Rob W. W. Hooft. All these are fixes in either
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
69 /* The function below is copyrighted by Stichting Mathematisch Centrum. The |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
70 * original copyright statement is included below, and continues to apply |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
71 * in full to the function immediately following. All other material is |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
72 * original, copyrighted by Fred L. Drake, Jr. and Virginia Polytechnic |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
73 * Institute and State University. Changes were made to comply with the |
|
4099
3a3b36716689
Patches to make it compile with K&R C
Guido van Rossum <guido@python.org>
parents:
4092
diff
changeset
|
74 * new naming conventions. Added arguments to provide support for creating |
|
3a3b36716689
Patches to make it compile with K&R C
Guido van Rossum <guido@python.org>
parents:
4092
diff
changeset
|
75 * lists as well as tuples, and optionally including the line numbers. |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
76 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
77 |
|
1406
474823e5f7dc
* parsermodule.c, Makefile, config.c: rudimentary interface to the Python
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
78 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
79 static PyObject* |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
80 node2tuple(node *n, /* node to convert */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
81 SeqMaker mkseq, /* create sequence */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
82 SeqInserter addelem, /* func. to add elem. in seq. */ |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
83 int lineno, /* include line numbers? */ |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
84 int col_offset) /* include column offsets? */ |
| 4084 | 85 { |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
86 if (n == NULL) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
87 Py_INCREF(Py_None); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
88 return (Py_None); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
89 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
90 if (ISNONTERMINAL(TYPE(n))) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
91 int i; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
92 PyObject *v; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
93 PyObject *w; |
| 8196 | 94 |
|
26979
784e7fdf8c52
SF patch [ 597919 ] compiler package and SET_LINENO
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24796
diff
changeset
|
95 v = mkseq(1 + NCH(n) + (TYPE(n) == encoding_decl)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
96 if (v == NULL) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
97 return (v); |
|
44099
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
43862
diff
changeset
|
98 w = PyLong_FromLong(TYPE(n)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
99 if (w == NULL) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
100 Py_DECREF(v); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
101 return ((PyObject*) NULL); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
102 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
103 (void) addelem(v, 0, w); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
104 for (i = 0; i < NCH(n); i++) { |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
105 w = node2tuple(CHILD(n, i), mkseq, addelem, lineno, col_offset); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
106 if (w == NULL) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
107 Py_DECREF(v); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
108 return ((PyObject*) NULL); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
109 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
110 (void) addelem(v, i+1, w); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
111 } |
|
29952
1cbc6b7836dc
Merge 23c1-branch back into the head. Barry will send email about the
Tim Peters <tim.peters@gmail.com>
parents:
28551
diff
changeset
|
112 |
|
26979
784e7fdf8c52
SF patch [ 597919 ] compiler package and SET_LINENO
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24796
diff
changeset
|
113 if (TYPE(n) == encoding_decl) |
|
42856
f3b3ffd13954
Use unicode and remove support for some uses of str8.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42535
diff
changeset
|
114 (void) addelem(v, i+1, PyUnicode_FromString(STR(n))); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
115 return (v); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
116 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
117 else if (ISTERMINAL(TYPE(n))) { |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
118 PyObject *result = mkseq(2 + lineno + col_offset); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
119 if (result != NULL) { |
|
44099
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
43862
diff
changeset
|
120 (void) addelem(result, 0, PyLong_FromLong(TYPE(n))); |
|
42856
f3b3ffd13954
Use unicode and remove support for some uses of str8.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42535
diff
changeset
|
121 (void) addelem(result, 1, PyUnicode_FromString(STR(n))); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
122 if (lineno == 1) |
|
44099
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
43862
diff
changeset
|
123 (void) addelem(result, 2, PyLong_FromLong(n->n_lineno)); |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
124 if (col_offset == 1) |
|
44099
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
43862
diff
changeset
|
125 (void) addelem(result, 3, PyLong_FromLong(n->n_col_offset)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
126 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
127 return (result); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
128 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
129 else { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
130 PyErr_SetString(PyExc_SystemError, |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
131 "unrecognized parse tree node type"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
132 return ((PyObject*) NULL); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
133 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
134 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
135 /* |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
136 * End of material copyrighted by Stichting Mathematisch Centrum. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
137 */ |
|
1406
474823e5f7dc
* parsermodule.c, Makefile, config.c: rudimentary interface to the Python
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
138 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
139 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
140 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
141 /* There are two types of intermediate objects we're interested in: |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
142 * 'eval' and 'exec' types. These constants can be used in the st_type |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
143 * field of the object type to identify which any given object represents. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
144 * These should probably go in an external header to allow other extensions |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
145 * to use them, but then, we really should be using C++ too. ;-) |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
146 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
147 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
148 #define PyST_EXPR 1 |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
149 #define PyST_SUITE 2 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
150 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
151 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
152 /* These are the internal objects and definitions required to implement the |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
153 * ST type. Most of the internal names are more reminiscent of the 'old' |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
154 * naming style, but the code uses the new naming convention. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
155 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
156 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
157 static PyObject* |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
158 parser_error = 0; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
159 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
160 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
161 typedef struct { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
162 PyObject_HEAD /* standard object header */ |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
163 node* st_node; /* the node* returned by the parser */ |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
164 int st_type; /* EXPR or SUITE ? */ |
|
49624
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
165 PyCompilerFlags st_flags; /* Parser and compiler flags */ |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
166 } PyST_Object; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
167 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
168 |
|
24280
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
169 static void parser_free(PyST_Object *st); |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
170 static PyObject* parser_richcompare(PyObject *left, PyObject *right, int op); |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
171 static PyObject* parser_compilest(PyST_Object *, PyObject *, PyObject *); |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
172 static PyObject* parser_isexpr(PyST_Object *, PyObject *, PyObject *); |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
173 static PyObject* parser_issuite(PyST_Object *, PyObject *, PyObject *); |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
174 static PyObject* parser_st2list(PyST_Object *, PyObject *, PyObject *); |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
175 static PyObject* parser_st2tuple(PyST_Object *, PyObject *, PyObject *); |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
176 |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
177 #define PUBLIC_METHOD_TYPE (METH_VARARGS|METH_KEYWORDS) |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
178 |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
179 static PyMethodDef parser_methods[] = { |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
180 {"compile", (PyCFunction)parser_compilest, PUBLIC_METHOD_TYPE, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
181 PyDoc_STR("Compile this ST object into a code object.")}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
182 {"isexpr", (PyCFunction)parser_isexpr, PUBLIC_METHOD_TYPE, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
183 PyDoc_STR("Determines if this ST object was created from an expression.")}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
184 {"issuite", (PyCFunction)parser_issuite, PUBLIC_METHOD_TYPE, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
185 PyDoc_STR("Determines if this ST object was created from a suite.")}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
186 {"tolist", (PyCFunction)parser_st2list, PUBLIC_METHOD_TYPE, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
187 PyDoc_STR("Creates a list-tree representation of this ST.")}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
188 {"totuple", (PyCFunction)parser_st2tuple, PUBLIC_METHOD_TYPE, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
189 PyDoc_STR("Creates a tuple-tree representation of this ST.")}, |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
190 |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
191 {NULL, NULL, 0, NULL} |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
192 }; |
| 8196 | 193 |
| 194 static | |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
195 PyTypeObject PyST_Type = { |
|
42334
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
41824
diff
changeset
|
196 PyVarObject_HEAD_INIT(NULL, 0) |
|
21313
91dd223829c6
Patch supplied by Burton Radons for his own SF bug #487390: Modifying
Guido van Rossum <guido@python.org>
parents:
21237
diff
changeset
|
197 "parser.st", /* tp_name */ |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
198 (int) sizeof(PyST_Object), /* tp_basicsize */ |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
199 0, /* tp_itemsize */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
200 (destructor)parser_free, /* tp_dealloc */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
201 0, /* tp_print */ |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
202 0, /* tp_getattr */ |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
203 0, /* tp_setattr */ |
|
51271
87fbbf22adf3
Merged revisions 69214 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
51244
diff
changeset
|
204 0, /* tp_reserved */ |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
205 0, /* tp_repr */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
206 0, /* tp_as_number */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
207 0, /* tp_as_sequence */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
208 0, /* tp_as_mapping */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
209 0, /* tp_hash */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
210 0, /* tp_call */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
211 0, /* tp_str */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
212 0, /* tp_getattro */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
213 0, /* tp_setattro */ |
|
5613
190e35bbc15a
Add doc string to type object.
Fred Drake <fdrake@acm.org>
parents:
5236
diff
changeset
|
214 |
|
190e35bbc15a
Add doc string to type object.
Fred Drake <fdrake@acm.org>
parents:
5236
diff
changeset
|
215 /* Functions to access object as input/output buffer */ |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
216 0, /* tp_as_buffer */ |
|
5613
190e35bbc15a
Add doc string to type object.
Fred Drake <fdrake@acm.org>
parents:
5236
diff
changeset
|
217 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
218 Py_TPFLAGS_DEFAULT, /* tp_flags */ |
|
5613
190e35bbc15a
Add doc string to type object.
Fred Drake <fdrake@acm.org>
parents:
5236
diff
changeset
|
219 |
|
190e35bbc15a
Add doc string to type object.
Fred Drake <fdrake@acm.org>
parents:
5236
diff
changeset
|
220 /* __doc__ */ |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
221 "Intermediate representation of a Python parse tree.", |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
222 0, /* tp_traverse */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
223 0, /* tp_clear */ |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
224 parser_richcompare, /* tp_richcompare */ |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
225 0, /* tp_weaklistoffset */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
226 0, /* tp_iter */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
227 0, /* tp_iternext */ |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
228 parser_methods, /* tp_methods */ |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
229 }; /* PyST_Type */ |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
230 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
231 |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
232 /* PyST_Type isn't subclassable, so just check ob_type */ |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
233 #define PyST_Object_Check(v) ((v)->ob_type == &PyST_Type) |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
234 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
235 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
236 parser_compare_nodes(node *left, node *right) |
| 4084 | 237 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
238 int j; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
239 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
240 if (TYPE(left) < TYPE(right)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
241 return (-1); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
242 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
243 if (TYPE(right) < TYPE(left)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
244 return (1); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
245 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
246 if (ISTERMINAL(TYPE(left))) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
247 return (strcmp(STR(left), STR(right))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
248 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
249 if (NCH(left) < NCH(right)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
250 return (-1); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
251 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
252 if (NCH(right) < NCH(left)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
253 return (1); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
254 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
255 for (j = 0; j < NCH(left); ++j) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
256 int v = parser_compare_nodes(CHILD(left, j), CHILD(right, j)); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
257 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
258 if (v != 0) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
259 return (v); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
260 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
261 return (0); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
262 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
263 |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
264 /* parser_richcompare(PyObject* left, PyObject* right, int op) |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
265 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
266 * Comparison function used by the Python operators ==, !=, <, >, <=, >= |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
267 * This really just wraps a call to parser_compare_nodes() with some easy |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
268 * checks and protection code. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
269 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
270 */ |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
271 |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
272 #define TEST_COND(cond) ((cond) ? Py_True : Py_False) |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
273 |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
274 static PyObject * |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
275 parser_richcompare(PyObject *left, PyObject *right, int op) |
| 4084 | 276 { |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
277 int result; |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
278 PyObject *v; |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
279 |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
280 /* neither argument should be NULL, unless something's gone wrong */ |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
281 if (left == NULL || right == NULL) { |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
282 PyErr_BadInternalCall(); |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
283 return NULL; |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
284 } |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
285 |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
286 /* both arguments should be instances of PyST_Object */ |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
287 if (!PyST_Object_Check(left) || !PyST_Object_Check(right)) { |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
288 v = Py_NotImplemented; |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
289 goto finished; |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
290 } |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
291 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
292 if (left == right) |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
293 /* if arguments are identical, they're equal */ |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
294 result = 0; |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
295 else |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
296 result = parser_compare_nodes(((PyST_Object *)left)->st_node, |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
297 ((PyST_Object *)right)->st_node); |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
298 |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
299 /* Convert return value to a Boolean */ |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
300 switch (op) { |
|
74356
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
301 case Py_EQ: |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
302 v = TEST_COND(result == 0); |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
303 break; |
|
74356
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
304 case Py_NE: |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
305 v = TEST_COND(result != 0); |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
306 break; |
|
74356
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
307 case Py_LE: |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
308 v = TEST_COND(result <= 0); |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
309 break; |
|
74356
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
310 case Py_GE: |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
311 v = TEST_COND(result >= 0); |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
312 break; |
|
74356
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
313 case Py_LT: |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
314 v = TEST_COND(result < 0); |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
315 break; |
|
74356
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
316 case Py_GT: |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
317 v = TEST_COND(result > 0); |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
318 break; |
|
74356
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
319 default: |
|
51244
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
320 PyErr_BadArgument(); |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
321 return NULL; |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
322 } |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
323 finished: |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
324 Py_INCREF(v); |
|
e9675d72e3e3
Merged revisions 69181 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
50079
diff
changeset
|
325 return v; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
326 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
327 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
328 /* parser_newstobject(node* st) |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
329 * |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
330 * Allocates a new Python object representing an ST. This is simply the |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
331 * 'wrapper' object that holds a node* and allows it to be passed around in |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
332 * Python code. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
333 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
334 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
335 static PyObject* |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
336 parser_newstobject(node *st, int type) |
| 4084 | 337 { |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
338 PyST_Object* o = PyObject_New(PyST_Object, &PyST_Type); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
339 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
340 if (o != 0) { |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
341 o->st_node = st; |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
342 o->st_type = type; |
|
49624
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
343 o->st_flags.cf_flags = 0; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
344 } |
| 8196 | 345 else { |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
346 PyNode_Free(st); |
| 8196 | 347 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
348 return ((PyObject*)o); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
349 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
350 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
351 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
352 /* void parser_free(PyST_Object* st) |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
353 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
354 * This is called by a del statement that reduces the reference count to 0. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
355 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
356 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
357 static void |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
358 parser_free(PyST_Object *st) |
| 4084 | 359 { |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
360 PyNode_Free(st->st_node); |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
361 PyObject_Del(st); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
362 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
363 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
364 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
365 /* parser_st2tuple(PyObject* self, PyObject* args, PyObject* kw) |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
366 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
367 * This provides conversion from a node* to a tuple object that can be |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
368 * returned to the Python-level caller. The ST object is not modified. |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
369 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
370 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
371 static PyObject* |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
372 parser_st2tuple(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 373 { |
| 374 PyObject *line_option = 0; | |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
375 PyObject *col_option = 0; |
| 4084 | 376 PyObject *res = 0; |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
377 int ok; |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
378 |
|
48558
fcbd9f4f095c
Remove "ast" aliases from the parser module.
Georg Brandl <georg@python.org>
parents:
48413
diff
changeset
|
379 static char *keywords[] = {"st", "line_info", "col_info", NULL}; |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
380 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
46867
diff
changeset
|
381 if (self == NULL || PyModule_Check(self)) { |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
382 ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|OO:st2tuple", keywords, |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
383 &PyST_Type, &self, &line_option, |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
384 &col_option); |
| 8196 | 385 } |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
386 else |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
387 ok = PyArg_ParseTupleAndKeywords(args, kw, "|OO:totuple", &keywords[1], |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
388 &line_option, &col_option); |
| 8196 | 389 if (ok != 0) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
390 int lineno = 0; |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
391 int col_offset = 0; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
392 if (line_option != NULL) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
393 lineno = (PyObject_IsTrue(line_option) != 0) ? 1 : 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
394 } |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
395 if (col_option != NULL) { |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
396 col_offset = (PyObject_IsTrue(col_option) != 0) ? 1 : 0; |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
397 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
398 /* |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
399 * Convert ST into a tuple representation. Use Guido's function, |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
400 * since it's known to work already. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
401 */ |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
402 res = node2tuple(((PyST_Object*)self)->st_node, |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
403 PyTuple_New, PyTuple_SetItem, lineno, col_offset); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
404 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
405 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
406 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
407 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
408 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
409 /* parser_st2list(PyObject* self, PyObject* args, PyObject* kw) |
| 4084 | 410 * |
|
11297
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
411 * This provides conversion from a node* to a list object that can be |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
412 * returned to the Python-level caller. The ST object is not modified. |
| 4084 | 413 * |
| 414 */ | |
| 415 static PyObject* | |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
416 parser_st2list(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 417 { |
| 418 PyObject *line_option = 0; | |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
419 PyObject *col_option = 0; |
| 4084 | 420 PyObject *res = 0; |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
421 int ok; |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
422 |
|
48558
fcbd9f4f095c
Remove "ast" aliases from the parser module.
Georg Brandl <georg@python.org>
parents:
48413
diff
changeset
|
423 static char *keywords[] = {"st", "line_info", "col_info", NULL}; |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
424 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
46867
diff
changeset
|
425 if (self == NULL || PyModule_Check(self)) |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
426 ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|OO:st2list", keywords, |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
427 &PyST_Type, &self, &line_option, |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
428 &col_option); |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
429 else |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
430 ok = PyArg_ParseTupleAndKeywords(args, kw, "|OO:tolist", &keywords[1], |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
431 &line_option, &col_option); |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
432 if (ok) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
433 int lineno = 0; |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
434 int col_offset = 0; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
435 if (line_option != 0) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
436 lineno = PyObject_IsTrue(line_option) ? 1 : 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
437 } |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
438 if (col_option != NULL) { |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
439 col_offset = (PyObject_IsTrue(col_option) != 0) ? 1 : 0; |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
440 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
441 /* |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
442 * Convert ST into a tuple representation. Use Guido's function, |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
443 * since it's known to work already. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
444 */ |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
445 res = node2tuple(self->st_node, |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
446 PyList_New, PyList_SetItem, lineno, col_offset); |
| 4084 | 447 } |
| 448 return (res); | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
449 } |
| 4084 | 450 |
| 451 | |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
452 /* parser_compilest(PyObject* self, PyObject* args) |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
453 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
454 * This function creates code objects from the parse tree represented by |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
455 * the passed-in data object. An optional file name is passed in as well. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
456 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
457 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
458 static PyObject* |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
459 parser_compilest(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 460 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
461 PyObject* res = 0; |
|
49624
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
462 PyArena* arena; |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
463 mod_ty mod; |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
464 char* str = "<syntax-tree>"; |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
465 int ok; |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
466 |
|
48558
fcbd9f4f095c
Remove "ast" aliases from the parser module.
Georg Brandl <georg@python.org>
parents:
48413
diff
changeset
|
467 static char *keywords[] = {"st", "filename", NULL}; |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
468 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
46867
diff
changeset
|
469 if (self == NULL || PyModule_Check(self)) |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
470 ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|s:compilest", keywords, |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
471 &PyST_Type, &self, &str); |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
472 else |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
473 ok = PyArg_ParseTupleAndKeywords(args, kw, "|s:compile", &keywords[1], |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
474 &str); |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
475 |
|
49624
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
476 if (ok) { |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
477 arena = PyArena_New(); |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
478 if (arena) { |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
479 mod = PyAST_FromNode(self->st_node, &(self->st_flags), str, arena); |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
480 if (mod) { |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
481 res = (PyObject *)PyAST_Compile(mod, str, &(self->st_flags), arena); |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
482 } |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
483 PyArena_Free(arena); |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
484 } |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
485 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
486 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
487 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
488 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
489 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
490 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
491 /* PyObject* parser_isexpr(PyObject* self, PyObject* args) |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
492 * PyObject* parser_issuite(PyObject* self, PyObject* args) |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
493 * |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
494 * Checks the passed-in ST object to determine if it is an expression or |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
495 * a statement suite, respectively. The return is a Python truth value. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
496 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
497 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
498 static PyObject* |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
499 parser_isexpr(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 500 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
501 PyObject* res = 0; |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
502 int ok; |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
503 |
|
48558
fcbd9f4f095c
Remove "ast" aliases from the parser module.
Georg Brandl <georg@python.org>
parents:
48413
diff
changeset
|
504 static char *keywords[] = {"st", NULL}; |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
505 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
46867
diff
changeset
|
506 if (self == NULL || PyModule_Check(self)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
507 ok = PyArg_ParseTupleAndKeywords(args, kw, "O!:isexpr", keywords, |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
508 &PyST_Type, &self); |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
509 else |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
510 ok = PyArg_ParseTupleAndKeywords(args, kw, ":isexpr", &keywords[1]); |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
511 |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
512 if (ok) { |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
513 /* Check to see if the ST represents an expression or not. */ |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
514 res = (self->st_type == PyST_EXPR) ? Py_True : Py_False; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
515 Py_INCREF(res); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
516 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
517 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
518 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
519 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
520 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
521 static PyObject* |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
522 parser_issuite(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 523 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
524 PyObject* res = 0; |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
525 int ok; |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
526 |
|
48558
fcbd9f4f095c
Remove "ast" aliases from the parser module.
Georg Brandl <georg@python.org>
parents:
48413
diff
changeset
|
527 static char *keywords[] = {"st", NULL}; |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
528 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
46867
diff
changeset
|
529 if (self == NULL || PyModule_Check(self)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
530 ok = PyArg_ParseTupleAndKeywords(args, kw, "O!:issuite", keywords, |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
531 &PyST_Type, &self); |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
532 else |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
533 ok = PyArg_ParseTupleAndKeywords(args, kw, ":issuite", &keywords[1]); |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
534 |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
535 if (ok) { |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
536 /* Check to see if the ST represents an expression or not. */ |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
537 res = (self->st_type == PyST_EXPR) ? Py_False : Py_True; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
538 Py_INCREF(res); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
539 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
540 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
541 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
542 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
543 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
544 /* err_string(char* message) |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
545 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
546 * Sets the error string for an exception of type ParserError. |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
547 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
548 */ |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
549 static void |
| 13503 | 550 err_string(char *message) |
| 4084 | 551 { |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
552 PyErr_SetString(parser_error, message); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
553 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
554 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
555 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
556 /* PyObject* parser_do_parse(PyObject* args, int type) |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
557 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
558 * Internal function to actually execute the parse and return the result if |
|
26979
784e7fdf8c52
SF patch [ 597919 ] compiler package and SET_LINENO
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24796
diff
changeset
|
559 * successful or set an exception if not. |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
560 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
561 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
562 static PyObject* |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
563 parser_do_parse(PyObject *args, PyObject *kw, char *argspec, int type) |
| 4084 | 564 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
565 char* string = 0; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
566 PyObject* res = 0; |
|
49624
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
567 int flags = 0; |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
568 perrdetail err; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
569 |
| 36680 | 570 static char *keywords[] = {"source", NULL}; |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
571 |
|
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
572 if (PyArg_ParseTupleAndKeywords(args, kw, argspec, keywords, &string)) { |
|
49624
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
573 node* n = PyParser_ParseStringFlagsFilenameEx(string, NULL, |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
574 &_PyParser_Grammar, |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
575 (type == PyST_EXPR) |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
576 ? eval_input : file_input, |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
577 &err, &flags); |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
578 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
579 if (n) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
580 res = parser_newstobject(n, type); |
|
49624
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
581 if (res) |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
582 ((PyST_Object *)res)->st_flags.cf_flags = flags & PyCF_MASK; |
|
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
583 } |
|
70638
3ffd8dea77bf
only clear the parser error if it's set (closes #12264)
Benjamin Peterson <benjamin@python.org>
parents:
69147
diff
changeset
|
584 else { |
|
49624
f3234e43e1fe
Merged revisions 67066 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
585 PyParser_SetError(&err); |
|
70638
3ffd8dea77bf
only clear the parser error if it's set (closes #12264)
Benjamin Peterson <benjamin@python.org>
parents:
69147
diff
changeset
|
586 } |
|
70654
9faa9270457e
always clear parser error
Benjamin Peterson <benjamin@python.org>
parents:
70638
diff
changeset
|
587 PyParser_ClearError(&err); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
588 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
589 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
590 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
591 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
592 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
593 /* PyObject* parser_expr(PyObject* self, PyObject* args) |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
594 * PyObject* parser_suite(PyObject* self, PyObject* args) |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
595 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
596 * External interfaces to the parser itself. Which is called determines if |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
597 * the parser attempts to recognize an expression ('eval' form) or statement |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
598 * suite ('exec' form). The real work is done by parser_do_parse() above. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
599 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
600 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
601 static PyObject* |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
602 parser_expr(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 603 { |
| 8196 | 604 NOTE(ARGUNUSED(self)) |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
605 return (parser_do_parse(args, kw, "s:expr", PyST_EXPR)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
606 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
607 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
608 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
609 static PyObject* |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
610 parser_suite(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 611 { |
| 8196 | 612 NOTE(ARGUNUSED(self)) |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
613 return (parser_do_parse(args, kw, "s:suite", PyST_SUITE)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
614 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
615 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
616 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
617 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
618 /* This is the messy part of the code. Conversion from a tuple to an ST |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
619 * object requires that the input tuple be valid without having to rely on |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
620 * catching an exception from the compiler. This is done to allow the |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
621 * compiler itself to remain fast, since most of its input will come from |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
622 * the parser directly, and therefore be known to be syntactically correct. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
623 * This validation is done to ensure that we don't core dump the compile |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
624 * phase, returning an exception instead. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
625 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
626 * Two aspects can be broken out in this code: creating a node tree from |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
627 * the tuple passed in, and verifying that it is indeed valid. It may be |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
628 * advantageous to expand the number of ST types to include funcdefs and |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
629 * lambdadefs to take advantage of the optimizer, recognizing those STs |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
630 * here. They are not necessary, and not quite as useful in a raw form. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
631 * For now, let's get expressions and suites working reliably. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
632 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
633 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
634 |
|
24280
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
635 static node* build_node_tree(PyObject *tuple); |
|
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
636 static int validate_expr_tree(node *tree); |
|
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
637 static int validate_file_input(node *tree); |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
638 static int validate_encoding_decl(node *tree); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
639 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
640 /* PyObject* parser_tuple2st(PyObject* self, PyObject* args) |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
641 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
642 * This is the public function, called from the Python code. It receives a |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
643 * single tuple object from the caller, and creates an ST object if the |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
644 * tuple can be validated. It does this by checking the first code of the |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
645 * tuple, and, if acceptable, builds the internal representation. If this |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
646 * step succeeds, the internal representation is validated as fully as |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
647 * possible with the various validate_*() routines defined below. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
648 * |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
649 * This function must be changed if support is to be added for PyST_FRAGMENT |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
650 * ST objects. |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
651 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
652 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
653 static PyObject* |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
654 parser_tuple2st(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 655 { |
| 8196 | 656 NOTE(ARGUNUSED(self)) |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
657 PyObject *st = 0; |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
658 PyObject *tuple; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
659 node *tree; |
| 4084 | 660 |
| 36680 | 661 static char *keywords[] = {"sequence", NULL}; |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
662 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
663 if (!PyArg_ParseTupleAndKeywords(args, kw, "O:sequence2st", keywords, |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
664 &tuple)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
665 return (0); |
| 4084 | 666 if (!PySequence_Check(tuple)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
667 PyErr_SetString(PyExc_ValueError, |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
668 "sequence2st() requires a single sequence argument"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
669 return (0); |
| 4084 | 670 } |
| 671 /* | |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
672 * Convert the tree to the internal form before checking it. |
| 4084 | 673 */ |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
674 tree = build_node_tree(tuple); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
675 if (tree != 0) { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
676 int start_sym = TYPE(tree); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
677 if (start_sym == eval_input) { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
678 /* Might be an eval form. */ |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
679 if (validate_expr_tree(tree)) |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
680 st = parser_newstobject(tree, PyST_EXPR); |
|
21237
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
681 else |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
682 PyNode_Free(tree); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
683 } |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
684 else if (start_sym == file_input) { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
685 /* This looks like an exec form so far. */ |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
686 if (validate_file_input(tree)) |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
687 st = parser_newstobject(tree, PyST_SUITE); |
|
21237
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
688 else |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
689 PyNode_Free(tree); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
690 } |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
691 else if (start_sym == encoding_decl) { |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
692 /* This looks like an encoding_decl so far. */ |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
693 if (validate_encoding_decl(tree)) |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
694 st = parser_newstobject(tree, PyST_SUITE); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
695 else |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
696 PyNode_Free(tree); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
697 } |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
698 else { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
699 /* This is a fragment, at best. */ |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
700 PyNode_Free(tree); |
| 15318 | 701 err_string("parse tree does not use a valid start symbol"); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
702 } |
| 4084 | 703 } |
| 704 /* Make sure we throw an exception on all errors. We should never | |
| 705 * get this, but we'd do well to be sure something is done. | |
| 706 */ | |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
707 if (st == NULL && !PyErr_Occurred()) |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
708 err_string("unspecified ST error occurred"); |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
709 |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
710 return st; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
711 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
712 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
713 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
714 /* node* build_node_children() |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
715 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
716 * Iterate across the children of the current non-terminal node and build |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
717 * their structures. If successful, return the root of this portion of |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
718 * the tree, otherwise, 0. Any required exception will be specified already, |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
719 * and no memory will have been deallocated. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
720 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
721 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
722 static node* |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
723 build_node_children(PyObject *tuple, node *root, int *line_num) |
| 4084 | 724 { |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
725 Py_ssize_t len = PyObject_Size(tuple); |
|
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
726 Py_ssize_t i; |
|
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
727 int err; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
728 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
729 for (i = 1; i < len; ++i) { |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
730 /* elem must always be a sequence, however simple */ |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
731 PyObject* elem = PySequence_GetItem(tuple, i); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
732 int ok = elem != NULL; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
733 long type = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
734 char *strn = 0; |
| 4084 | 735 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
736 if (ok) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
737 ok = PySequence_Check(elem); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
738 if (ok) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
739 PyObject *temp = PySequence_GetItem(elem, 0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
740 if (temp == NULL) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
741 ok = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
742 else { |
|
44099
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
43862
diff
changeset
|
743 ok = PyLong_Check(temp); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
744 if (ok) |
|
44099
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
43862
diff
changeset
|
745 type = PyLong_AS_LONG(temp); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
746 Py_DECREF(temp); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
747 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
748 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
749 if (!ok) { |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36786
diff
changeset
|
750 PyObject *err = Py_BuildValue("os", elem, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36786
diff
changeset
|
751 "Illegal node construct."); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36786
diff
changeset
|
752 PyErr_SetObject(parser_error, err); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36786
diff
changeset
|
753 Py_XDECREF(err); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
754 Py_XDECREF(elem); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
755 return (0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
756 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
757 if (ISTERMINAL(type)) { |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
758 Py_ssize_t len = PyObject_Size(elem); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
759 PyObject *temp; |
|
42856
f3b3ffd13954
Use unicode and remove support for some uses of str8.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42535
diff
changeset
|
760 const char *temp_str; |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
761 |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
762 if ((len != 2) && (len != 3)) { |
| 15318 | 763 err_string("terminal nodes must have 2 or 3 entries"); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
764 return 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
765 } |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
766 temp = PySequence_GetItem(elem, 1); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
767 if (temp == NULL) |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
768 return 0; |
|
42856
f3b3ffd13954
Use unicode and remove support for some uses of str8.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42535
diff
changeset
|
769 if (!PyUnicode_Check(temp)) { |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
770 PyErr_Format(parser_error, |
| 15318 | 771 "second item in terminal node must be a string," |
| 772 " found %s", | |
|
44351
86a2679dca46
#1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT.
Christian Heimes <christian@cheimes.de>
parents:
44099
diff
changeset
|
773 Py_TYPE(temp)->tp_name); |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12487
diff
changeset
|
774 Py_DECREF(temp); |
| 42535 | 775 Py_DECREF(elem); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
776 return 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
777 } |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
778 if (len == 3) { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
779 PyObject *o = PySequence_GetItem(elem, 2); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
780 if (o != NULL) { |
|
44099
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
43862
diff
changeset
|
781 if (PyLong_Check(o)) |
|
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
43862
diff
changeset
|
782 *line_num = PyLong_AS_LONG(o); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
783 else { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
784 PyErr_Format(parser_error, |
| 15318 | 785 "third item in terminal node must be an" |
| 786 " integer, found %s", | |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
787 Py_TYPE(temp)->tp_name); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
788 Py_DECREF(o); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
789 Py_DECREF(temp); |
| 42535 | 790 Py_DECREF(elem); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
791 return 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
792 } |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
793 Py_DECREF(o); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
794 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
795 } |
|
48660
85b67fb5672b
Rename PyUnicode_AsString -> _PyUnicode_AsString and
Marc-André Lemburg <mal@egenix.com>
parents:
48558
diff
changeset
|
796 temp_str = _PyUnicode_AsStringAndSize(temp, &len); |
|
66799
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66556
diff
changeset
|
797 if (temp_str == NULL) { |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66556
diff
changeset
|
798 Py_DECREF(temp); |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66556
diff
changeset
|
799 Py_XDECREF(elem); |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66556
diff
changeset
|
800 return 0; |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66556
diff
changeset
|
801 } |
|
46644
ea594306ea85
Issue #1950: Fixed misusage of PyUnicode_AsString().
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
44441
diff
changeset
|
802 strn = (char *)PyObject_MALLOC(len + 1); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
803 if (strn != NULL) |
|
46644
ea594306ea85
Issue #1950: Fixed misusage of PyUnicode_AsString().
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
44441
diff
changeset
|
804 (void) memcpy(strn, temp_str, len + 1); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
805 Py_DECREF(temp); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
806 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
807 else if (!ISNONTERMINAL(type)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
808 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
809 * It has to be one or the other; this is an error. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
810 * Throw an exception. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
811 */ |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36786
diff
changeset
|
812 PyObject *err = Py_BuildValue("os", elem, "unknown node type."); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36786
diff
changeset
|
813 PyErr_SetObject(parser_error, err); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36786
diff
changeset
|
814 Py_XDECREF(err); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
815 Py_XDECREF(elem); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
816 return (0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
817 } |
|
36786
57322cb2ca11
Patch #1440601: Add col_offset attribute to AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36712
diff
changeset
|
818 err = PyNode_AddChild(root, type, strn, *line_num, 0); |
|
21237
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
819 if (err == E_NOMEM) { |
| 42535 | 820 Py_XDECREF(elem); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36786
diff
changeset
|
821 PyObject_FREE(strn); |
|
21237
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
822 return (node *) PyErr_NoMemory(); |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
823 } |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
824 if (err == E_OVERFLOW) { |
| 42535 | 825 Py_XDECREF(elem); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36786
diff
changeset
|
826 PyObject_FREE(strn); |
|
21237
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
827 PyErr_SetString(PyExc_ValueError, |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
828 "unsupported number of child nodes"); |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
829 return NULL; |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
830 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
831 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
832 if (ISNONTERMINAL(type)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
833 node* new_child = CHILD(root, i - 1); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
834 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
835 if (new_child != build_node_children(elem, new_child, line_num)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
836 Py_XDECREF(elem); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
837 return (0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
838 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
839 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
840 else if (type == NEWLINE) { /* It's true: we increment the */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
841 ++(*line_num); /* line number *after* the newline! */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
842 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
843 Py_XDECREF(elem); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
844 } |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36786
diff
changeset
|
845 return root; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
846 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
847 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
848 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
849 static node* |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
850 build_node_tree(PyObject *tuple) |
| 4084 | 851 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
852 node* res = 0; |
| 4084 | 853 PyObject *temp = PySequence_GetItem(tuple, 0); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
854 long num = -1; |
| 4084 | 855 |
| 856 if (temp != NULL) | |
|
44099
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
43862
diff
changeset
|
857 num = PyLong_AsLong(temp); |
| 4084 | 858 Py_XDECREF(temp); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
859 if (ISTERMINAL(num)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
860 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
861 * The tuple is simple, but it doesn't start with a start symbol. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
862 * Throw an exception now and be done with it. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
863 */ |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
864 tuple = Py_BuildValue("os", tuple, |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
865 "Illegal syntax-tree; cannot start with terminal symbol."); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
866 PyErr_SetObject(parser_error, tuple); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36786
diff
changeset
|
867 Py_XDECREF(tuple); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
868 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
869 else if (ISNONTERMINAL(num)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
870 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
871 * Not efficient, but that can be handled later. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
872 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
873 int line_num = 0; |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
874 PyObject *encoding = NULL; |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
875 |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
876 if (num == encoding_decl) { |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
877 encoding = PySequence_GetItem(tuple, 2); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
878 /* tuple isn't borrowed anymore here, need to DECREF */ |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
879 tuple = PySequence_GetSlice(tuple, 0, 2); |
|
66799
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66556
diff
changeset
|
880 if (tuple == NULL) |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66556
diff
changeset
|
881 return NULL; |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
882 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
883 res = PyNode_New(num); |
|
21237
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
884 if (res != NULL) { |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
885 if (res != build_node_children(tuple, res, &line_num)) { |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
886 PyNode_Free(res); |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
887 res = NULL; |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
888 } |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
889 if (res && encoding) { |
|
36518
9f3f87e920a6
Use Py_ssize_t for counts and sizes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36501
diff
changeset
|
890 Py_ssize_t len; |
|
42856
f3b3ffd13954
Use unicode and remove support for some uses of str8.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42535
diff
changeset
|
891 const char *temp; |
|
48660
85b67fb5672b
Rename PyUnicode_AsString -> _PyUnicode_AsString and
Marc-André Lemburg <mal@egenix.com>
parents:
48558
diff
changeset
|
892 temp = _PyUnicode_AsStringAndSize(encoding, &len); |
|
66799
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66556
diff
changeset
|
893 if (temp == NULL) { |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66556
diff
changeset
|
894 Py_DECREF(res); |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66556
diff
changeset
|
895 Py_DECREF(encoding); |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66556
diff
changeset
|
896 Py_DECREF(tuple); |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66556
diff
changeset
|
897 return NULL; |
|
50d170bb71c7
Issue #6697: Fixed instances of _PyUnicode_AsString() result not checked for NULL
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66556
diff
changeset
|
898 } |
|
46644
ea594306ea85
Issue #1950: Fixed misusage of PyUnicode_AsString().
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
44441
diff
changeset
|
899 res->n_str = (char *)PyObject_MALLOC(len + 1); |
|
42856
f3b3ffd13954
Use unicode and remove support for some uses of str8.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42535
diff
changeset
|
900 if (res->n_str != NULL && temp != NULL) |
|
46644
ea594306ea85
Issue #1950: Fixed misusage of PyUnicode_AsString().
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
44441
diff
changeset
|
901 (void) memcpy(res->n_str, temp, len + 1); |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
902 Py_DECREF(encoding); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
903 Py_DECREF(tuple); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
904 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
905 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
906 } |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36786
diff
changeset
|
907 else { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
908 /* The tuple is illegal -- if the number is neither TERMINAL nor |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
909 * NONTERMINAL, we can't use it. Not sure the implementation |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
910 * allows this condition, but the API doesn't preclude it. |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
911 */ |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36786
diff
changeset
|
912 PyObject *err = Py_BuildValue("os", tuple, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36786
diff
changeset
|
913 "Illegal component tuple."); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36786
diff
changeset
|
914 PyErr_SetObject(parser_error, err); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36786
diff
changeset
|
915 Py_XDECREF(err); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36786
diff
changeset
|
916 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
917 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
918 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
919 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
920 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
921 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
922 /* |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
923 * Validation routines used within the validation section: |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
924 */ |
|
24280
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
925 static int validate_terminal(node *terminal, int type, char *string); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
926 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
927 #define validate_ampersand(ch) validate_terminal(ch, AMPER, "&") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
928 #define validate_circumflex(ch) validate_terminal(ch, CIRCUMFLEX, "^") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
929 #define validate_colon(ch) validate_terminal(ch, COLON, ":") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
930 #define validate_comma(ch) validate_terminal(ch, COMMA, ",") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
931 #define validate_dedent(ch) validate_terminal(ch, DEDENT, "") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
932 #define validate_equal(ch) validate_terminal(ch, EQUAL, "=") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
933 #define validate_indent(ch) validate_terminal(ch, INDENT, (char*)NULL) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
934 #define validate_lparen(ch) validate_terminal(ch, LPAR, "(") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
935 #define validate_newline(ch) validate_terminal(ch, NEWLINE, (char*)NULL) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
936 #define validate_rparen(ch) validate_terminal(ch, RPAR, ")") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
937 #define validate_semi(ch) validate_terminal(ch, SEMI, ";") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
938 #define validate_star(ch) validate_terminal(ch, STAR, "*") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
939 #define validate_vbar(ch) validate_terminal(ch, VBAR, "|") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
940 #define validate_doublestar(ch) validate_terminal(ch, DOUBLESTAR, "**") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
941 #define validate_dot(ch) validate_terminal(ch, DOT, ".") |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
942 #define validate_at(ch) validate_terminal(ch, AT, "@") |
|
76635
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
943 #define validate_rarrow(ch) validate_terminal(ch, RARROW, "->") |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
944 #define validate_name(ch, str) validate_terminal(ch, NAME, str) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
945 |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
946 #define VALIDATER(n) static int validate_##n(node *tree) |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
947 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
948 VALIDATER(node); VALIDATER(small_stmt); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
949 VALIDATER(class); VALIDATER(node); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
950 VALIDATER(parameters); VALIDATER(suite); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
951 VALIDATER(testlist); VALIDATER(varargslist); |
|
43862
d4f9706cb46b
Patch 1144 by David Binger, fix for parser module. With unittest.
Guido van Rossum <guido@python.org>
parents:
42856
diff
changeset
|
952 VALIDATER(vfpdef); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
953 VALIDATER(stmt); VALIDATER(simple_stmt); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
954 VALIDATER(expr_stmt); VALIDATER(power); |
|
40774
793e0323d4d6
Essential changes for print function changes.
Guido van Rossum <guido@python.org>
parents:
40587
diff
changeset
|
955 VALIDATER(del_stmt); |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
956 VALIDATER(return_stmt); VALIDATER(raise_stmt); |
|
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
957 VALIDATER(import_stmt); VALIDATER(import_stmt); |
|
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
958 VALIDATER(import_name); VALIDATER(yield_stmt); |
|
76647
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
959 VALIDATER(global_stmt); VALIDATER(nonlocal_stmt); |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
960 VALIDATER(assert_stmt); |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
961 VALIDATER(compound_stmt); VALIDATER(test_or_star_expr); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
962 VALIDATER(while); VALIDATER(for); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
963 VALIDATER(try); VALIDATER(except_clause); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
964 VALIDATER(test); VALIDATER(and_test); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
965 VALIDATER(not_test); VALIDATER(comparison); |
|
43862
d4f9706cb46b
Patch 1144 by David Binger, fix for parser module. With unittest.
Guido van Rossum <guido@python.org>
parents:
42856
diff
changeset
|
966 VALIDATER(comp_op); |
|
41699
e16c8e5c5ca4
Merged revisions 55225-55227,55229-55269 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41464
diff
changeset
|
967 VALIDATER(star_expr); VALIDATER(expr); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
968 VALIDATER(xor_expr); VALIDATER(and_expr); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
969 VALIDATER(shift_expr); VALIDATER(arith_expr); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
970 VALIDATER(term); VALIDATER(factor); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
971 VALIDATER(atom); VALIDATER(lambdef); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
972 VALIDATER(trailer); VALIDATER(subscript); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
973 VALIDATER(subscriptlist); VALIDATER(sliceop); |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
974 VALIDATER(exprlist); VALIDATER(dictorsetmaker); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
975 VALIDATER(arglist); VALIDATER(argument); |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
976 VALIDATER(comp_for); |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
977 VALIDATER(comp_iter); VALIDATER(comp_if); |
|
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
978 VALIDATER(testlist_comp); VALIDATER(yield_expr); |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
979 VALIDATER(or_test); |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
980 VALIDATER(test_nocond); VALIDATER(lambdef_nocond); |
|
74356
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
981 VALIDATER(yield_arg); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
982 |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
983 #undef VALIDATER |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
984 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
985 #define is_even(n) (((n) & 1) == 0) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
986 #define is_odd(n) (((n) & 1) == 1) |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
987 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
988 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
989 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
990 validate_ntype(node *n, int t) |
| 4084 | 991 { |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
992 if (TYPE(n) != t) { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
993 PyErr_Format(parser_error, "Expected node type %d, got %d.", |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
994 t, TYPE(n)); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
995 return 0; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
996 } |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
997 return 1; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
998 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
999 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1000 |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
1001 /* Verifies that the number of child nodes is exactly 'num', raising |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
1002 * an exception if it isn't. The exception message does not indicate |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
1003 * the exact number of nodes, allowing this to be used to raise the |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
1004 * "right" exception when the wrong number of nodes is present in a |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
1005 * specific variant of a statement's syntax. This is commonly used |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
1006 * in that fashion. |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
1007 */ |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1008 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1009 validate_numnodes(node *n, int num, const char *const name) |
| 4084 | 1010 { |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1011 if (NCH(n) != num) { |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1012 PyErr_Format(parser_error, |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1013 "Illegal number of children for %s node.", name); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1014 return 0; |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1015 } |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1016 return 1; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1017 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1018 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1019 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1020 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1021 validate_terminal(node *terminal, int type, char *string) |
| 4084 | 1022 { |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1023 int res = (validate_ntype(terminal, type) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1024 && ((string == 0) || (strcmp(string, STR(terminal)) == 0))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1025 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1026 if (!res && !PyErr_Occurred()) { |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1027 PyErr_Format(parser_error, |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1028 "Illegal terminal: expected \"%s\"", string); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1029 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1030 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1031 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1032 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1033 |
| 4084 | 1034 /* X (',' X) [','] |
| 1035 */ | |
| 1036 static int | |
|
13667
a6c7bfdd6777
Even more ANSIfication: fix as many function pointers and declarations as
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
1037 validate_repeating_list(node *tree, int ntype, int (*vfunc)(node *), |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1038 const char *const name) |
| 4084 | 1039 { |
| 1040 int nch = NCH(tree); | |
| 1041 int res = (nch && validate_ntype(tree, ntype) | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1042 && vfunc(CHILD(tree, 0))); |
| 4084 | 1043 |
| 1044 if (!res && !PyErr_Occurred()) | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1045 (void) validate_numnodes(tree, 1, name); |
| 4084 | 1046 else { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1047 if (is_even(nch)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1048 res = validate_comma(CHILD(tree, --nch)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1049 if (res && nch > 1) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1050 int pos = 1; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1051 for ( ; res && pos < nch; pos += 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1052 res = (validate_comma(CHILD(tree, pos)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1053 && vfunc(CHILD(tree, pos + 1))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1054 } |
| 4084 | 1055 } |
| 1056 return (res); | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1057 } |
| 4084 | 1058 |
| 1059 | |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1060 /* validate_class() |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1061 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1062 * classdef: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1063 * 'class' NAME ['(' testlist ')'] ':' suite |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1064 */ |
| 4084 | 1065 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1066 validate_class(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1067 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1068 int nch = NCH(tree); |
|
34887
7c2780c9e51b
Flush out support for ``class B(): pass`` syntax by adding support to the
Brett Cannon <bcannon@gmail.com>
parents:
33353
diff
changeset
|
1069 int res = (validate_ntype(tree, classdef) && |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1070 ((nch == 4) || (nch == 6) || (nch == 7))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1071 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1072 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1073 res = (validate_name(CHILD(tree, 0), "class") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1074 && validate_ntype(CHILD(tree, 1), NAME) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1075 && validate_colon(CHILD(tree, nch - 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1076 && validate_suite(CHILD(tree, nch - 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1077 } |
|
34887
7c2780c9e51b
Flush out support for ``class B(): pass`` syntax by adding support to the
Brett Cannon <bcannon@gmail.com>
parents:
33353
diff
changeset
|
1078 else { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1079 (void) validate_numnodes(tree, 4, "class"); |
|
34887
7c2780c9e51b
Flush out support for ``class B(): pass`` syntax by adding support to the
Brett Cannon <bcannon@gmail.com>
parents:
33353
diff
changeset
|
1080 } |
|
43862
d4f9706cb46b
Patch 1144 by David Binger, fix for parser module. With unittest.
Guido van Rossum <guido@python.org>
parents:
42856
diff
changeset
|
1081 |
|
34887
7c2780c9e51b
Flush out support for ``class B(): pass`` syntax by adding support to the
Brett Cannon <bcannon@gmail.com>
parents:
33353
diff
changeset
|
1082 if (res) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1083 if (nch == 7) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1084 res = ((validate_lparen(CHILD(tree, 2)) && |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1085 validate_arglist(CHILD(tree, 3)) && |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1086 validate_rparen(CHILD(tree, 4)))); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1087 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1088 else if (nch == 6) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1089 res = (validate_lparen(CHILD(tree,2)) && |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1090 validate_rparen(CHILD(tree,3))); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1091 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1092 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1093 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1094 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1095 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1096 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1097 /* if_stmt: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1098 * 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1099 */ |
| 4084 | 1100 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1101 validate_if(node *tree) |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1102 { |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1103 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1104 int res = (validate_ntype(tree, if_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1105 && (nch >= 4) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1106 && validate_name(CHILD(tree, 0), "if") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1107 && validate_test(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1108 && validate_colon(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1109 && validate_suite(CHILD(tree, 3))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1110 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1111 if (res && ((nch % 4) == 3)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1112 /* ... 'else' ':' suite */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1113 res = (validate_name(CHILD(tree, nch - 3), "else") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1114 && validate_colon(CHILD(tree, nch - 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1115 && validate_suite(CHILD(tree, nch - 1))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1116 nch -= 3; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1117 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1118 else if (!res && !PyErr_Occurred()) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1119 (void) validate_numnodes(tree, 4, "if"); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1120 if ((nch % 4) != 0) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1121 /* Will catch the case for nch < 4 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1122 res = validate_numnodes(tree, 0, "if"); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1123 else if (res && (nch > 4)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1124 /* ... ('elif' test ':' suite)+ ... */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1125 int j = 4; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1126 while ((j < nch) && res) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1127 res = (validate_name(CHILD(tree, j), "elif") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1128 && validate_colon(CHILD(tree, j + 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1129 && validate_test(CHILD(tree, j + 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1130 && validate_suite(CHILD(tree, j + 3))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1131 j += 4; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1132 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1133 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1134 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1135 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1136 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1137 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1138 /* parameters: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1139 * '(' [varargslist] ')' |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1140 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1141 */ |
| 4084 | 1142 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1143 validate_parameters(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1144 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1145 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1146 int res = validate_ntype(tree, parameters) && ((nch == 2) || (nch == 3)); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1147 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1148 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1149 res = (validate_lparen(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1150 && validate_rparen(CHILD(tree, nch - 1))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1151 if (res && (nch == 3)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1152 res = validate_varargslist(CHILD(tree, 1)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1153 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1154 else { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1155 (void) validate_numnodes(tree, 2, "parameters"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1156 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1157 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1158 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1159 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1160 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1161 /* validate_suite() |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1162 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1163 * suite: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1164 * simple_stmt |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1165 * | NEWLINE INDENT stmt+ DEDENT |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1166 */ |
| 4084 | 1167 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1168 validate_suite(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1169 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1170 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1171 int res = (validate_ntype(tree, suite) && ((nch == 1) || (nch >= 4))); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1172 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1173 if (res && (nch == 1)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1174 res = validate_simple_stmt(CHILD(tree, 0)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1175 else if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1176 /* NEWLINE INDENT stmt+ DEDENT */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1177 res = (validate_newline(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1178 && validate_indent(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1179 && validate_stmt(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1180 && validate_dedent(CHILD(tree, nch - 1))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1181 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1182 if (res && (nch > 4)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1183 int i = 3; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1184 --nch; /* forget the DEDENT */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1185 for ( ; res && (i < nch); ++i) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1186 res = validate_stmt(CHILD(tree, i)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1187 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1188 else if (nch < 4) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1189 res = validate_numnodes(tree, 4, "suite"); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1190 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1191 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1192 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1193 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1194 |
| 4084 | 1195 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1196 validate_testlist(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1197 { |
| 4084 | 1198 return (validate_repeating_list(tree, testlist, |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1199 validate_test, "testlist")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1200 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1201 |
|
20432
56141b86a7f2
Very subtle syntax change: in a list comprehension, the testlist in
Guido van Rossum <guido@python.org>
parents:
19274
diff
changeset
|
1202 static int |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
1203 validate_testlist_star_expr(node *tl) |
|
23538
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1204 { |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
1205 return (validate_repeating_list(tl, testlist_star_expr, validate_test_or_star_expr, |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
1206 "testlist")); |
|
23538
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1207 } |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1208 |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1209 |
|
41717
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1210 /* validate either vfpdef or tfpdef. |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1211 * vfpdef: NAME |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1212 * tfpdef: NAME [':' test] |
|
40529
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1213 */ |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1214 static int |
|
41717
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1215 validate_vfpdef(node *tree) |
|
40529
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1216 { |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1217 int nch = NCH(tree); |
|
41717
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1218 if (TYPE(tree) == vfpdef) { |
|
40529
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1219 return nch == 1 && validate_name(CHILD(tree, 0), NULL); |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1220 } |
|
41717
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1221 else if (TYPE(tree) == tfpdef) { |
|
40529
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1222 if (nch == 1) { |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1223 return validate_name(CHILD(tree, 0), NULL); |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1224 } |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1225 else if (nch == 3) { |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1226 return validate_name(CHILD(tree, 0), NULL) && |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1227 validate_colon(CHILD(tree, 1)) && |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1228 validate_test(CHILD(tree, 2)); |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1229 } |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1230 } |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1231 return 0; |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1232 } |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1233 |
|
76635
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1234 /* '*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef |
|
41717
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1235 * ..or tfpdef in place of vfpdef. vfpdef: NAME; tfpdef: NAME [':' test] |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1236 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1237 static int |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1238 validate_varargslist_trailer(node *tree, int start) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1239 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1240 int nch = NCH(tree); |
|
76635
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1241 int res = 0; |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1242 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1243 if (nch <= start) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1244 err_string("expected variable argument trailer for varargslist"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1245 return 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1246 } |
|
76635
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1247 if (TYPE(CHILD(tree, start)) == STAR) { |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1248 /* |
|
76635
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1249 * '*' [vfpdef] |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1250 */ |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1251 res = validate_star(CHILD(tree, start++)); |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1252 if (res && start < nch && (TYPE(CHILD(tree, start)) == vfpdef || |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1253 TYPE(CHILD(tree, start)) == tfpdef)) |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1254 res = validate_vfpdef(CHILD(tree, start++)); |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1255 /* |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1256 * (',' vfpdef ['=' test])* |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1257 */ |
|
76635
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1258 while (res && start + 1 < nch && ( |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1259 TYPE(CHILD(tree, start + 1)) == vfpdef || |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1260 TYPE(CHILD(tree, start + 1)) == tfpdef)) { |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1261 res = (validate_comma(CHILD(tree, start++)) |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1262 && validate_vfpdef(CHILD(tree, start++))); |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1263 if (res && start + 1 < nch && TYPE(CHILD(tree, start)) == EQUAL) |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1264 res = (validate_equal(CHILD(tree, start++)) |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1265 && validate_test(CHILD(tree, start++))); |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1266 } |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1267 /* |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1268 * [',' '**' vfpdef] |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1269 */ |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1270 if (res && start + 2 < nch && TYPE(CHILD(tree, start+1)) == DOUBLESTAR) |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1271 res = (validate_comma(CHILD(tree, start++)) |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1272 && validate_doublestar(CHILD(tree, start++)) |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1273 && validate_vfpdef(CHILD(tree, start++))); |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1274 } |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1275 else if (TYPE(CHILD(tree, start)) == DOUBLESTAR) { |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1276 /* |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1277 * '**' vfpdef |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1278 */ |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1279 if (start + 1 < nch) |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1280 res = (validate_doublestar(CHILD(tree, start++)) |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1281 && validate_vfpdef(CHILD(tree, start++))); |
|
40215
1cce0526d9b0
Jiwon Seo's PEP 3102 implementation.
Guido van Rossum <guido@python.org>
parents:
39783
diff
changeset
|
1282 else { |
|
76635
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1283 res = 0; |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1284 err_string("expected vfpdef after ** in varargslist trailer"); |
|
40215
1cce0526d9b0
Jiwon Seo's PEP 3102 implementation.
Guido van Rossum <guido@python.org>
parents:
39783
diff
changeset
|
1285 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1286 } |
|
76635
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1287 else { |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1288 res = 0; |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1289 err_string("expected * or ** in varargslist trailer"); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1290 } |
|
76635
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1291 |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1292 if (res && start != nch) { |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1293 res = 0; |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1294 err_string("unexpected extra children in varargslist trailer"); |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
1295 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1296 return res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1297 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1298 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1299 |
|
40529
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1300 /* validate_varargslist() |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1301 * |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1302 * Validate typedargslist or varargslist. |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1303 * |
|
40529
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1304 * typedargslist: ((tfpdef ['=' test] ',')* |
|
41717
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1305 * ('*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1306 * '**' tfpdef) |
|
40529
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1307 * | tfpdef ['=' test] (',' tfpdef ['=' test])* [',']) |
|
41717
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1308 * tfpdef: NAME [':' test] |
|
40529
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1309 * varargslist: ((vfpdef ['=' test] ',')* |
|
41717
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1310 * ('*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1311 * '**' vfpdef) |
|
40529
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1312 * | vfpdef ['=' test] (',' vfpdef ['=' test])* [',']) |
|
41717
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1313 * vfpdef: NAME |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1314 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1315 */ |
| 4084 | 1316 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1317 validate_varargslist(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1318 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1319 int nch = NCH(tree); |
|
40529
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1320 int res = (TYPE(tree) == varargslist || |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1321 TYPE(tree) == typedargslist) && |
|
54cd47788811
PEP 3107 - Function Annotations thanks to Tony Lownds
Neal Norwitz <nnorwitz@gmail.com>
parents:
40450
diff
changeset
|
1322 (nch != 0); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1323 int sym; |
|
41717
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1324 node *ch; |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1325 int i = 0; |
|
43862
d4f9706cb46b
Patch 1144 by David Binger, fix for parser module. With unittest.
Guido van Rossum <guido@python.org>
parents:
42856
diff
changeset
|
1326 |
|
15506
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1327 if (!res) |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1328 return 0; |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1329 if (nch < 1) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1330 err_string("varargslist missing child nodes"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1331 return 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1332 } |
|
41717
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1333 while (i < nch) { |
|
43862
d4f9706cb46b
Patch 1144 by David Binger, fix for parser module. With unittest.
Guido van Rossum <guido@python.org>
parents:
42856
diff
changeset
|
1334 ch = CHILD(tree, i); |
|
41717
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1335 sym = TYPE(ch); |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1336 if (sym == vfpdef || sym == tfpdef) { |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1337 /* validate (vfpdef ['=' test] ',')+ */ |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1338 res = validate_vfpdef(ch); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1339 ++i; |
|
15506
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1340 if (res && (i+2 <= nch) && TYPE(CHILD(tree, i)) == EQUAL) { |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1341 res = (validate_equal(CHILD(tree, i)) |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1342 && validate_test(CHILD(tree, i+1))); |
|
41717
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1343 if (res) |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1344 i += 2; |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1345 } |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1346 if (res && i < nch) { |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1347 res = validate_comma(CHILD(tree, i)); |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1348 ++i; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1349 } |
|
41717
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1350 } else if (sym == DOUBLESTAR || sym == STAR) { |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1351 res = validate_varargslist_trailer(tree, i); |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1352 break; |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1353 } else { |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1354 res = 0; |
|
9ad84070b22d
Merged revisions 55328-55341 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41699
diff
changeset
|
1355 err_string("illegal formation for varargslist"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1356 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1357 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1358 return res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1359 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1360 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1361 |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
1362 /* comp_iter: comp_for | comp_if |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1363 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1364 static int |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
1365 validate_comp_iter(node *tree) |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1366 { |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
1367 int res = (validate_ntype(tree, comp_iter) |
|
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
1368 && validate_numnodes(tree, 1, "comp_iter")); |
|
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
1369 if (res && TYPE(CHILD(tree, 0)) == comp_for) |
|
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
1370 res = validate_comp_for(CHILD(tree, 0)); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1371 else |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
1372 res = validate_comp_if(CHILD(tree, 0)); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1373 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1374 return res; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1375 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1376 |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
1377 /* comp_for: 'for' exprlist 'in' test [comp_iter] |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1378 */ |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1379 static int |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
1380 validate_comp_for(node *tree) |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1381 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1382 int nch = NCH(tree); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1383 int res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1384 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1385 if (nch == 5) |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
1386 res = validate_comp_iter(CHILD(tree, 4)); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1387 else |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
1388 res = validate_numnodes(tree, 4, "comp_for"); |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1389 |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1390 if (res) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1391 res = (validate_name(CHILD(tree, 0), "for") |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1392 && validate_exprlist(CHILD(tree, 1)) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1393 && validate_name(CHILD(tree, 2), "in") |
|
36673
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
1394 && validate_or_test(CHILD(tree, 3))); |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1395 |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1396 return res; |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1397 } |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1398 |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
1399 /* comp_if: 'if' test_nocond [comp_iter] |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1400 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1401 static int |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
1402 validate_comp_if(node *tree) |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1403 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1404 int nch = NCH(tree); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1405 int res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1406 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1407 if (nch == 3) |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
1408 res = validate_comp_iter(CHILD(tree, 2)); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1409 else |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
1410 res = validate_numnodes(tree, 2, "comp_if"); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1411 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1412 if (res) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1413 res = (validate_name(CHILD(tree, 0), "if") |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
1414 && validate_test_nocond(CHILD(tree, 1))); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1415 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1416 return res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1417 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1418 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1419 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1420 /* simple_stmt | compound_stmt |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1421 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1422 */ |
| 4084 | 1423 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1424 validate_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1425 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1426 int res = (validate_ntype(tree, stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1427 && validate_numnodes(tree, 1, "stmt")); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1428 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1429 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1430 tree = CHILD(tree, 0); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1431 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1432 if (TYPE(tree) == simple_stmt) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1433 res = validate_simple_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1434 else |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1435 res = validate_compound_stmt(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1436 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1437 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1438 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1439 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1440 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1441 /* small_stmt (';' small_stmt)* [';'] NEWLINE |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1442 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1443 */ |
| 4084 | 1444 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1445 validate_simple_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1446 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1447 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1448 int res = (validate_ntype(tree, simple_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1449 && (nch >= 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1450 && validate_small_stmt(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1451 && validate_newline(CHILD(tree, nch - 1))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1452 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1453 if (nch < 2) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1454 res = validate_numnodes(tree, 2, "simple_stmt"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1455 --nch; /* forget the NEWLINE */ |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1456 if (res && is_even(nch)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1457 res = validate_semi(CHILD(tree, --nch)); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1458 if (res && (nch > 2)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1459 int i; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1460 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1461 for (i = 1; res && (i < nch); i += 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1462 res = (validate_semi(CHILD(tree, i)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1463 && validate_small_stmt(CHILD(tree, i + 1))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1464 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1465 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1466 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1467 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1468 |
| 4084 | 1469 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1470 validate_small_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1471 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1472 int nch = NCH(tree); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1473 int res = validate_numnodes(tree, 1, "small_stmt"); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1474 |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1475 if (res) { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1476 int ntype = TYPE(CHILD(tree, 0)); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1477 |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1478 if ( (ntype == expr_stmt) |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1479 || (ntype == del_stmt) |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1480 || (ntype == pass_stmt) |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1481 || (ntype == flow_stmt) |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1482 || (ntype == import_stmt) |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1483 || (ntype == global_stmt) |
|
76647
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1484 || (ntype == nonlocal_stmt) |
|
39782
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
39701
diff
changeset
|
1485 || (ntype == assert_stmt)) |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1486 res = validate_node(CHILD(tree, 0)); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1487 else { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1488 res = 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1489 err_string("illegal small_stmt child type"); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1490 } |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1491 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1492 else if (nch == 1) { |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1493 res = 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1494 PyErr_Format(parser_error, |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1495 "Unrecognized child node of small_stmt: %d.", |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1496 TYPE(CHILD(tree, 0))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1497 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1498 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1499 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1500 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1501 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1502 /* compound_stmt: |
|
49908
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
1503 * if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1504 */ |
| 4084 | 1505 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1506 validate_compound_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1507 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1508 int res = (validate_ntype(tree, compound_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1509 && validate_numnodes(tree, 1, "compound_stmt")); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1510 int ntype; |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1511 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1512 if (!res) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1513 return (0); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1514 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1515 tree = CHILD(tree, 0); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1516 ntype = TYPE(tree); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1517 if ( (ntype == if_stmt) |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1518 || (ntype == while_stmt) |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1519 || (ntype == for_stmt) |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1520 || (ntype == try_stmt) |
|
49908
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
1521 || (ntype == with_stmt) |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1522 || (ntype == funcdef) |
|
41824
24b60622b944
Merged revisions 55407-55513 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41717
diff
changeset
|
1523 || (ntype == classdef) |
|
24b60622b944
Merged revisions 55407-55513 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41717
diff
changeset
|
1524 || (ntype == decorated)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1525 res = validate_node(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1526 else { |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1527 res = 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1528 PyErr_Format(parser_error, |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1529 "Illegal compound statement type: %d.", TYPE(tree)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1530 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1531 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1532 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1533 |
| 4084 | 1534 static int |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
1535 validate_yield_or_testlist(node *tree, int tse) |
|
35298
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1536 { |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
1537 if (TYPE(tree) == yield_expr) { |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
1538 return validate_yield_expr(tree); |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
1539 } |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
1540 else { |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
1541 if (tse) |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
1542 return validate_testlist_star_expr(tree); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1543 else |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
1544 return validate_testlist(tree); |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
1545 } |
|
35298
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1546 } |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1547 |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1548 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1549 validate_expr_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1550 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1551 int j; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1552 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1553 int res = (validate_ntype(tree, expr_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1554 && is_odd(nch) |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
1555 && validate_testlist_star_expr(CHILD(tree, 0))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1556 |
|
14214
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1557 if (res && nch == 3 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1558 && TYPE(CHILD(tree, 1)) == augassign) { |
|
35298
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1559 res = validate_numnodes(CHILD(tree, 1), 1, "augassign") |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
1560 && validate_yield_or_testlist(CHILD(tree, 2), 0); |
|
14214
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1561 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1562 if (res) { |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1563 char *s = STR(CHILD(CHILD(tree, 1), 0)); |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1564 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1565 res = (strcmp(s, "+=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1566 || strcmp(s, "-=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1567 || strcmp(s, "*=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1568 || strcmp(s, "/=") == 0 |
|
27517
51abb5e86226
Teach the parsermodule about floor division. Fixes
Michael W. Hudson <mwh@python.net>
parents:
26979
diff
changeset
|
1569 || strcmp(s, "//=") == 0 |
|
14214
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1570 || strcmp(s, "%=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1571 || strcmp(s, "&=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1572 || strcmp(s, "|=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1573 || strcmp(s, "^=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1574 || strcmp(s, "<<=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1575 || strcmp(s, ">>=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1576 || strcmp(s, "**=") == 0); |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1577 if (!res) |
|
68488
0991b40e895d
#11515: fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
62791
diff
changeset
|
1578 err_string("illegal augmented assignment operator"); |
|
14214
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1579 } |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1580 } |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1581 else { |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1582 for (j = 1; res && (j < nch); j += 2) |
|
35298
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1583 res = validate_equal(CHILD(tree, j)) |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
1584 && validate_yield_or_testlist(CHILD(tree, j + 1), 1); |
|
14214
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1585 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1586 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1587 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1588 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1589 |
| 4084 | 1590 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1591 validate_del_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1592 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1593 return (validate_numnodes(tree, 2, "del_stmt") |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1594 && validate_name(CHILD(tree, 0), "del") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1595 && validate_exprlist(CHILD(tree, 1))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1596 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1597 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1598 |
| 4084 | 1599 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1600 validate_return_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1601 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1602 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1603 int res = (validate_ntype(tree, return_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1604 && ((nch == 1) || (nch == 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1605 && validate_name(CHILD(tree, 0), "return")); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1606 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1607 if (res && (nch == 2)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1608 res = validate_testlist(CHILD(tree, 1)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1609 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1610 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1611 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1612 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1613 |
|
76818
fc17f70292f6
Issue #14701: Add missing support for 'raise ... from' in parser module.
Mark Dickinson <mdickinson@enthought.com>
parents:
76647
diff
changeset
|
1614 /* |
|
fc17f70292f6
Issue #14701: Add missing support for 'raise ... from' in parser module.
Mark Dickinson <mdickinson@enthought.com>
parents:
76647
diff
changeset
|
1615 * raise_stmt: |
|
fc17f70292f6
Issue #14701: Add missing support for 'raise ... from' in parser module.
Mark Dickinson <mdickinson@enthought.com>
parents:
76647
diff
changeset
|
1616 * |
|
fc17f70292f6
Issue #14701: Add missing support for 'raise ... from' in parser module.
Mark Dickinson <mdickinson@enthought.com>
parents:
76647
diff
changeset
|
1617 * 'raise' [test ['from' test]] |
|
fc17f70292f6
Issue #14701: Add missing support for 'raise ... from' in parser module.
Mark Dickinson <mdickinson@enthought.com>
parents:
76647
diff
changeset
|
1618 */ |
| 4084 | 1619 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1620 validate_raise_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1621 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1622 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1623 int res = (validate_ntype(tree, raise_stmt) |
|
76818
fc17f70292f6
Issue #14701: Add missing support for 'raise ... from' in parser module.
Mark Dickinson <mdickinson@enthought.com>
parents:
76647
diff
changeset
|
1624 && ((nch == 1) || (nch == 2) || (nch == 4))); |
|
fc17f70292f6
Issue #14701: Add missing support for 'raise ... from' in parser module.
Mark Dickinson <mdickinson@enthought.com>
parents:
76647
diff
changeset
|
1625 |
|
fc17f70292f6
Issue #14701: Add missing support for 'raise ... from' in parser module.
Mark Dickinson <mdickinson@enthought.com>
parents:
76647
diff
changeset
|
1626 if (!res && !PyErr_Occurred()) |
|
fc17f70292f6
Issue #14701: Add missing support for 'raise ... from' in parser module.
Mark Dickinson <mdickinson@enthought.com>
parents:
76647
diff
changeset
|
1627 (void) validate_numnodes(tree, 2, "raise"); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1628 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1629 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1630 res = validate_name(CHILD(tree, 0), "raise"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1631 if (res && (nch >= 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1632 res = validate_test(CHILD(tree, 1)); |
|
76818
fc17f70292f6
Issue #14701: Add missing support for 'raise ... from' in parser module.
Mark Dickinson <mdickinson@enthought.com>
parents:
76647
diff
changeset
|
1633 if (res && (nch == 4)) { |
|
fc17f70292f6
Issue #14701: Add missing support for 'raise ... from' in parser module.
Mark Dickinson <mdickinson@enthought.com>
parents:
76647
diff
changeset
|
1634 res = (validate_name(CHILD(tree, 2), "from") |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1635 && validate_test(CHILD(tree, 3))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1636 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1637 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1638 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1639 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1640 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1641 |
|
74356
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1642 /* yield_expr: 'yield' [yield_arg] |
|
35298
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1643 */ |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1644 static int |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1645 validate_yield_expr(node *tree) |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1646 { |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1647 int nch = NCH(tree); |
|
74356
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1648 if (nch < 1 || nch > 2) |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1649 return 0; |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1650 if (!validate_ntype(tree, yield_expr)) |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1651 return 0; |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1652 if (!validate_name(CHILD(tree, 0), "yield")) |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1653 return 0; |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1654 if (nch == 2) { |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1655 if (!validate_yield_arg(CHILD(tree, 1))) |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1656 return 0; |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1657 } |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1658 return 1; |
|
35298
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1659 } |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1660 |
|
74356
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1661 /* yield_arg: 'from' test | testlist |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1662 */ |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1663 static int |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1664 validate_yield_arg(node *tree) |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1665 { |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1666 int nch = NCH(tree); |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1667 if (!validate_ntype(tree, yield_arg)) |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1668 return 0; |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1669 switch (nch) { |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1670 case 1: |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1671 if (!validate_testlist(CHILD(tree, nch - 1))) |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1672 return 0; |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1673 break; |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1674 case 2: |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1675 if (!validate_name(CHILD(tree, 0), "from")) |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1676 return 0; |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1677 if (!validate_test(CHILD(tree, 1))) |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1678 return 0; |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1679 break; |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1680 default: |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1681 return 0; |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1682 } |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1683 return 1; |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
1684 } |
|
35298
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1685 |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1686 /* yield_stmt: yield_expr |
|
18646
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1687 */ |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1688 static int |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1689 validate_yield_stmt(node *tree) |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1690 { |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1691 return (validate_ntype(tree, yield_stmt) |
|
35298
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1692 && validate_numnodes(tree, 1, "yield_stmt") |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1693 && validate_yield_expr(CHILD(tree, 0))); |
|
18646
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1694 } |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1695 |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1696 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1697 static int |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1698 validate_import_as_name(node *tree) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1699 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1700 int nch = NCH(tree); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1701 int ok = validate_ntype(tree, import_as_name); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1702 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1703 if (ok) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1704 if (nch == 1) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1705 ok = validate_name(CHILD(tree, 0), NULL); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1706 else if (nch == 3) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1707 ok = (validate_name(CHILD(tree, 0), NULL) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1708 && validate_name(CHILD(tree, 1), "as") |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1709 && validate_name(CHILD(tree, 2), NULL)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1710 else |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1711 ok = validate_numnodes(tree, 3, "import_as_name"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1712 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1713 return ok; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1714 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1715 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1716 |
|
15751
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1717 /* dotted_name: NAME ("." NAME)* |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1718 */ |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1719 static int |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1720 validate_dotted_name(node *tree) |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1721 { |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1722 int nch = NCH(tree); |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1723 int res = (validate_ntype(tree, dotted_name) |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1724 && is_odd(nch) |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1725 && validate_name(CHILD(tree, 0), NULL)); |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1726 int i; |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1727 |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1728 for (i = 1; res && (i < nch); i += 2) { |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1729 res = (validate_dot(CHILD(tree, i)) |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1730 && validate_name(CHILD(tree, i+1), NULL)); |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1731 } |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1732 return res; |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1733 } |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1734 |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1735 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1736 /* dotted_as_name: dotted_name [NAME NAME] |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1737 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1738 static int |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1739 validate_dotted_as_name(node *tree) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1740 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1741 int nch = NCH(tree); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1742 int res = validate_ntype(tree, dotted_as_name); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1743 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1744 if (res) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1745 if (nch == 1) |
|
15751
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1746 res = validate_dotted_name(CHILD(tree, 0)); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1747 else if (nch == 3) |
|
15751
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1748 res = (validate_dotted_name(CHILD(tree, 0)) |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1749 && validate_name(CHILD(tree, 1), "as") |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1750 && validate_name(CHILD(tree, 2), NULL)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1751 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1752 res = 0; |
| 15318 | 1753 err_string("illegal number of children for dotted_as_name"); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1754 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1755 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1756 return res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1757 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1758 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1759 |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1760 /* dotted_as_name (',' dotted_as_name)* */ |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1761 static int |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1762 validate_dotted_as_names(node *tree) |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1763 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1764 int nch = NCH(tree); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1765 int res = is_odd(nch) && validate_dotted_as_name(CHILD(tree, 0)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1766 int i; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1767 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1768 for (i = 1; res && (i < nch); i += 2) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1769 res = (validate_comma(CHILD(tree, i)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1770 && validate_dotted_as_name(CHILD(tree, i + 1))); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1771 return (res); |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1772 } |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1773 |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1774 |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1775 /* import_as_name (',' import_as_name)* [','] */ |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1776 static int |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1777 validate_import_as_names(node *tree) |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1778 { |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1779 int nch = NCH(tree); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1780 int res = validate_import_as_name(CHILD(tree, 0)); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1781 int i; |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1782 |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1783 for (i = 1; res && (i + 1 < nch); i += 2) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1784 res = (validate_comma(CHILD(tree, i)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1785 && validate_import_as_name(CHILD(tree, i + 1))); |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1786 return (res); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1787 } |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1788 |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1789 |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1790 /* 'import' dotted_as_names */ |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1791 static int |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1792 validate_import_name(node *tree) |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1793 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1794 return (validate_ntype(tree, import_name) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1795 && validate_numnodes(tree, 2, "import_name") |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1796 && validate_name(CHILD(tree, 0), "import") |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1797 && validate_dotted_as_names(CHILD(tree, 1))); |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1798 } |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1799 |
|
62791
3aa22428582a
Merged revisions 82555 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
62789
diff
changeset
|
1800 /* Helper function to count the number of leading dots (or ellipsis tokens) in |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1801 * 'from ...module import name' |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1802 */ |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1803 static int |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1804 count_from_dots(node *tree) |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1805 { |
|
62791
3aa22428582a
Merged revisions 82555 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
62789
diff
changeset
|
1806 int i; |
|
3aa22428582a
Merged revisions 82555 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
62789
diff
changeset
|
1807 for (i = 1; i < NCH(tree); i++) |
|
3aa22428582a
Merged revisions 82555 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
62789
diff
changeset
|
1808 if (TYPE(CHILD(tree, i)) != DOT && TYPE(CHILD(tree, i)) != ELLIPSIS) |
|
3aa22428582a
Merged revisions 82555 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
62789
diff
changeset
|
1809 break; |
|
3aa22428582a
Merged revisions 82555 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
62789
diff
changeset
|
1810 return i - 1; |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1811 } |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1812 |
|
62789
692b7989cd92
Merged revisions 82552-82553 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
62774
diff
changeset
|
1813 /* import_from: ('from' ('.'* dotted_name | '.'+) |
|
692b7989cd92
Merged revisions 82552-82553 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
62774
diff
changeset
|
1814 * 'import' ('*' | '(' import_as_names ')' | import_as_names)) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1815 */ |
| 4084 | 1816 static int |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1817 validate_import_from(node *tree) |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1818 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1819 int nch = NCH(tree); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1820 int ndots = count_from_dots(tree); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1821 int havename = (TYPE(CHILD(tree, ndots + 1)) == dotted_name); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1822 int offset = ndots + havename; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1823 int res = validate_ntype(tree, import_from) |
|
62789
692b7989cd92
Merged revisions 82552-82553 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
62774
diff
changeset
|
1824 && (offset >= 1) |
|
692b7989cd92
Merged revisions 82552-82553 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
62774
diff
changeset
|
1825 && (nch >= 3 + offset) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1826 && validate_name(CHILD(tree, 0), "from") |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1827 && (!havename || validate_dotted_name(CHILD(tree, ndots + 1))) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1828 && validate_name(CHILD(tree, offset + 1), "import"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1829 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1830 if (res && TYPE(CHILD(tree, offset + 2)) == LPAR) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1831 res = ((nch == offset + 5) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1832 && validate_lparen(CHILD(tree, offset + 2)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1833 && validate_import_as_names(CHILD(tree, offset + 3)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1834 && validate_rparen(CHILD(tree, offset + 4))); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1835 else if (res && TYPE(CHILD(tree, offset + 2)) != STAR) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1836 res = validate_import_as_names(CHILD(tree, offset + 2)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1837 return (res); |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1838 } |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1839 |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1840 |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1841 /* import_stmt: import_name | import_from */ |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1842 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1843 validate_import_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1844 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1845 int nch = NCH(tree); |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1846 int res = validate_numnodes(tree, 1, "import_stmt"); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1847 |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1848 if (res) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1849 int ntype = TYPE(CHILD(tree, 0)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1850 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
1851 if (ntype == import_name || ntype == import_from) |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1852 res = validate_node(CHILD(tree, 0)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1853 else { |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1854 res = 0; |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1855 err_string("illegal import_stmt child type"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1856 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1857 } |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1858 else if (nch == 1) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1859 res = 0; |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1860 PyErr_Format(parser_error, |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1861 "Unrecognized child node of import_stmt: %d.", |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1862 TYPE(CHILD(tree, 0))); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1863 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1864 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1865 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1866 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1867 |
|
76647
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1868 /* global_stmt: |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1869 * |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1870 * 'global' NAME (',' NAME)* |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1871 */ |
| 4084 | 1872 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1873 validate_global_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1874 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1875 int j; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1876 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1877 int res = (validate_ntype(tree, global_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1878 && is_even(nch) && (nch >= 2)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1879 |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
1880 if (!res && !PyErr_Occurred()) |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
1881 err_string("illegal global statement"); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
1882 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1883 if (res) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1884 res = (validate_name(CHILD(tree, 0), "global") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1885 && validate_ntype(CHILD(tree, 1), NAME)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1886 for (j = 2; res && (j < nch); j += 2) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1887 res = (validate_comma(CHILD(tree, j)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1888 && validate_ntype(CHILD(tree, j + 1), NAME)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1889 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1890 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1891 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1892 |
|
76647
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1893 /* nonlocal_stmt: |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1894 * |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1895 * 'nonlocal' NAME (',' NAME)* |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1896 */ |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1897 static int |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1898 validate_nonlocal_stmt(node *tree) |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1899 { |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1900 int j; |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1901 int nch = NCH(tree); |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1902 int res = (validate_ntype(tree, nonlocal_stmt) |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1903 && is_even(nch) && (nch >= 2)); |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1904 |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1905 if (!res && !PyErr_Occurred()) |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1906 err_string("illegal nonlocal statement"); |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1907 |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1908 if (res) |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1909 res = (validate_name(CHILD(tree, 0), "nonlocal") |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1910 && validate_ntype(CHILD(tree, 1), NAME)); |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1911 for (j = 2; res && (j < nch); j += 2) |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1912 res = (validate_comma(CHILD(tree, j)) |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1913 && validate_ntype(CHILD(tree, j + 1), NAME)); |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1914 |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1915 return res; |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
1916 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1917 |
| 5236 | 1918 /* assert_stmt: |
| 1919 * | |
| 1920 * 'assert' test [',' test] | |
| 1921 */ | |
| 1922 static int | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1923 validate_assert_stmt(node *tree) |
| 5236 | 1924 { |
| 1925 int nch = NCH(tree); | |
| 1926 int res = (validate_ntype(tree, assert_stmt) | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1927 && ((nch == 2) || (nch == 4)) |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
1928 && (validate_name(CHILD(tree, 0), "assert")) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1929 && validate_test(CHILD(tree, 1))); |
| 5236 | 1930 |
| 1931 if (!res && !PyErr_Occurred()) | |
| 15318 | 1932 err_string("illegal assert statement"); |
| 5236 | 1933 if (res && (nch > 2)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1934 res = (validate_comma(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1935 && validate_test(CHILD(tree, 3))); |
| 5236 | 1936 |
| 1937 return (res); | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1938 } |
| 5236 | 1939 |
| 1940 | |
| 4084 | 1941 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1942 validate_while(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1943 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1944 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1945 int res = (validate_ntype(tree, while_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1946 && ((nch == 4) || (nch == 7)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1947 && validate_name(CHILD(tree, 0), "while") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1948 && validate_test(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1949 && validate_colon(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1950 && validate_suite(CHILD(tree, 3))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1951 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1952 if (res && (nch == 7)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1953 res = (validate_name(CHILD(tree, 4), "else") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1954 && validate_colon(CHILD(tree, 5)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1955 && validate_suite(CHILD(tree, 6))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1956 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1957 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1958 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1959 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1960 |
| 4084 | 1961 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1962 validate_for(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1963 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1964 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1965 int res = (validate_ntype(tree, for_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1966 && ((nch == 6) || (nch == 9)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1967 && validate_name(CHILD(tree, 0), "for") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1968 && validate_exprlist(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1969 && validate_name(CHILD(tree, 2), "in") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1970 && validate_testlist(CHILD(tree, 3)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1971 && validate_colon(CHILD(tree, 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1972 && validate_suite(CHILD(tree, 5))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1973 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1974 if (res && (nch == 9)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1975 res = (validate_name(CHILD(tree, 6), "else") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1976 && validate_colon(CHILD(tree, 7)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1977 && validate_suite(CHILD(tree, 8))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1978 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1979 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1980 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1981 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1982 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1983 /* try_stmt: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1984 * 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite] |
|
50079
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
1985 ['finally' ':' suite] |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1986 * | 'try' ':' suite 'finally' ':' suite |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1987 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1988 */ |
| 4084 | 1989 static int |
| 13503 | 1990 validate_try(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1991 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1992 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1993 int pos = 3; |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1994 int res = (validate_ntype(tree, try_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1995 && (nch >= 6) && ((nch % 3) == 0)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1996 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1997 if (res) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1998 res = (validate_name(CHILD(tree, 0), "try") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1999 && validate_colon(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2000 && validate_suite(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2001 && validate_colon(CHILD(tree, nch - 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2002 && validate_suite(CHILD(tree, nch - 1))); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
2003 else if (!PyErr_Occurred()) { |
|
13325
7bac10a9bb61
Andrew Kuchling <akuchlin@mems-exchange.org>:
Fred Drake <fdrake@acm.org>
parents:
13256
diff
changeset
|
2004 const char* name = "except"; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2005 if (TYPE(CHILD(tree, nch - 3)) != except_clause) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2006 name = STR(CHILD(tree, nch - 3)); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
2007 |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
2008 PyErr_Format(parser_error, |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
2009 "Illegal number of children for try/%s node.", name); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2010 } |
|
50079
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2011 /* Handle try/finally statement */ |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2012 if (res && (TYPE(CHILD(tree, pos)) == NAME) && |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2013 (strcmp(STR(CHILD(tree, pos)), "finally") == 0)) { |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2014 res = (validate_numnodes(tree, 6, "try/finally") |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2015 && validate_colon(CHILD(tree, 4)) |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2016 && validate_suite(CHILD(tree, 5))); |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2017 return (res); |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2018 } |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2019 /* try/except statement: skip past except_clause sections */ |
|
54082
17d1946540d4
Merged revisions 72645 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
2020 while (res && pos < nch && (TYPE(CHILD(tree, pos)) == except_clause)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2021 res = (validate_except_clause(CHILD(tree, pos)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2022 && validate_colon(CHILD(tree, pos + 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2023 && validate_suite(CHILD(tree, pos + 2))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2024 pos += 3; |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2025 } |
|
50079
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2026 /* skip else clause */ |
|
54082
17d1946540d4
Merged revisions 72645 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
51271
diff
changeset
|
2027 if (res && pos < nch && (TYPE(CHILD(tree, pos)) == NAME) && |
|
50079
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2028 (strcmp(STR(CHILD(tree, pos)), "else") == 0)) { |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2029 res = (validate_colon(CHILD(tree, pos + 1)) |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2030 && validate_suite(CHILD(tree, pos + 2))); |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2031 pos += 3; |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2032 } |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2033 if (res && pos < nch) { |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2034 /* last clause must be a finally */ |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2035 res = (validate_name(CHILD(tree, pos), "finally") |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2036 && validate_numnodes(tree, pos + 3, "try/except/finally") |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2037 && validate_colon(CHILD(tree, pos + 1)) |
|
a86cdf49b821
Manual merge of r67639 from py3k branch:
Georg Brandl <georg@python.org>
parents:
49908
diff
changeset
|
2038 && validate_suite(CHILD(tree, pos + 2))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2039 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2040 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2041 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2042 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2043 |
| 4084 | 2044 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2045 validate_except_clause(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2046 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2047 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2048 int res = (validate_ntype(tree, except_clause) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2049 && ((nch == 1) || (nch == 2) || (nch == 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2050 && validate_name(CHILD(tree, 0), "except")); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2051 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2052 if (res && (nch > 1)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2053 res = validate_test(CHILD(tree, 1)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2054 if (res && (nch == 4)) |
|
40587
6b18a095c2e7
SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents:
40529
diff
changeset
|
2055 res = (validate_name(CHILD(tree, 2), "as") |
|
6b18a095c2e7
SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents:
40529
diff
changeset
|
2056 && validate_ntype(CHILD(tree, 3), NAME)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2057 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2058 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2059 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2060 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2061 |
| 4084 | 2062 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2063 validate_test(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2064 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2065 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2066 int res = validate_ntype(tree, test) && is_odd(nch); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2067 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2068 if (res && (TYPE(CHILD(tree, 0)) == lambdef)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2069 res = ((nch == 1) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2070 && validate_lambdef(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2071 else if (res) { |
|
36673
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2072 res = validate_or_test(CHILD(tree, 0)); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2073 res = (res && (nch == 1 || (nch == 5 && |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2074 validate_name(CHILD(tree, 1), "if") && |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2075 validate_or_test(CHILD(tree, 2)) && |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2076 validate_name(CHILD(tree, 3), "else") && |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2077 validate_test(CHILD(tree, 4))))); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2078 } |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2079 return (res); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2080 } |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2081 |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2082 static int |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2083 validate_test_nocond(node *tree) |
|
36673
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2084 { |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2085 int nch = NCH(tree); |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2086 int res = validate_ntype(tree, test_nocond) && (nch == 1); |
|
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2087 |
|
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2088 if (res && (TYPE(CHILD(tree, 0)) == lambdef_nocond)) |
|
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2089 res = (validate_lambdef_nocond(CHILD(tree, 0))); |
|
36673
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2090 else if (res) { |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2091 res = (validate_or_test(CHILD(tree, 0))); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2092 } |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2093 return (res); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2094 } |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2095 |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2096 static int |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2097 validate_or_test(node *tree) |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2098 { |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2099 int nch = NCH(tree); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2100 int res = validate_ntype(tree, or_test) && is_odd(nch); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2101 |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2102 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2103 int pos; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2104 res = validate_and_test(CHILD(tree, 0)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2105 for (pos = 1; res && (pos < nch); pos += 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2106 res = (validate_name(CHILD(tree, pos), "or") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2107 && validate_and_test(CHILD(tree, pos + 1))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2108 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2109 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2110 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2111 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2112 |
| 4084 | 2113 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2114 validate_and_test(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2115 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2116 int pos; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2117 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2118 int res = (validate_ntype(tree, and_test) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2119 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2120 && validate_not_test(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2121 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2122 for (pos = 1; res && (pos < nch); pos += 2) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2123 res = (validate_name(CHILD(tree, pos), "and") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2124 && validate_not_test(CHILD(tree, 0))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2125 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2126 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2127 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2128 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2129 |
| 4084 | 2130 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2131 validate_not_test(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2132 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2133 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2134 int res = validate_ntype(tree, not_test) && ((nch == 1) || (nch == 2)); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2135 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2136 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2137 if (nch == 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2138 res = (validate_name(CHILD(tree, 0), "not") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2139 && validate_not_test(CHILD(tree, 1))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2140 else if (nch == 1) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2141 res = validate_comparison(CHILD(tree, 0)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2142 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2143 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2144 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2145 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2146 |
| 4084 | 2147 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2148 validate_comparison(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2149 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2150 int pos; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2151 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2152 int res = (validate_ntype(tree, comparison) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2153 && is_odd(nch) |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2154 && validate_expr(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2155 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2156 for (pos = 1; res && (pos < nch); pos += 2) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2157 res = (validate_comp_op(CHILD(tree, pos)) |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2158 && validate_expr(CHILD(tree, pos + 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2159 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2160 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2161 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2162 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2163 |
| 4084 | 2164 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2165 validate_comp_op(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2166 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2167 int res = 0; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2168 int nch = NCH(tree); |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2169 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2170 if (!validate_ntype(tree, comp_op)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2171 return (0); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2172 if (nch == 1) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2173 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2174 * Only child will be a terminal with a well-defined symbolic name |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2175 * or a NAME with a string of either 'is' or 'in' |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2176 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2177 tree = CHILD(tree, 0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2178 switch (TYPE(tree)) { |
|
74356
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
2179 case LESS: |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
2180 case GREATER: |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
2181 case EQEQUAL: |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
2182 case EQUAL: |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
2183 case LESSEQUAL: |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
2184 case GREATEREQUAL: |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
2185 case NOTEQUAL: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2186 res = 1; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2187 break; |
|
74356
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
2188 case NAME: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2189 res = ((strcmp(STR(tree), "in") == 0) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2190 || (strcmp(STR(tree), "is") == 0)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2191 if (!res) { |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
2192 PyErr_Format(parser_error, |
| 15318 | 2193 "illegal operator '%s'", STR(tree)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2194 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2195 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2196 default: |
| 15318 | 2197 err_string("illegal comparison operator type"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2198 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2199 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2200 } |
| 4600 | 2201 else if ((res = validate_numnodes(tree, 2, "comp_op")) != 0) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2202 res = (validate_ntype(CHILD(tree, 0), NAME) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2203 && validate_ntype(CHILD(tree, 1), NAME) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2204 && (((strcmp(STR(CHILD(tree, 0)), "is") == 0) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2205 && (strcmp(STR(CHILD(tree, 1)), "not") == 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2206 || ((strcmp(STR(CHILD(tree, 0)), "not") == 0) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2207 && (strcmp(STR(CHILD(tree, 1)), "in") == 0)))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2208 if (!res && !PyErr_Occurred()) |
| 15318 | 2209 err_string("unknown comparison operator"); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2210 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2211 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2212 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2213 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2214 |
| 4084 | 2215 static int |
|
41699
e16c8e5c5ca4
Merged revisions 55225-55227,55229-55269 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41464
diff
changeset
|
2216 validate_star_expr(node *tree) |
|
e16c8e5c5ca4
Merged revisions 55225-55227,55229-55269 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41464
diff
changeset
|
2217 { |
|
e16c8e5c5ca4
Merged revisions 55225-55227,55229-55269 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41464
diff
changeset
|
2218 int res = validate_ntype(tree, star_expr); |
|
e16c8e5c5ca4
Merged revisions 55225-55227,55229-55269 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41464
diff
changeset
|
2219 if (!res) return res; |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2220 if (!validate_numnodes(tree, 2, "star_expr")) |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2221 return 0; |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2222 return validate_ntype(CHILD(tree, 0), STAR) && \ |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2223 validate_expr(CHILD(tree, 1)); |
|
41699
e16c8e5c5ca4
Merged revisions 55225-55227,55229-55269 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41464
diff
changeset
|
2224 } |
|
e16c8e5c5ca4
Merged revisions 55225-55227,55229-55269 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41464
diff
changeset
|
2225 |
|
e16c8e5c5ca4
Merged revisions 55225-55227,55229-55269 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41464
diff
changeset
|
2226 |
|
e16c8e5c5ca4
Merged revisions 55225-55227,55229-55269 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41464
diff
changeset
|
2227 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2228 validate_expr(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2229 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2230 int j; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2231 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2232 int res = (validate_ntype(tree, expr) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2233 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2234 && validate_xor_expr(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2235 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2236 for (j = 2; res && (j < nch); j += 2) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2237 res = (validate_xor_expr(CHILD(tree, j)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2238 && validate_vbar(CHILD(tree, j - 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2239 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2240 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2241 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2242 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2243 |
| 4084 | 2244 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2245 validate_xor_expr(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2246 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2247 int j; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2248 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2249 int res = (validate_ntype(tree, xor_expr) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2250 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2251 && validate_and_expr(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2252 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2253 for (j = 2; res && (j < nch); j += 2) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2254 res = (validate_circumflex(CHILD(tree, j - 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2255 && validate_and_expr(CHILD(tree, j))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2256 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2257 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2258 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2259 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2260 |
| 4084 | 2261 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2262 validate_and_expr(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2263 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2264 int pos; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2265 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2266 int res = (validate_ntype(tree, and_expr) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2267 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2268 && validate_shift_expr(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2269 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2270 for (pos = 1; res && (pos < nch); pos += 2) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2271 res = (validate_ampersand(CHILD(tree, pos)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2272 && validate_shift_expr(CHILD(tree, pos + 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2273 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2274 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2275 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2276 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2277 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2278 static int |
| 13503 | 2279 validate_chain_two_ops(node *tree, int (*termvalid)(node *), int op1, int op2) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2280 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2281 int pos = 1; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2282 int nch = NCH(tree); |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2283 int res = (is_odd(nch) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2284 && (*termvalid)(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2285 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2286 for ( ; res && (pos < nch); pos += 2) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2287 if (TYPE(CHILD(tree, pos)) != op1) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2288 res = validate_ntype(CHILD(tree, pos), op2); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2289 if (res) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2290 res = (*termvalid)(CHILD(tree, pos + 1)); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2291 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2292 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2293 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2294 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2295 |
| 4084 | 2296 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2297 validate_shift_expr(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2298 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2299 return (validate_ntype(tree, shift_expr) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2300 && validate_chain_two_ops(tree, validate_arith_expr, |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2301 LEFTSHIFT, RIGHTSHIFT)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2302 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2303 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2304 |
| 4084 | 2305 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2306 validate_arith_expr(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2307 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2308 return (validate_ntype(tree, arith_expr) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2309 && validate_chain_two_ops(tree, validate_term, PLUS, MINUS)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2310 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2311 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2312 |
| 4084 | 2313 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2314 validate_term(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2315 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2316 int pos = 1; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2317 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2318 int res = (validate_ntype(tree, term) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2319 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2320 && validate_factor(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2321 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2322 for ( ; res && (pos < nch); pos += 2) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2323 res = (((TYPE(CHILD(tree, pos)) == STAR) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2324 || (TYPE(CHILD(tree, pos)) == SLASH) |
|
27517
51abb5e86226
Teach the parsermodule about floor division. Fixes
Michael W. Hudson <mwh@python.net>
parents:
26979
diff
changeset
|
2325 || (TYPE(CHILD(tree, pos)) == DOUBLESLASH) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2326 || (TYPE(CHILD(tree, pos)) == PERCENT)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2327 && validate_factor(CHILD(tree, pos + 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2328 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2329 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2330 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2331 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2332 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2333 /* factor: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2334 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2335 * factor: ('+'|'-'|'~') factor | power |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2336 */ |
| 4084 | 2337 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2338 validate_factor(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2339 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2340 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2341 int res = (validate_ntype(tree, factor) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2342 && (((nch == 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2343 && ((TYPE(CHILD(tree, 0)) == PLUS) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2344 || (TYPE(CHILD(tree, 0)) == MINUS) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2345 || (TYPE(CHILD(tree, 0)) == TILDE)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2346 && validate_factor(CHILD(tree, 1))) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2347 || ((nch == 1) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2348 && validate_power(CHILD(tree, 0))))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2349 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2350 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2351 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2352 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2353 /* power: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2354 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2355 * power: atom trailer* ('**' factor)* |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2356 */ |
| 4084 | 2357 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2358 validate_power(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2359 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2360 int pos = 1; |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2361 int nch = NCH(tree); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2362 int res = (validate_ntype(tree, power) && (nch >= 1) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2363 && validate_atom(CHILD(tree, 0))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2364 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2365 while (res && (pos < nch) && (TYPE(CHILD(tree, pos)) == trailer)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2366 res = validate_trailer(CHILD(tree, pos++)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2367 if (res && (pos < nch)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2368 if (!is_even(nch - pos)) { |
| 15318 | 2369 err_string("illegal number of nodes for 'power'"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2370 return (0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2371 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2372 for ( ; res && (pos < (nch - 1)); pos += 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2373 res = (validate_doublestar(CHILD(tree, pos)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2374 && validate_factor(CHILD(tree, pos + 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2375 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2376 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2377 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2378 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2379 |
| 4084 | 2380 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2381 validate_atom(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2382 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2383 int pos; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2384 int nch = NCH(tree); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2385 int res = validate_ntype(tree, atom); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2386 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2387 if (res && nch < 1) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2388 res = validate_numnodes(tree, nch+1, "atom"); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2389 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2390 switch (TYPE(CHILD(tree, 0))) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2391 case LPAR: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2392 res = ((nch <= 3) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2393 && (validate_rparen(CHILD(tree, nch - 1)))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2394 |
|
35298
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
2395 if (res && (nch == 3)) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
2396 if (TYPE(CHILD(tree, 1))==yield_expr) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
2397 res = validate_yield_expr(CHILD(tree, 1)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
2398 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
2399 res = validate_testlist_comp(CHILD(tree, 1)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
2400 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2401 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2402 case LSQB: |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2403 if (nch == 2) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2404 res = validate_ntype(CHILD(tree, 1), RSQB); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2405 else if (nch == 3) |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2406 res = (validate_testlist_comp(CHILD(tree, 1)) |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2407 && validate_ntype(CHILD(tree, 2), RSQB)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2408 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2409 res = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2410 err_string("illegal list display atom"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2411 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2412 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2413 case LBRACE: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2414 res = ((nch <= 3) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2415 && validate_ntype(CHILD(tree, nch - 1), RBRACE)); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2416 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2417 if (res && (nch == 3)) |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2418 res = validate_dictorsetmaker(CHILD(tree, 1)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2419 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2420 case NAME: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2421 case NUMBER: |
|
76824
2b1cc84bf1d9
Issue #14741: Fix missing support for ellipsis in parser module.
Mark Dickinson <mdickinson@enthought.com>
parents:
76822
diff
changeset
|
2422 case ELLIPSIS: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2423 res = (nch == 1); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2424 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2425 case STRING: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2426 for (pos = 1; res && (pos < nch); ++pos) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2427 res = validate_ntype(CHILD(tree, pos), STRING); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2428 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2429 default: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2430 res = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2431 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2432 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2433 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2434 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2435 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2436 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2437 |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2438 /* testlist_comp: |
|
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2439 * test ( comp_for | (',' test)* [','] ) |
|
14129
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2440 */ |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2441 static int |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2442 validate_testlist_comp(node *tree) |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2443 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2444 int nch = NCH(tree); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2445 int ok = nch; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2446 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2447 if (nch == 0) |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2448 err_string("missing child nodes of testlist_comp"); |
|
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2449 else { |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2450 ok = validate_test_or_star_expr(CHILD(tree, 0)); |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2451 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2452 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2453 /* |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2454 * comp_for | (',' test)* [','] |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2455 */ |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2456 if (nch == 2 && TYPE(CHILD(tree, 1)) == comp_for) |
|
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2457 ok = validate_comp_for(CHILD(tree, 1)); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2458 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2459 /* (',' test)* [','] */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2460 int i = 1; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2461 while (ok && nch - i >= 2) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2462 ok = (validate_comma(CHILD(tree, i)) |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2463 && validate_test_or_star_expr(CHILD(tree, i+1))); |
|
14129
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2464 i += 2; |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2465 } |
|
14129
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2466 if (ok && i == nch-1) |
|
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2467 ok = validate_comma(CHILD(tree, i)); |
|
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2468 else if (i != nch) { |
|
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2469 ok = 0; |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2470 err_string("illegal trailing nodes for testlist_comp"); |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2471 } |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2472 } |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2473 return ok; |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2474 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2475 |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2476 /* decorator: |
|
33166
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2477 * '@' dotted_name [ '(' [arglist] ')' ] NEWLINE |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2478 */ |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2479 static int |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2480 validate_decorator(node *tree) |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2481 { |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2482 int ok; |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2483 int nch = NCH(tree); |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2484 ok = (validate_ntype(tree, decorator) && |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
2485 (nch == 3 || nch == 5 || nch == 6) && |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
2486 validate_at(CHILD(tree, 0)) && |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
2487 validate_dotted_name(CHILD(tree, 1)) && |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
2488 validate_newline(RCHILD(tree, -1))); |
|
33166
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2489 |
|
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2490 if (ok && nch != 3) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
2491 ok = (validate_lparen(CHILD(tree, 2)) && |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
2492 validate_rparen(RCHILD(tree, -2))); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
2493 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
2494 if (ok && nch == 6) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
2495 ok = validate_arglist(CHILD(tree, 3)); |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2496 } |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2497 |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2498 return ok; |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2499 } |
|
33166
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2500 |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2501 /* decorators: |
|
33166
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2502 * decorator+ |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2503 */ |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2504 static int |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2505 validate_decorators(node *tree) |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2506 { |
|
43862
d4f9706cb46b
Patch 1144 by David Binger, fix for parser module. With unittest.
Guido van Rossum <guido@python.org>
parents:
42856
diff
changeset
|
2507 int i, nch, ok; |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2508 nch = NCH(tree); |
|
33166
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2509 ok = validate_ntype(tree, decorators) && nch >= 1; |
|
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2510 |
|
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2511 for (i = 0; ok && i < nch; ++i) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
2512 ok = validate_decorator(CHILD(tree, i)); |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2513 |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2514 return ok; |
|
33166
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2515 } |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2516 |
|
54338
287ce30d08b5
Merged revisions 72924 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54082
diff
changeset
|
2517 /* with_item: |
|
287ce30d08b5
Merged revisions 72924 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54082
diff
changeset
|
2518 * test ['as' expr] |
|
49908
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
2519 */ |
|
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
2520 static int |
|
54338
287ce30d08b5
Merged revisions 72924 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54082
diff
changeset
|
2521 validate_with_item(node *tree) |
|
49908
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
2522 { |
|
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
2523 int nch = NCH(tree); |
|
54338
287ce30d08b5
Merged revisions 72924 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54082
diff
changeset
|
2524 int ok = (validate_ntype(tree, with_item) |
|
287ce30d08b5
Merged revisions 72924 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54082
diff
changeset
|
2525 && (nch == 1 || nch == 3) |
|
287ce30d08b5
Merged revisions 72924 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54082
diff
changeset
|
2526 && validate_test(CHILD(tree, 0))); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
2527 if (ok && nch == 3) |
|
54338
287ce30d08b5
Merged revisions 72924 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54082
diff
changeset
|
2528 ok = (validate_name(CHILD(tree, 1), "as") |
|
287ce30d08b5
Merged revisions 72924 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54082
diff
changeset
|
2529 && validate_expr(CHILD(tree, 2))); |
|
287ce30d08b5
Merged revisions 72924 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54082
diff
changeset
|
2530 return ok; |
|
49908
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
2531 } |
|
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
2532 |
|
54338
287ce30d08b5
Merged revisions 72924 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54082
diff
changeset
|
2533 /* with_stmt: |
|
287ce30d08b5
Merged revisions 72924 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54082
diff
changeset
|
2534 * 0 1 ... -2 -1 |
|
287ce30d08b5
Merged revisions 72924 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54082
diff
changeset
|
2535 * 'with' with_item (',' with_item)* ':' suite |
|
49908
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
2536 */ |
|
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
2537 static int |
|
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
2538 validate_with_stmt(node *tree) |
|
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
2539 { |
|
54338
287ce30d08b5
Merged revisions 72924 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54082
diff
changeset
|
2540 int i; |
|
49908
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
2541 int nch = NCH(tree); |
|
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
2542 int ok = (validate_ntype(tree, with_stmt) |
|
54338
287ce30d08b5
Merged revisions 72924 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54082
diff
changeset
|
2543 && (nch % 2 == 0) |
|
49908
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
2544 && validate_name(CHILD(tree, 0), "with") |
|
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
2545 && validate_colon(RCHILD(tree, -2)) |
|
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
2546 && validate_suite(RCHILD(tree, -1))); |
|
54338
287ce30d08b5
Merged revisions 72924 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54082
diff
changeset
|
2547 for (i = 1; ok && i < nch - 2; i += 2) |
|
287ce30d08b5
Merged revisions 72924 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54082
diff
changeset
|
2548 ok = validate_with_item(CHILD(tree, i)); |
|
287ce30d08b5
Merged revisions 72924 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54082
diff
changeset
|
2549 return ok; |
|
49908
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
2550 } |
|
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
2551 |
|
76635
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2552 /* funcdef: 'def' NAME parameters ['->' test] ':' suite */ |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2553 |
| 4084 | 2554 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2555 validate_funcdef(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2556 { |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2557 int nch = NCH(tree); |
|
76635
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2558 int res = validate_ntype(tree, funcdef); |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2559 if (res) { |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2560 if (nch == 5) { |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2561 res = (validate_name(CHILD(tree, 0), "def") |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2562 && validate_ntype(CHILD(tree, 1), NAME) |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2563 && validate_parameters(CHILD(tree, 2)) |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2564 && validate_colon(CHILD(tree, 3)) |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2565 && validate_suite(CHILD(tree, 4))); |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2566 } |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2567 else if (nch == 7) { |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2568 res = (validate_name(CHILD(tree, 0), "def") |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2569 && validate_ntype(CHILD(tree, 1), NAME) |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2570 && validate_parameters(CHILD(tree, 2)) |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2571 && validate_rarrow(CHILD(tree, 3)) |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2572 && validate_test(CHILD(tree, 4)) |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2573 && validate_colon(CHILD(tree, 5)) |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2574 && validate_suite(CHILD(tree, 6))); |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2575 } |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2576 else { |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2577 res = 0; |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2578 err_string("illegal number of children for funcdef"); |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2579 } |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2580 } |
|
9f57d66689ca
Issue #9154: Fix parser module to understand function annotations.
Mark Dickinson <mdickinson@enthought.com>
parents:
68489
diff
changeset
|
2581 return res; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2582 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2583 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2584 |
|
41824
24b60622b944
Merged revisions 55407-55513 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41717
diff
changeset
|
2585 /* decorated |
|
24b60622b944
Merged revisions 55407-55513 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41717
diff
changeset
|
2586 * decorators (classdef | funcdef) |
|
24b60622b944
Merged revisions 55407-55513 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41717
diff
changeset
|
2587 */ |
|
24b60622b944
Merged revisions 55407-55513 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41717
diff
changeset
|
2588 static int |
|
24b60622b944
Merged revisions 55407-55513 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41717
diff
changeset
|
2589 validate_decorated(node *tree) |
|
24b60622b944
Merged revisions 55407-55513 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41717
diff
changeset
|
2590 { |
|
62774
18282039c5c9
Merged revisions 82537 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61467
diff
changeset
|
2591 int nch = NCH(tree); |
|
18282039c5c9
Merged revisions 82537 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61467
diff
changeset
|
2592 int ok = (validate_ntype(tree, decorated) |
|
18282039c5c9
Merged revisions 82537 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61467
diff
changeset
|
2593 && (nch == 2) |
|
18282039c5c9
Merged revisions 82537 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61467
diff
changeset
|
2594 && validate_decorators(RCHILD(tree, -2))); |
|
18282039c5c9
Merged revisions 82537 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61467
diff
changeset
|
2595 if (TYPE(RCHILD(tree, -1)) == funcdef) |
|
18282039c5c9
Merged revisions 82537 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61467
diff
changeset
|
2596 ok = ok && validate_funcdef(RCHILD(tree, -1)); |
|
18282039c5c9
Merged revisions 82537 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61467
diff
changeset
|
2597 else |
|
18282039c5c9
Merged revisions 82537 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61467
diff
changeset
|
2598 ok = ok && validate_class(RCHILD(tree, -1)); |
|
18282039c5c9
Merged revisions 82537 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61467
diff
changeset
|
2599 return ok; |
|
41824
24b60622b944
Merged revisions 55407-55513 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41717
diff
changeset
|
2600 } |
|
24b60622b944
Merged revisions 55407-55513 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41717
diff
changeset
|
2601 |
| 4084 | 2602 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2603 validate_lambdef(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2604 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2605 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2606 int res = (validate_ntype(tree, lambdef) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2607 && ((nch == 3) || (nch == 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2608 && validate_name(CHILD(tree, 0), "lambda") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2609 && validate_colon(CHILD(tree, nch - 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2610 && validate_test(CHILD(tree, nch - 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2611 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2612 if (res && (nch == 4)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2613 res = validate_varargslist(CHILD(tree, 1)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2614 else if (!res && !PyErr_Occurred()) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2615 (void) validate_numnodes(tree, 3, "lambdef"); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2616 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2617 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2618 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2619 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2620 |
|
36673
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2621 static int |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2622 validate_lambdef_nocond(node *tree) |
|
36673
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2623 { |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2624 int nch = NCH(tree); |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2625 int res = (validate_ntype(tree, lambdef_nocond) |
|
36673
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2626 && ((nch == 3) || (nch == 4)) |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2627 && validate_name(CHILD(tree, 0), "lambda") |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2628 && validate_colon(CHILD(tree, nch - 2)) |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2629 && validate_test(CHILD(tree, nch - 1))); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2630 |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2631 if (res && (nch == 4)) |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2632 res = validate_varargslist(CHILD(tree, 1)); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2633 else if (!res && !PyErr_Occurred()) |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2634 (void) validate_numnodes(tree, 3, "lambdef_nocond"); |
|
36673
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2635 |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2636 return (res); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2637 } |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2638 |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2639 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2640 /* arglist: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2641 * |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2642 * (argument ',')* (argument [','] | '*' test [',' '**' test] | '**' test) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2643 */ |
| 4084 | 2644 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2645 validate_arglist(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2646 { |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2647 int nch = NCH(tree); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2648 int i = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2649 int ok = 1; |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2650 |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2651 if (nch <= 0) |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2652 /* raise the right error from having an invalid number of children */ |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2653 return validate_numnodes(tree, nch + 1, "arglist"); |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2654 |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2655 if (nch > 1) { |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2656 for (i=0; i<nch; i++) { |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2657 if (TYPE(CHILD(tree, i)) == argument) { |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2658 node *ch = CHILD(tree, i); |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2659 if (NCH(ch) == 2 && TYPE(CHILD(ch, 1)) == comp_for) { |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2660 err_string("need '(', ')' for generator expression"); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2661 return 0; |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2662 } |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2663 } |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2664 } |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2665 } |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2666 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2667 while (ok && nch-i >= 2) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2668 /* skip leading (argument ',') */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2669 ok = (validate_argument(CHILD(tree, i)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2670 && validate_comma(CHILD(tree, i+1))); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2671 if (ok) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2672 i += 2; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2673 else |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2674 PyErr_Clear(); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2675 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2676 ok = 1; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2677 if (nch-i > 0) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2678 /* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2679 * argument | '*' test [',' '**' test] | '**' test |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2680 */ |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2681 int sym = TYPE(CHILD(tree, i)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2682 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2683 if (sym == argument) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2684 ok = validate_argument(CHILD(tree, i)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2685 if (ok && i+1 != nch) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2686 err_string("illegal arglist specification" |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2687 " (extra stuff on end)"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2688 ok = 0; |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2689 } |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2690 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2691 else if (sym == STAR) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2692 ok = validate_star(CHILD(tree, i)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2693 if (ok && (nch-i == 2)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2694 ok = validate_test(CHILD(tree, i+1)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2695 else if (ok && (nch-i == 5)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2696 ok = (validate_test(CHILD(tree, i+1)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2697 && validate_comma(CHILD(tree, i+2)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2698 && validate_doublestar(CHILD(tree, i+3)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2699 && validate_test(CHILD(tree, i+4))); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2700 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2701 err_string("illegal use of '*' in arglist"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2702 ok = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2703 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2704 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2705 else if (sym == DOUBLESTAR) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2706 if (nch-i == 2) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2707 ok = (validate_doublestar(CHILD(tree, i)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2708 && validate_test(CHILD(tree, i+1))); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2709 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2710 err_string("illegal use of '**' in arglist"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2711 ok = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2712 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2713 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2714 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2715 err_string("illegal arglist specification"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2716 ok = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2717 } |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2718 } |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2719 return (ok); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2720 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2721 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2722 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2723 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2724 /* argument: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2725 * |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2726 * [test '='] test [comp_for] |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2727 */ |
| 4084 | 2728 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2729 validate_argument(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2730 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2731 int nch = NCH(tree); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2732 int res = (validate_ntype(tree, argument) |
|
74356
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
2733 && ((nch == 1) || (nch == 2) || (nch == 3))); |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
2734 if (res) |
|
d64ac9ab4cd0
Implement PEP 380 - 'yield from' (closes #11682)
Nick Coghlan <ncoghlan@gmail.com>
parents:
72925
diff
changeset
|
2735 res = validate_test(CHILD(tree, 0)); |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2736 if (res && (nch == 2)) |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2737 res = validate_comp_for(CHILD(tree, 1)); |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2738 else if (res && (nch == 3)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2739 res = (validate_equal(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2740 && validate_test(CHILD(tree, 2))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2741 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2742 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2743 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2744 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2745 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2746 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2747 /* trailer: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2748 * |
| 4084 | 2749 * '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2750 */ |
| 4084 | 2751 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2752 validate_trailer(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2753 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2754 int nch = NCH(tree); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2755 int res = validate_ntype(tree, trailer) && ((nch == 2) || (nch == 3)); |
|
1406
474823e5f7dc
* parsermodule.c, Makefile, config.c: rudimentary interface to the Python
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2756 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2757 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2758 switch (TYPE(CHILD(tree, 0))) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2759 case LPAR: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2760 res = validate_rparen(CHILD(tree, nch - 1)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2761 if (res && (nch == 3)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2762 res = validate_arglist(CHILD(tree, 1)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2763 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2764 case LSQB: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2765 res = (validate_numnodes(tree, 3, "trailer") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2766 && validate_subscriptlist(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2767 && validate_ntype(CHILD(tree, 2), RSQB)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2768 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2769 case DOT: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2770 res = (validate_numnodes(tree, 2, "trailer") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2771 && validate_ntype(CHILD(tree, 1), NAME)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2772 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2773 default: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2774 res = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2775 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2776 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2777 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2778 else { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2779 (void) validate_numnodes(tree, 2, "trailer"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2780 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2781 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2782 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2783 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2784 |
| 4084 | 2785 /* subscriptlist: |
| 2786 * | |
| 2787 * subscript (',' subscript)* [','] | |
| 2788 */ | |
| 2789 static int | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2790 validate_subscriptlist(node *tree) |
| 4084 | 2791 { |
| 2792 return (validate_repeating_list(tree, subscriptlist, | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2793 validate_subscript, "subscriptlist")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2794 } |
| 4084 | 2795 |
| 2796 | |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2797 /* subscript: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2798 * |
| 4084 | 2799 * '.' '.' '.' | test | [test] ':' [test] [sliceop] |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2800 */ |
| 4084 | 2801 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2802 validate_subscript(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2803 { |
| 4084 | 2804 int offset = 0; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2805 int nch = NCH(tree); |
| 4084 | 2806 int res = validate_ntype(tree, subscript) && (nch >= 1) && (nch <= 4); |
| 2807 | |
| 2808 if (!res) { | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2809 if (!PyErr_Occurred()) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2810 err_string("invalid number of arguments for subscript node"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2811 return (0); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2812 } |
| 4084 | 2813 if (TYPE(CHILD(tree, 0)) == DOT) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2814 /* take care of ('.' '.' '.') possibility */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2815 return (validate_numnodes(tree, 3, "subscript") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2816 && validate_dot(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2817 && validate_dot(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2818 && validate_dot(CHILD(tree, 2))); |
| 4084 | 2819 if (nch == 1) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2820 if (TYPE(CHILD(tree, 0)) == test) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2821 res = validate_test(CHILD(tree, 0)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2822 else |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2823 res = validate_colon(CHILD(tree, 0)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2824 return (res); |
| 4084 | 2825 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2826 /* Must be [test] ':' [test] [sliceop], |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2827 * but at least one of the optional components will |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2828 * be present, but we don't know which yet. |
| 4084 | 2829 */ |
| 2830 if ((TYPE(CHILD(tree, 0)) != COLON) || (nch == 4)) { | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2831 res = validate_test(CHILD(tree, 0)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2832 offset = 1; |
| 4084 | 2833 } |
| 2834 if (res) | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2835 res = validate_colon(CHILD(tree, offset)); |
| 4084 | 2836 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2837 int rem = nch - ++offset; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2838 if (rem) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2839 if (TYPE(CHILD(tree, offset)) == test) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2840 res = validate_test(CHILD(tree, offset)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2841 ++offset; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2842 --rem; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2843 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2844 if (res && rem) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2845 res = validate_sliceop(CHILD(tree, offset)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2846 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2847 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2848 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2849 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2850 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2851 |
| 4084 | 2852 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2853 validate_sliceop(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2854 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2855 int nch = NCH(tree); |
| 4084 | 2856 int res = ((nch == 1) || validate_numnodes(tree, 2, "sliceop")) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2857 && validate_ntype(tree, sliceop); |
| 4084 | 2858 if (!res && !PyErr_Occurred()) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2859 res = validate_numnodes(tree, 1, "sliceop"); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2860 } |
| 4084 | 2861 if (res) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2862 res = validate_colon(CHILD(tree, 0)); |
| 4084 | 2863 if (res && (nch == 2)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2864 res = validate_test(CHILD(tree, 1)); |
| 4084 | 2865 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2866 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2867 } |
| 4084 | 2868 |
| 2869 | |
| 2870 static int | |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2871 validate_test_or_star_expr(node *n) |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2872 { |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2873 if (TYPE(n) == test) |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2874 return validate_test(n); |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2875 return validate_star_expr(n); |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2876 } |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2877 |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2878 static int |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2879 validate_expr_or_star_expr(node *n) |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2880 { |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2881 if (TYPE(n) == expr) |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2882 return validate_expr(n); |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2883 return validate_star_expr(n); |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2884 } |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2885 |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2886 |
|
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2887 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2888 validate_exprlist(node *tree) |
| 4084 | 2889 { |
| 2890 return (validate_repeating_list(tree, exprlist, | |
|
56237
7ee140b7ef93
fix an ambiguity in the grammar from the implementation of extended unpacking
Benjamin Peterson <benjamin@python.org>
parents:
54338
diff
changeset
|
2891 validate_expr_or_star_expr, "exprlist")); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2892 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2893 |
|
76822
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2894 /* |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2895 * dictorsetmaker: |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2896 * |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2897 * (test ':' test (comp_for | (',' test ':' test)* [','])) | |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2898 * (test (comp_for | (',' test)* [','])) |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2899 */ |
| 4084 | 2900 static int |
|
41464
060c79f6d919
Hide list comp variables and support set comprehensions
Nick Coghlan <ncoghlan@gmail.com>
parents:
40774
diff
changeset
|
2901 validate_dictorsetmaker(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2902 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2903 int nch = NCH(tree); |
|
76822
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2904 int res; |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2905 int i = 0; |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2906 |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2907 res = validate_ntype(tree, dictorsetmaker); |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2908 if (!res) |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2909 return 0; |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2910 |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2911 if (nch - i < 1) { |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2912 (void) validate_numnodes(tree, 1, "dictorsetmaker"); |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2913 return 0; |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2914 } |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2915 |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2916 res = validate_test(CHILD(tree, i++)); |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2917 if (!res) |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2918 return 0; |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2919 |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2920 if (nch - i >= 2 && TYPE(CHILD(tree, i)) == COLON) { |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2921 /* Dictionary display or dictionary comprehension. */ |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2922 res = (validate_colon(CHILD(tree, i++)) |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2923 && validate_test(CHILD(tree, i++))); |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2924 if (!res) |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2925 return 0; |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2926 |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2927 if (nch - i >= 1 && TYPE(CHILD(tree, i)) == comp_for) { |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2928 /* Dictionary comprehension. */ |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2929 res = validate_comp_for(CHILD(tree, i++)); |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2930 if (!res) |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2931 return 0; |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2932 } |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2933 else { |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2934 /* Dictionary display. */ |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2935 while (nch - i >= 4) { |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2936 res = (validate_comma(CHILD(tree, i++)) |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2937 && validate_test(CHILD(tree, i++)) |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2938 && validate_colon(CHILD(tree, i++)) |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2939 && validate_test(CHILD(tree, i++))); |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2940 if (!res) |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2941 return 0; |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2942 } |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2943 if (nch - i == 1) { |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2944 res = validate_comma(CHILD(tree, i++)); |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2945 if (!res) |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2946 return 0; |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2947 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2948 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2949 } |
|
76822
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2950 else { |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2951 /* Set display or set comprehension. */ |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2952 if (nch - i >= 1 && TYPE(CHILD(tree, i)) == comp_for) { |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2953 /* Set comprehension. */ |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2954 res = validate_comp_for(CHILD(tree, i++)); |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2955 if (!res) |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2956 return 0; |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2957 } |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2958 else { |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2959 /* Set display. */ |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2960 while (nch - i >= 2) { |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2961 res = (validate_comma(CHILD(tree, i++)) |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2962 && validate_test(CHILD(tree, i++))); |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2963 if (!res) |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2964 return 0; |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2965 } |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2966 if (nch - i == 1) { |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2967 res = validate_comma(CHILD(tree, i++)); |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2968 if (!res) |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2969 return 0; |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2970 } |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2971 } |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2972 } |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2973 |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2974 if (nch - i > 0) { |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2975 err_string("Illegal trailing nodes for dictorsetmaker."); |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2976 return 0; |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2977 } |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2978 |
|
129289144dfb
Issue #14697: Fix missing parser module support for set displays and set comprehensions.
Mark Dickinson <mdickinson@enthought.com>
parents:
76818
diff
changeset
|
2979 return 1; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2980 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2981 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2982 |
| 4084 | 2983 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2984 validate_eval_input(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2985 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2986 int pos; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2987 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2988 int res = (validate_ntype(tree, eval_input) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2989 && (nch >= 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2990 && validate_testlist(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2991 && validate_ntype(CHILD(tree, nch - 1), ENDMARKER)); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2992 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2993 for (pos = 1; res && (pos < (nch - 1)); ++pos) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2994 res = validate_ntype(CHILD(tree, pos), NEWLINE); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2995 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2996 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2997 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2998 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2999 |
| 4084 | 3000 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3001 validate_node(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3002 { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3003 int nch = 0; /* num. children on current node */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3004 int res = 1; /* result value */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3005 node* next = 0; /* node to process after this one */ |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3006 |
|
18247
e3cf3348feca
Properly use &&. Closes bug #434989.
Martin v. Löwis <martin@v.loewis.de>
parents:
15751
diff
changeset
|
3007 while (res && (tree != 0)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3008 nch = NCH(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3009 next = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3010 switch (TYPE(tree)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3011 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3012 * Definition nodes. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3013 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3014 case funcdef: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3015 res = validate_funcdef(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3016 break; |
|
49908
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
3017 case with_stmt: |
|
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
3018 res = validate_with_stmt(tree); |
|
ed8adfef26c6
Merged revisions 67348,67355,67359,67362,67364-67365,67367-67368,67398,67423-67424,67432,67440-67441,67444-67445,67454-67455,67457-67458 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49633
diff
changeset
|
3019 break; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3020 case classdef: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3021 res = validate_class(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3022 break; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3023 case decorated: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3024 res = validate_decorated(tree); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3025 break; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3026 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3027 * "Trivial" parse tree nodes. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3028 * (Why did I call these trivial?) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3029 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3030 case stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3031 res = validate_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3032 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3033 case small_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3034 /* |
|
76647
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
3035 * expr_stmt | del_stmt | pass_stmt | flow_stmt | |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
3036 * import_stmt | global_stmt | nonlocal_stmt | assert_stmt |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3037 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3038 res = validate_small_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3039 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3040 case flow_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3041 res = (validate_numnodes(tree, 1, "flow_stmt") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3042 && ((TYPE(CHILD(tree, 0)) == break_stmt) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3043 || (TYPE(CHILD(tree, 0)) == continue_stmt) |
|
18646
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
3044 || (TYPE(CHILD(tree, 0)) == yield_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3045 || (TYPE(CHILD(tree, 0)) == return_stmt) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3046 || (TYPE(CHILD(tree, 0)) == raise_stmt))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3047 if (res) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3048 next = CHILD(tree, 0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3049 else if (nch == 1) |
| 15318 | 3050 err_string("illegal flow_stmt type"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3051 break; |
|
18646
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
3052 case yield_stmt: |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
3053 res = validate_yield_stmt(tree); |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
3054 break; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3055 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3056 * Compound statements. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3057 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3058 case simple_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3059 res = validate_simple_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3060 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3061 case compound_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3062 res = validate_compound_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3063 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3064 /* |
|
13620
5b727ab37092
Spelling fixes supplied by Rob W. W. Hooft. All these are fixes in either
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
3065 * Fundamental statements. |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3066 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3067 case expr_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3068 res = validate_expr_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3069 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3070 case del_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3071 res = validate_del_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3072 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3073 case pass_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3074 res = (validate_numnodes(tree, 1, "pass") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3075 && validate_name(CHILD(tree, 0), "pass")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3076 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3077 case break_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3078 res = (validate_numnodes(tree, 1, "break") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3079 && validate_name(CHILD(tree, 0), "break")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3080 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3081 case continue_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3082 res = (validate_numnodes(tree, 1, "continue") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3083 && validate_name(CHILD(tree, 0), "continue")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3084 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3085 case return_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3086 res = validate_return_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3087 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3088 case raise_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3089 res = validate_raise_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3090 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3091 case import_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3092 res = validate_import_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3093 break; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3094 case import_name: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3095 res = validate_import_name(tree); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3096 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3097 case import_from: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3098 res = validate_import_from(tree); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3099 break; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3100 case global_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3101 res = validate_global_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3102 break; |
|
76647
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
3103 case nonlocal_stmt: |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
3104 res = validate_nonlocal_stmt(tree); |
|
b7e491b9094f
Issue #14696: Fix parser module to understand 'nonlocal' declarations.
Mark Dickinson <mdickinson@enthought.com>
parents:
76635
diff
changeset
|
3105 break; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3106 case assert_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3107 res = validate_assert_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3108 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3109 case if_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3110 res = validate_if(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3111 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3112 case while_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3113 res = validate_while(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3114 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3115 case for_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3116 res = validate_for(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3117 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3118 case try_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3119 res = validate_try(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3120 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3121 case suite: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3122 res = validate_suite(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3123 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3124 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3125 * Expression nodes. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3126 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3127 case testlist: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3128 res = validate_testlist(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3129 break; |
|
35298
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
3130 case yield_expr: |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
3131 res = validate_yield_expr(tree); |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
3132 break; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3133 case test: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3134 res = validate_test(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3135 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3136 case and_test: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3137 res = validate_and_test(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3138 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3139 case not_test: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3140 res = validate_not_test(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3141 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3142 case comparison: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3143 res = validate_comparison(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3144 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3145 case exprlist: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3146 res = validate_exprlist(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3147 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3148 case comp_op: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3149 res = validate_comp_op(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3150 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3151 case expr: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3152 res = validate_expr(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3153 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3154 case xor_expr: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3155 res = validate_xor_expr(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3156 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3157 case and_expr: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3158 res = validate_and_expr(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3159 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3160 case shift_expr: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3161 res = validate_shift_expr(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3162 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3163 case arith_expr: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3164 res = validate_arith_expr(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3165 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3166 case term: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3167 res = validate_term(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3168 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3169 case factor: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3170 res = validate_factor(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3171 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3172 case power: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3173 res = validate_power(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3174 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3175 case atom: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3176 res = validate_atom(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3177 break; |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3178 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3179 default: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3180 /* Hopefully never reached! */ |
| 15318 | 3181 err_string("unrecognized node type"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3182 res = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3183 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3184 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3185 tree = next; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3186 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3187 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3188 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3189 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3190 |
| 4084 | 3191 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3192 validate_expr_tree(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3193 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3194 int res = validate_eval_input(tree); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3195 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3196 if (!res && !PyErr_Occurred()) |
| 15318 | 3197 err_string("could not validate expression tuple"); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3198 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3199 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3200 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3201 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3202 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3203 /* file_input: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3204 * (NEWLINE | stmt)* ENDMARKER |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3205 */ |
| 4084 | 3206 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3207 validate_file_input(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3208 { |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3209 int j; |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3210 int nch = NCH(tree) - 1; |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3211 int res = ((nch >= 0) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3212 && validate_ntype(CHILD(tree, nch), ENDMARKER)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3213 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3214 for (j = 0; res && (j < nch); ++j) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3215 if (TYPE(CHILD(tree, j)) == stmt) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3216 res = validate_stmt(CHILD(tree, j)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3217 else |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3218 res = validate_newline(CHILD(tree, j)); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3219 } |
|
13620
5b727ab37092
Spelling fixes supplied by Rob W. W. Hooft. All these are fixes in either
Thomas Wouters <thomas@python.org>
parents:
13576
diff
changeset
|
3220 /* This stays in to prevent any internal failures from getting to the |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3221 * user. Hopefully, this won't be needed. If a user reports getting |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3222 * this, we have some debugging to do. |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3223 */ |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3224 if (!res && !PyErr_Occurred()) |
| 15318 | 3225 err_string("VALIDATION FAILURE: report this to the maintainer!"); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3226 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3227 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3228 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3229 |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3230 static int |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3231 validate_encoding_decl(node *tree) |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3232 { |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3233 int nch = NCH(tree); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3234 int res = ((nch == 1) |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3235 && validate_file_input(CHILD(tree, 0))); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3236 |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3237 if (!res && !PyErr_Occurred()) |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3238 err_string("Error Parsing encoding_decl"); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3239 |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3240 return res; |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3241 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3242 |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3243 static PyObject* |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3244 pickle_constructor = NULL; |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3245 |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3246 |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3247 static PyObject* |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3248 parser__pickler(PyObject *self, PyObject *args) |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3249 { |
| 8196 | 3250 NOTE(ARGUNUSED(self)) |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3251 PyObject *result = NULL; |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3252 PyObject *st = NULL; |
|
11297
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
3253 PyObject *empty_dict = NULL; |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3254 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3255 if (PyArg_ParseTuple(args, "O!:_pickler", &PyST_Type, &st)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3256 PyObject *newargs; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3257 PyObject *tuple; |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3258 |
|
11297
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
3259 if ((empty_dict = PyDict_New()) == NULL) |
|
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
3260 goto finally; |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3261 if ((newargs = Py_BuildValue("Oi", st, 1)) == NULL) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3262 goto finally; |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3263 tuple = parser_st2tuple((PyST_Object*)NULL, newargs, empty_dict); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3264 if (tuple != NULL) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3265 result = Py_BuildValue("O(O)", pickle_constructor, tuple); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3266 Py_DECREF(tuple); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3267 } |
|
11297
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
3268 Py_DECREF(empty_dict); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3269 Py_DECREF(newargs); |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3270 } |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3271 finally: |
|
11297
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
3272 Py_XDECREF(empty_dict); |
|
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
3273 |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3274 return (result); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3275 } |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3276 |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3277 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3278 /* Functions exported by this module. Most of this should probably |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3279 * be converted into an ST object with methods, but that is better |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3280 * done directly in Python, allowing subclasses to be created directly. |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3281 * We'd really have to write a wrapper around it all anyway to allow |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3282 * inheritance. |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3283 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3284 static PyMethodDef parser_functions[] = { |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3285 {"compilest", (PyCFunction)parser_compilest, PUBLIC_METHOD_TYPE, |
|
24796
de71e6fe64b0
Allow more docstrings to be removed during compilation in some modules
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
3286 PyDoc_STR("Compiles an ST object into a code object.")}, |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3287 {"expr", (PyCFunction)parser_expr, PUBLIC_METHOD_TYPE, |
|
24796
de71e6fe64b0
Allow more docstrings to be removed during compilation in some modules
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
3288 PyDoc_STR("Creates an ST object from an expression.")}, |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3289 {"isexpr", (PyCFunction)parser_isexpr, PUBLIC_METHOD_TYPE, |
|
24796
de71e6fe64b0
Allow more docstrings to be removed during compilation in some modules
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
3290 PyDoc_STR("Determines if an ST object was created from an expression.")}, |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3291 {"issuite", (PyCFunction)parser_issuite, PUBLIC_METHOD_TYPE, |
|
24796
de71e6fe64b0
Allow more docstrings to be removed during compilation in some modules
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
3292 PyDoc_STR("Determines if an ST object was created from a suite.")}, |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3293 {"suite", (PyCFunction)parser_suite, PUBLIC_METHOD_TYPE, |
|
24796
de71e6fe64b0
Allow more docstrings to be removed during compilation in some modules
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
3294 PyDoc_STR("Creates an ST object from a suite.")}, |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3295 {"sequence2st", (PyCFunction)parser_tuple2st, PUBLIC_METHOD_TYPE, |
|
24796
de71e6fe64b0
Allow more docstrings to be removed during compilation in some modules
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
3296 PyDoc_STR("Creates an ST object from a tree representation.")}, |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3297 {"st2tuple", (PyCFunction)parser_st2tuple, PUBLIC_METHOD_TYPE, |
|
24796
de71e6fe64b0
Allow more docstrings to be removed during compilation in some modules
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
3298 PyDoc_STR("Creates a tuple-tree representation of an ST.")}, |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3299 {"st2list", (PyCFunction)parser_st2list, PUBLIC_METHOD_TYPE, |
|
24796
de71e6fe64b0
Allow more docstrings to be removed during compilation in some modules
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
3300 PyDoc_STR("Creates a list-tree representation of an ST.")}, |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3301 {"tuple2st", (PyCFunction)parser_tuple2st, PUBLIC_METHOD_TYPE, |
|
24796
de71e6fe64b0
Allow more docstrings to be removed during compilation in some modules
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
3302 PyDoc_STR("Creates an ST object from a tree representation.")}, |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3303 |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3304 /* private stuff: support pickle module */ |
|
19274
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3305 {"_pickler", (PyCFunction)parser__pickler, METH_VARARGS, |
|
24796
de71e6fe64b0
Allow more docstrings to be removed during compilation in some modules
Neal Norwitz <nnorwitz@gmail.com>
parents:
24363
diff
changeset
|
3306 PyDoc_STR("Returns the pickle magic to allow ST objects to be pickled.")}, |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3307 |
| 8196 | 3308 {NULL, NULL, 0, NULL} |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3309 }; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3310 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3311 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
46867
diff
changeset
|
3312 |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
46867
diff
changeset
|
3313 static struct PyModuleDef parsermodule = { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3314 PyModuleDef_HEAD_INIT, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3315 "parser", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3316 NULL, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3317 -1, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3318 parser_functions, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3319 NULL, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3320 NULL, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3321 NULL, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3322 NULL |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
46867
diff
changeset
|
3323 }; |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
46867
diff
changeset
|
3324 |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
46867
diff
changeset
|
3325 PyMODINIT_FUNC PyInit_parser(void); /* supply a prototype */ |
|
24363
979ff5d0ae07
Replace DL_IMPORT with PyMODINIT_FUNC and remove "/export:init..." link
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
3326 |
|
979ff5d0ae07
Replace DL_IMPORT with PyMODINIT_FUNC and remove "/export:init..." link
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
3327 PyMODINIT_FUNC |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
46867
diff
changeset
|
3328 PyInit_parser(void) |
|
14214
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
3329 { |
|
19274
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3330 PyObject *module, *copyreg; |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3331 |
|
48413
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3332 if (PyType_Ready(&PyST_Type) < 0) |
|
7e56016a6565
#3247 Get rid of Py_FindMethod; use tp_members instead.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
3333 return NULL; |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
46867
diff
changeset
|
3334 module = PyModule_Create(&parsermodule); |
|
36324
1af7f719ed28
Check return result from Py_InitModule*(). This API can fail.
Neal Norwitz <nnorwitz@gmail.com>
parents:
35999
diff
changeset
|
3335 if (module == NULL) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54338
diff
changeset
|
3336 return NULL; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3337 |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
3338 if (parser_error == 0) |
|
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
3339 parser_error = PyErr_NewException("parser.ParserError", NULL, NULL); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3340 |
|
29952
1cbc6b7836dc
Merge 23c1-branch back into the head. Barry will send email about the
Tim Peters <tim.peters@gmail.com>
parents:
28551
diff
changeset
|
3341 if (parser_error == 0) |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
46867
diff
changeset
|
3342 return NULL; |
|
29952
1cbc6b7836dc
Merge 23c1-branch back into the head. Barry will send email about the
Tim Peters <tim.peters@gmail.com>
parents:
28551
diff
changeset
|
3343 /* CAUTION: The code next used to skip bumping the refcount on |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
46867
diff
changeset
|
3344 * parser_error. That's a disaster if PyInit_parser() gets called more |
|
29952
1cbc6b7836dc
Merge 23c1-branch back into the head. Barry will send email about the
Tim Peters <tim.peters@gmail.com>
parents:
28551
diff
changeset
|
3345 * than once. By incref'ing, we ensure that each module dict that |
|
1cbc6b7836dc
Merge 23c1-branch back into the head. Barry will send email about the
Tim Peters <tim.peters@gmail.com>
parents:
28551
diff
changeset
|
3346 * gets created owns its reference to the shared parser_error object, |
|
1cbc6b7836dc
Merge 23c1-branch back into the head. Barry will send email about the
Tim Peters <tim.peters@gmail.com>
parents:
28551
diff
changeset
|
3347 * and the file static parser_error vrbl owns a reference too. |
|
1cbc6b7836dc
Merge 23c1-branch back into the head. Barry will send email about the
Tim Peters <tim.peters@gmail.com>
parents:
28551
diff
changeset
|
3348 */ |
|
1cbc6b7836dc
Merge 23c1-branch back into the head. Barry will send email about the
Tim Peters <tim.peters@gmail.com>
parents:
28551
diff
changeset
|
3349 Py_INCREF(parser_error); |
|
1cbc6b7836dc
Merge 23c1-branch back into the head. Barry will send email about the
Tim Peters <tim.peters@gmail.com>
parents:
28551
diff
changeset
|
3350 if (PyModule_AddObject(module, "ParserError", parser_error) != 0) |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
46867
diff
changeset
|
3351 return NULL; |
|
29952
1cbc6b7836dc
Merge 23c1-branch back into the head. Barry will send email about the
Tim Peters <tim.peters@gmail.com>
parents:
28551
diff
changeset
|
3352 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3353 Py_INCREF(&PyST_Type); |
|
19274
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3354 PyModule_AddObject(module, "STType", (PyObject*)&PyST_Type); |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3355 |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3356 PyModule_AddStringConstant(module, "__copyright__", |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3357 parser_copyright_string); |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3358 PyModule_AddStringConstant(module, "__doc__", |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3359 parser_doc_string); |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3360 PyModule_AddStringConstant(module, "__version__", |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3361 parser_version_string); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3362 |
| 18748 | 3363 /* Register to support pickling. |
| 3364 * If this fails, the import of this module will fail because an | |
| 3365 * exception will be raised here; should we clear the exception? | |
| 3366 */ | |
|
46867
dd5513b472dc
Rename copy_reg module to copyreg.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
46644
diff
changeset
|
3367 copyreg = PyImport_ImportModuleNoBlock("copyreg"); |
|
19274
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3368 if (copyreg != NULL) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3369 PyObject *func, *pickler; |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
3370 _Py_IDENTIFIER(pickle); |
|
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
3371 _Py_IDENTIFIER(sequence2st); |
|
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
3372 _Py_IDENTIFIER(_pickler); |
|
72848
81380082d216
Use identifier API for PyObject_GetAttrString.
Martin v. Löwis <martin@v.loewis.de>
parents:
70654
diff
changeset
|
3373 |
|
81380082d216
Use identifier API for PyObject_GetAttrString.
Martin v. Löwis <martin@v.loewis.de>
parents:
70654
diff
changeset
|
3374 func = _PyObject_GetAttrId(copyreg, &PyId_pickle); |
|
81380082d216
Use identifier API for PyObject_GetAttrString.
Martin v. Löwis <martin@v.loewis.de>
parents:
70654
diff
changeset
|
3375 pickle_constructor = _PyObject_GetAttrId(module, &PyId_sequence2st); |
|
81380082d216
Use identifier API for PyObject_GetAttrString.
Martin v. Löwis <martin@v.loewis.de>
parents:
70654
diff
changeset
|
3376 pickler = _PyObject_GetAttrId(module, &PyId__pickler); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3377 Py_XINCREF(pickle_constructor); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3378 if ((func != NULL) && (pickle_constructor != NULL) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3379 && (pickler != NULL)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3380 PyObject *res; |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3381 |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
3382 res = PyObject_CallFunctionObjArgs(func, &PyST_Type, pickler, |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
3383 pickle_constructor, NULL); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3384 Py_XDECREF(res); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3385 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3386 Py_XDECREF(func); |
|
19274
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3387 Py_XDECREF(pickle_constructor); |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3388 Py_XDECREF(pickler); |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3389 Py_DECREF(copyreg); |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3390 } |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
46867
diff
changeset
|
3391 return module; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3392 } |
