Mercurial > cpython-lru_cache-weakref
annotate Modules/parsermodule.c @ 47916:bed3dfd99281 legacy-trunk
Issue 3287: Raise correct exception for float inputs.
| author | Raymond Hettinger <python@rcn.com> |
|---|---|
| date | Thu, 10 Jul 2008 09:31:08 +0000 |
| parents | 52294af4b663 |
| children | 0441d30d672b |
| 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 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
29 #include "graminit.h" /* symbols defined in the grammar */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
30 #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
|
31 #include "errcode.h" /* error codes for PyNode_*() */ |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
32 #include "token.h" /* token definitions */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
33 /* ISTERMINAL() / ISNONTERMINAL() */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
34 #include "compile.h" /* PyNode_Compile() */ |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
35 |
| 8196 | 36 #ifdef lint |
| 37 #include <note.h> | |
| 38 #else | |
| 39 #define NOTE(x) | |
| 40 #endif | |
| 41 | |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
42 /* String constants used to initialize module attributes. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
43 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
44 */ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23538
diff
changeset
|
45 static char parser_copyright_string[] = |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23538
diff
changeset
|
46 "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
|
47 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
|
48 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
|
49 Centrum, Amsterdam, The Netherlands."; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
50 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
51 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23538
diff
changeset
|
52 PyDoc_STRVAR(parser_doc_string, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23538
diff
changeset
|
53 "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
|
54 |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23538
diff
changeset
|
55 static char parser_version_string[] = "0.5"; |
| 4084 | 56 |
| 57 | |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
58 typedef PyObject* (*SeqMaker) (Py_ssize_t length); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
59 typedef int (*SeqInserter) (PyObject* sequence, |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
60 Py_ssize_t index, |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
61 PyObject* element); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
62 |
|
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
|
63 /* 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
|
64 * 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
|
65 * 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
|
66 * 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
|
67 * 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
|
68 * 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
|
69 * 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
|
70 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
71 |
|
1406
474823e5f7dc
* parsermodule.c, Makefile, config.c: rudimentary interface to the Python
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
72 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
73 static PyObject* |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
74 node2tuple(node *n, /* node to convert */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
75 SeqMaker mkseq, /* create sequence */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
76 SeqInserter addelem, /* func. to add elem. in seq. */ |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
77 int lineno, /* include line numbers? */ |
|
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
78 int col_offset) /* include column offsets? */ |
| 4084 | 79 { |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
80 if (n == NULL) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
81 Py_INCREF(Py_None); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
82 return (Py_None); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
83 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
84 if (ISNONTERMINAL(TYPE(n))) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
85 int i; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
86 PyObject *v; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
87 PyObject *w; |
| 8196 | 88 |
|
26979
784e7fdf8c52
SF patch [ 597919 ] compiler package and SET_LINENO
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24796
diff
changeset
|
89 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
|
90 if (v == NULL) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
91 return (v); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
92 w = PyInt_FromLong(TYPE(n)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
93 if (w == NULL) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
94 Py_DECREF(v); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
95 return ((PyObject*) NULL); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
96 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
97 (void) addelem(v, 0, w); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
98 for (i = 0; i < NCH(n); i++) { |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
99 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
|
100 if (w == NULL) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
101 Py_DECREF(v); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
102 return ((PyObject*) NULL); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
103 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
104 (void) addelem(v, i+1, w); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
105 } |
|
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
|
106 |
|
26979
784e7fdf8c52
SF patch [ 597919 ] compiler package and SET_LINENO
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24796
diff
changeset
|
107 if (TYPE(n) == encoding_decl) |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
108 (void) addelem(v, i+1, PyString_FromString(STR(n))); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
109 return (v); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
110 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
111 else if (ISTERMINAL(TYPE(n))) { |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
112 PyObject *result = mkseq(2 + lineno + col_offset); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
113 if (result != NULL) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
114 (void) addelem(result, 0, PyInt_FromLong(TYPE(n))); |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
115 (void) addelem(result, 1, PyString_FromString(STR(n))); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
116 if (lineno == 1) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
117 (void) addelem(result, 2, PyInt_FromLong(n->n_lineno)); |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
118 if (col_offset == 1) |
|
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
119 (void) addelem(result, 3, PyInt_FromLong(n->n_col_offset)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
120 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
121 return (result); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
122 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
123 else { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
124 PyErr_SetString(PyExc_SystemError, |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
125 "unrecognized parse tree node type"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
126 return ((PyObject*) NULL); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
127 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
128 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
129 /* |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
130 * 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
|
131 */ |
|
1406
474823e5f7dc
* parsermodule.c, Makefile, config.c: rudimentary interface to the Python
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
132 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
133 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
134 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
135 /* 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
|
136 * '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
|
137 * 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
|
138 * 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
|
139 * 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
|
140 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
141 |
|
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 #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
|
143 #define PyST_SUITE 2 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
144 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
145 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
146 /* 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
|
147 * 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
|
148 * 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
|
149 */ |
|
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 static PyObject* |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
152 parser_error = 0; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
153 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
154 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
155 typedef struct { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
156 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
|
157 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
|
158 int st_type; /* EXPR or SUITE ? */ |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
159 } PyST_Object; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
160 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
161 |
|
24280
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
162 static void parser_free(PyST_Object *st); |
|
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
163 static int parser_compare(PyST_Object *left, PyST_Object *right); |
| 36680 | 164 static PyObject *parser_getattr(PyObject *self, char *name); |
| 8196 | 165 |
| 166 | |
| 167 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
|
168 PyTypeObject PyST_Type = { |
|
42333
6620a510e9a9
PEP 3123: Provide forward compatibility with Python 3.0, while keeping
Martin v. Löwis <martin@v.loewis.de>
parents:
39635
diff
changeset
|
169 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
|
170 "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
|
171 (int) sizeof(PyST_Object), /* tp_basicsize */ |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
172 0, /* tp_itemsize */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
173 (destructor)parser_free, /* tp_dealloc */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
174 0, /* tp_print */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
175 parser_getattr, /* tp_getattr */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
176 0, /* tp_setattr */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
177 (cmpfunc)parser_compare, /* tp_compare */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
178 0, /* tp_repr */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
179 0, /* tp_as_number */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
180 0, /* tp_as_sequence */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
181 0, /* tp_as_mapping */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
182 0, /* tp_hash */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
183 0, /* tp_call */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
184 0, /* tp_str */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
185 0, /* tp_getattro */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
186 0, /* tp_setattro */ |
|
5613
190e35bbc15a
Add doc string to type object.
Fred Drake <fdrake@acm.org>
parents:
5236
diff
changeset
|
187 |
|
190e35bbc15a
Add doc string to type object.
Fred Drake <fdrake@acm.org>
parents:
5236
diff
changeset
|
188 /* 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
|
189 0, /* tp_as_buffer */ |
|
5613
190e35bbc15a
Add doc string to type object.
Fred Drake <fdrake@acm.org>
parents:
5236
diff
changeset
|
190 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
191 Py_TPFLAGS_DEFAULT, /* tp_flags */ |
|
5613
190e35bbc15a
Add doc string to type object.
Fred Drake <fdrake@acm.org>
parents:
5236
diff
changeset
|
192 |
|
190e35bbc15a
Add doc string to type object.
Fred Drake <fdrake@acm.org>
parents:
5236
diff
changeset
|
193 /* __doc__ */ |
|
190e35bbc15a
Add doc string to type object.
Fred Drake <fdrake@acm.org>
parents:
5236
diff
changeset
|
194 "Intermediate representation of a Python parse 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
|
195 }; /* PyST_Type */ |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
196 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
197 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
198 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
199 parser_compare_nodes(node *left, node *right) |
| 4084 | 200 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
201 int j; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
202 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
203 if (TYPE(left) < TYPE(right)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
204 return (-1); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
205 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
206 if (TYPE(right) < TYPE(left)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
207 return (1); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
208 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
209 if (ISTERMINAL(TYPE(left))) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
210 return (strcmp(STR(left), STR(right))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
211 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
212 if (NCH(left) < NCH(right)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
213 return (-1); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
214 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
215 if (NCH(right) < NCH(left)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
216 return (1); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
217 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
218 for (j = 0; j < NCH(left); ++j) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
219 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
|
220 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
221 if (v != 0) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
222 return (v); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
223 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
224 return (0); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
225 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
226 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
227 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
228 /* int parser_compare(PyST_Object* left, PyST_Object* right) |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
229 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
230 * Comparison function used by the Python operators ==, !=, <, >, <=, >= |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
231 * 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
|
232 * checks and protection code. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
233 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
234 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
235 static int |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
236 parser_compare(PyST_Object *left, PyST_Object *right) |
| 4084 | 237 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
238 if (left == right) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
239 return (0); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
240 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
241 if ((left == 0) || (right == 0)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
242 return (-1); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
243 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
244 return (parser_compare_nodes(left->st_node, right->st_node)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
245 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
246 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
247 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
248 /* parser_newstobject(node* st) |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
249 * |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
250 * 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
|
251 * '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
|
252 * Python code. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
253 * |
|
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 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
|
256 parser_newstobject(node *st, int type) |
| 4084 | 257 { |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
258 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
|
259 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
260 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
|
261 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
|
262 o->st_type = type; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
263 } |
| 8196 | 264 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
|
265 PyNode_Free(st); |
| 8196 | 266 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
267 return ((PyObject*)o); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
268 } |
|
3200
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 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
271 /* void parser_free(PyST_Object* st) |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
272 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
273 * 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
|
274 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
275 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
276 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
|
277 parser_free(PyST_Object *st) |
| 4084 | 278 { |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
279 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
|
280 PyObject_Del(st); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
281 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
282 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
283 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
284 /* 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
|
285 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
286 * 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
|
287 * 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
|
288 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
289 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
290 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
|
291 parser_st2tuple(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 292 { |
| 293 PyObject *line_option = 0; | |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
294 PyObject *col_option = 0; |
| 4084 | 295 PyObject *res = 0; |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
296 int ok; |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
297 |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
298 static char *keywords[] = {"ast", "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
|
299 |
| 8196 | 300 if (self == NULL) { |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
301 ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|OO:st2tuple", keywords, |
|
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
302 &PyST_Type, &self, &line_option, |
|
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
303 &col_option); |
| 8196 | 304 } |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
305 else |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
306 ok = PyArg_ParseTupleAndKeywords(args, kw, "|OO:totuple", &keywords[1], |
|
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
307 &line_option, &col_option); |
| 8196 | 308 if (ok != 0) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
309 int lineno = 0; |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
310 int col_offset = 0; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
311 if (line_option != NULL) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
312 lineno = (PyObject_IsTrue(line_option) != 0) ? 1 : 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
313 } |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
314 if (col_option != NULL) { |
|
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
315 col_offset = (PyObject_IsTrue(col_option) != 0) ? 1 : 0; |
|
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
316 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
317 /* |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
318 * 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
|
319 * since it's known to work already. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
320 */ |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
321 res = node2tuple(((PyST_Object*)self)->st_node, |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
322 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
|
323 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
324 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
325 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
326 |
|
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_st2list(PyObject* self, PyObject* args, PyObject* kw) |
| 4084 | 329 * |
|
11297
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
330 * 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
|
331 * returned to the Python-level caller. The ST object is not modified. |
| 4084 | 332 * |
| 333 */ | |
| 334 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
|
335 parser_st2list(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 336 { |
| 337 PyObject *line_option = 0; | |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
338 PyObject *col_option = 0; |
| 4084 | 339 PyObject *res = 0; |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
340 int ok; |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
341 |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
342 static char *keywords[] = {"ast", "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
|
343 |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
344 if (self == NULL) |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
345 ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|OO:st2list", keywords, |
|
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
346 &PyST_Type, &self, &line_option, |
|
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
347 &col_option); |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
348 else |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
349 ok = PyArg_ParseTupleAndKeywords(args, kw, "|OO:tolist", &keywords[1], |
|
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
350 &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
|
351 if (ok) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
352 int lineno = 0; |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
353 int col_offset = 0; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
354 if (line_option != 0) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
355 lineno = PyObject_IsTrue(line_option) ? 1 : 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
356 } |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
357 if (col_option != NULL) { |
|
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
358 col_offset = (PyObject_IsTrue(col_option) != 0) ? 1 : 0; |
|
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
359 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
360 /* |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
361 * 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
|
362 * since it's known to work already. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
363 */ |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
364 res = node2tuple(self->st_node, |
|
39635
f8a90d1825ce
Expose column offset information in parse trees.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
38314
diff
changeset
|
365 PyList_New, PyList_SetItem, lineno, col_offset); |
| 4084 | 366 } |
| 367 return (res); | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
368 } |
| 4084 | 369 |
| 370 | |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
371 /* parser_compilest(PyObject* self, PyObject* args) |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
372 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
373 * 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
|
374 * 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
|
375 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
376 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
377 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
|
378 parser_compilest(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 379 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
380 PyObject* res = 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
|
381 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
|
382 int ok; |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
383 |
| 36680 | 384 static char *keywords[] = {"ast", "filename", NULL}; |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
385 |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
386 if (self == 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
|
387 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
|
388 &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
|
389 else |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
390 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
|
391 &str); |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
392 |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
393 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
|
394 res = (PyObject *)PyNode_Compile(self->st_node, str); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
395 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
396 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
397 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
398 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
399 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
400 /* PyObject* parser_isexpr(PyObject* self, PyObject* args) |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
401 * PyObject* parser_issuite(PyObject* self, PyObject* args) |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
402 * |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
403 * 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
|
404 * 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
|
405 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
406 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
407 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
|
408 parser_isexpr(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 409 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
410 PyObject* res = 0; |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
411 int ok; |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
412 |
| 36680 | 413 static char *keywords[] = {"ast", NULL}; |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
414 |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
415 if (self == NULL) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
416 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
|
417 &PyST_Type, &self); |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
418 else |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
419 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
|
420 |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
421 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
|
422 /* 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
|
423 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
|
424 Py_INCREF(res); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
425 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
426 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
427 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
428 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
429 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
430 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
|
431 parser_issuite(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 432 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
433 PyObject* res = 0; |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
434 int ok; |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
435 |
| 36680 | 436 static char *keywords[] = {"ast", NULL}; |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
437 |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
438 if (self == NULL) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
439 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
|
440 &PyST_Type, &self); |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
441 else |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
442 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
|
443 |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
444 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
|
445 /* 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
|
446 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
|
447 Py_INCREF(res); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
448 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
449 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
450 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
451 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
452 |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
453 #define PUBLIC_METHOD_TYPE (METH_VARARGS|METH_KEYWORDS) |
|
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
454 |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
455 static PyMethodDef |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
456 parser_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
|
457 {"compile", (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
|
458 PyDoc_STR("Compile this ST object into a code object.")}, |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
459 {"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
|
460 PyDoc_STR("Determines if this ST object was created from an expression.")}, |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
461 {"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
|
462 PyDoc_STR("Determines if this 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
|
463 {"tolist", (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
|
464 PyDoc_STR("Creates a list-tree representation of this 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
|
465 {"totuple", (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
|
466 PyDoc_STR("Creates a tuple-tree representation of this ST.")}, |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
467 |
| 8196 | 468 {NULL, NULL, 0, NULL} |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
469 }; |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
470 |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
471 |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
472 static PyObject* |
| 36680 | 473 parser_getattr(PyObject *self, char *name) |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
474 { |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
475 return (Py_FindMethod(parser_methods, self, name)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
476 } |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
477 |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
478 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
479 /* err_string(char* message) |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
480 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
481 * 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
|
482 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
483 */ |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
484 static void |
| 13503 | 485 err_string(char *message) |
| 4084 | 486 { |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
487 PyErr_SetString(parser_error, message); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
488 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
489 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
490 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
491 /* 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
|
492 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
493 * 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
|
494 * 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
|
495 * |
|
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 static PyObject* |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
498 parser_do_parse(PyObject *args, PyObject *kw, char *argspec, int type) |
| 4084 | 499 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
500 char* string = 0; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
501 PyObject* res = 0; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
502 |
| 36680 | 503 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
|
504 |
|
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
505 if (PyArg_ParseTupleAndKeywords(args, kw, argspec, keywords, &string)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
506 node* n = PyParser_SimpleParseString(string, |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
507 (type == PyST_EXPR) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
508 ? eval_input : file_input); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
509 |
|
26979
784e7fdf8c52
SF patch [ 597919 ] compiler package and SET_LINENO
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24796
diff
changeset
|
510 if (n) |
|
784e7fdf8c52
SF patch [ 597919 ] compiler package and SET_LINENO
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24796
diff
changeset
|
511 res = parser_newstobject(n, type); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
512 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
513 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
514 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
515 |
|
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 /* PyObject* parser_expr(PyObject* self, PyObject* args) |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
518 * PyObject* parser_suite(PyObject* self, PyObject* args) |
|
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 * 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
|
521 * 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
|
522 * 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
|
523 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
524 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
525 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
|
526 parser_expr(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 527 { |
| 8196 | 528 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
|
529 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
|
530 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
531 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
532 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
533 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
|
534 parser_suite(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 535 { |
| 8196 | 536 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
|
537 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
|
538 } |
|
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 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
541 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
542 /* 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
|
543 * 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
|
544 * 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
|
545 * 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
|
546 * 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
|
547 * 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
|
548 * phase, returning an exception instead. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
549 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
550 * 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
|
551 * 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
|
552 * 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
|
553 * 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
|
554 * 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
|
555 * 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
|
556 */ |
|
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 |
|
24280
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
559 static node* build_node_tree(PyObject *tuple); |
|
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
560 static int validate_expr_tree(node *tree); |
|
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
561 static int validate_file_input(node *tree); |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
562 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
|
563 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
564 /* 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
|
565 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
566 * 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
|
567 * 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
|
568 * 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
|
569 * 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
|
570 * 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
|
571 * 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
|
572 * |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
573 * 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
|
574 * ST objects. |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
575 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
576 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
577 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
|
578 parser_tuple2st(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 579 { |
| 8196 | 580 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
|
581 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
|
582 PyObject *tuple; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
583 node *tree; |
| 4084 | 584 |
| 36680 | 585 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
|
586 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
587 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
|
588 &tuple)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
589 return (0); |
| 4084 | 590 if (!PySequence_Check(tuple)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
591 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
|
592 "sequence2st() requires a single sequence argument"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
593 return (0); |
| 4084 | 594 } |
| 595 /* | |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
596 * Convert the tree to the internal form before checking it. |
| 4084 | 597 */ |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
598 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
|
599 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
|
600 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
|
601 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
|
602 /* 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
|
603 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
|
604 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
|
605 else |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
606 PyNode_Free(tree); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
607 } |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
608 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
|
609 /* 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
|
610 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
|
611 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
|
612 else |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
613 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
|
614 } |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
615 else if (start_sym == encoding_decl) { |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
616 /* This looks like an encoding_decl so far. */ |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
617 if (validate_encoding_decl(tree)) |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
618 st = parser_newstobject(tree, PyST_SUITE); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
619 else |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
620 PyNode_Free(tree); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
621 } |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
622 else { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
623 /* 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
|
624 PyNode_Free(tree); |
| 15318 | 625 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
|
626 } |
| 4084 | 627 } |
| 628 /* Make sure we throw an exception on all errors. We should never | |
| 629 * get this, but we'd do well to be sure something is done. | |
| 630 */ | |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
631 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
|
632 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
|
633 |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
634 return st; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
635 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
636 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
637 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
638 /* node* build_node_children() |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
639 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
640 * 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
|
641 * 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
|
642 * 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
|
643 * and no memory will have been deallocated. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
644 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
645 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
646 static node* |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
647 build_node_children(PyObject *tuple, node *root, int *line_num) |
| 4084 | 648 { |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
649 Py_ssize_t len = PyObject_Size(tuple); |
|
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
650 Py_ssize_t i; |
|
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
651 int err; |
|
3200
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 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
|
654 /* 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
|
655 PyObject* elem = PySequence_GetItem(tuple, i); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
656 int ok = elem != NULL; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
657 long type = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
658 char *strn = 0; |
| 4084 | 659 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
660 if (ok) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
661 ok = PySequence_Check(elem); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
662 if (ok) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
663 PyObject *temp = PySequence_GetItem(elem, 0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
664 if (temp == NULL) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
665 ok = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
666 else { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
667 ok = PyInt_Check(temp); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
668 if (ok) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
669 type = PyInt_AS_LONG(temp); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
670 Py_DECREF(temp); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
671 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
672 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
673 if (!ok) { |
|
37092
8d42f661fec8
SF #1445431, fix some leaks in error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36786
diff
changeset
|
674 PyObject *err = Py_BuildValue("os", elem, |
|
8d42f661fec8
SF #1445431, fix some leaks in error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36786
diff
changeset
|
675 "Illegal node construct."); |
|
8d42f661fec8
SF #1445431, fix some leaks in error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36786
diff
changeset
|
676 PyErr_SetObject(parser_error, err); |
|
8d42f661fec8
SF #1445431, fix some leaks in error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36786
diff
changeset
|
677 Py_XDECREF(err); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
678 Py_XDECREF(elem); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
679 return (0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
680 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
681 if (ISTERMINAL(type)) { |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
682 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
|
683 PyObject *temp; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
684 |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
685 if ((len != 2) && (len != 3)) { |
| 15318 | 686 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
|
687 return 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
688 } |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
689 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
|
690 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
|
691 return 0; |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
692 if (!PyString_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
|
693 PyErr_Format(parser_error, |
| 15318 | 694 "second item in terminal node must be a string," |
| 695 " found %s", | |
|
44350
26384b8180c7
#1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT. Macros for b/w compatibility are available.
Christian Heimes <christian@cheimes.de>
parents:
42333
diff
changeset
|
696 Py_TYPE(temp)->tp_name); |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12487
diff
changeset
|
697 Py_DECREF(temp); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
698 return 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
699 } |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
700 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
|
701 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
|
702 if (o != NULL) { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
703 if (PyInt_Check(o)) |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
704 *line_num = PyInt_AS_LONG(o); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
705 else { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
706 PyErr_Format(parser_error, |
| 15318 | 707 "third item in terminal node must be an" |
| 708 " integer, found %s", | |
|
44350
26384b8180c7
#1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT. Macros for b/w compatibility are available.
Christian Heimes <christian@cheimes.de>
parents:
42333
diff
changeset
|
709 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
|
710 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
|
711 Py_DECREF(temp); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
712 return 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
713 } |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
714 Py_DECREF(o); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
715 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
716 } |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
717 len = PyString_GET_SIZE(temp) + 1; |
| 37229 | 718 strn = (char *)PyObject_MALLOC(len); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
719 if (strn != NULL) |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
720 (void) memcpy(strn, PyString_AS_STRING(temp), len); |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
721 Py_DECREF(temp); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
722 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
723 else if (!ISNONTERMINAL(type)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
724 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
725 * 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
|
726 * Throw an exception. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
727 */ |
|
37092
8d42f661fec8
SF #1445431, fix some leaks in error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36786
diff
changeset
|
728 PyObject *err = Py_BuildValue("os", elem, "unknown node type."); |
|
8d42f661fec8
SF #1445431, fix some leaks in error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36786
diff
changeset
|
729 PyErr_SetObject(parser_error, err); |
|
8d42f661fec8
SF #1445431, fix some leaks in error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36786
diff
changeset
|
730 Py_XDECREF(err); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
731 Py_XDECREF(elem); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
732 return (0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
733 } |
|
36786
57322cb2ca11
Patch #1440601: Add col_offset attribute to AST nodes.
Martin v. Löwis <martin@v.loewis.de>
parents:
36712
diff
changeset
|
734 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
|
735 if (err == E_NOMEM) { |
| 37229 | 736 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
|
737 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
|
738 } |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
739 if (err == E_OVERFLOW) { |
| 37229 | 740 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
|
741 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
|
742 "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
|
743 return NULL; |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
744 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
745 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
746 if (ISNONTERMINAL(type)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
747 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
|
748 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
749 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
|
750 Py_XDECREF(elem); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
751 return (0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
752 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
753 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
754 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
|
755 ++(*line_num); /* line number *after* the newline! */ |
|
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 Py_XDECREF(elem); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
758 } |
| 37229 | 759 return root; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
760 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
761 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
762 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
763 static node* |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
764 build_node_tree(PyObject *tuple) |
| 4084 | 765 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
766 node* res = 0; |
| 4084 | 767 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
|
768 long num = -1; |
| 4084 | 769 |
| 770 if (temp != NULL) | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
771 num = PyInt_AsLong(temp); |
| 4084 | 772 Py_XDECREF(temp); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
773 if (ISTERMINAL(num)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
774 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
775 * 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
|
776 * 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
|
777 */ |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
778 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
|
779 "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
|
780 PyErr_SetObject(parser_error, tuple); |
|
37092
8d42f661fec8
SF #1445431, fix some leaks in error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36786
diff
changeset
|
781 Py_XDECREF(tuple); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
782 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
783 else if (ISNONTERMINAL(num)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
784 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
785 * Not efficient, but that can be handled later. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
786 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
787 int line_num = 0; |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
788 PyObject *encoding = NULL; |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
789 |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
790 if (num == encoding_decl) { |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
791 encoding = PySequence_GetItem(tuple, 2); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
792 /* 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
|
793 tuple = PySequence_GetSlice(tuple, 0, 2); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
794 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
795 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
|
796 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
|
797 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
|
798 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
|
799 res = NULL; |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
800 } |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
801 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
|
802 Py_ssize_t len; |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
803 len = PyString_GET_SIZE(encoding) + 1; |
| 37229 | 804 res->n_str = (char *)PyObject_MALLOC(len); |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
805 if (res->n_str != NULL) |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
806 (void) memcpy(res->n_str, PyString_AS_STRING(encoding), len); |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
807 Py_DECREF(encoding); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
808 Py_DECREF(tuple); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
809 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
810 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
811 } |
|
37092
8d42f661fec8
SF #1445431, fix some leaks in error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36786
diff
changeset
|
812 else { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
813 /* 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
|
814 * 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
|
815 * 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
|
816 */ |
|
37092
8d42f661fec8
SF #1445431, fix some leaks in error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36786
diff
changeset
|
817 PyObject *err = Py_BuildValue("os", tuple, |
|
8d42f661fec8
SF #1445431, fix some leaks in error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36786
diff
changeset
|
818 "Illegal component tuple."); |
|
8d42f661fec8
SF #1445431, fix some leaks in error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36786
diff
changeset
|
819 PyErr_SetObject(parser_error, err); |
|
8d42f661fec8
SF #1445431, fix some leaks in error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36786
diff
changeset
|
820 Py_XDECREF(err); |
|
8d42f661fec8
SF #1445431, fix some leaks in error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36786
diff
changeset
|
821 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
822 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
823 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
824 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
825 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
826 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
827 /* |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
828 * Validation routines used within the validation section: |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
829 */ |
|
24280
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
830 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
|
831 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
832 #define validate_ampersand(ch) validate_terminal(ch, AMPER, "&") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
833 #define validate_circumflex(ch) validate_terminal(ch, CIRCUMFLEX, "^") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
834 #define validate_colon(ch) validate_terminal(ch, COLON, ":") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
835 #define validate_comma(ch) validate_terminal(ch, COMMA, ",") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
836 #define validate_dedent(ch) validate_terminal(ch, DEDENT, "") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
837 #define validate_equal(ch) validate_terminal(ch, EQUAL, "=") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
838 #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
|
839 #define validate_lparen(ch) validate_terminal(ch, LPAR, "(") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
840 #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
|
841 #define validate_rparen(ch) validate_terminal(ch, RPAR, ")") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
842 #define validate_semi(ch) validate_terminal(ch, SEMI, ";") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
843 #define validate_star(ch) validate_terminal(ch, STAR, "*") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
844 #define validate_vbar(ch) validate_terminal(ch, VBAR, "|") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
845 #define validate_doublestar(ch) validate_terminal(ch, DOUBLESTAR, "**") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
846 #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
|
847 #define validate_at(ch) validate_terminal(ch, AT, "@") |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
848 #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
|
849 |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
850 #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
|
851 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
852 VALIDATER(node); VALIDATER(small_stmt); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
853 VALIDATER(class); VALIDATER(node); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
854 VALIDATER(parameters); VALIDATER(suite); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
855 VALIDATER(testlist); VALIDATER(varargslist); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
856 VALIDATER(fpdef); VALIDATER(fplist); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
857 VALIDATER(stmt); VALIDATER(simple_stmt); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
858 VALIDATER(expr_stmt); VALIDATER(power); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
859 VALIDATER(print_stmt); VALIDATER(del_stmt); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
860 VALIDATER(return_stmt); VALIDATER(list_iter); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
861 VALIDATER(raise_stmt); VALIDATER(import_stmt); |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
862 VALIDATER(import_name); VALIDATER(import_from); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
863 VALIDATER(global_stmt); VALIDATER(list_if); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
864 VALIDATER(assert_stmt); VALIDATER(list_for); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
865 VALIDATER(exec_stmt); VALIDATER(compound_stmt); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
866 VALIDATER(while); VALIDATER(for); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
867 VALIDATER(try); VALIDATER(except_clause); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
868 VALIDATER(test); VALIDATER(and_test); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
869 VALIDATER(not_test); VALIDATER(comparison); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
870 VALIDATER(comp_op); VALIDATER(expr); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
871 VALIDATER(xor_expr); VALIDATER(and_expr); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
872 VALIDATER(shift_expr); VALIDATER(arith_expr); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
873 VALIDATER(term); VALIDATER(factor); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
874 VALIDATER(atom); VALIDATER(lambdef); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
875 VALIDATER(trailer); VALIDATER(subscript); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
876 VALIDATER(subscriptlist); VALIDATER(sliceop); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
877 VALIDATER(exprlist); VALIDATER(dictmaker); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
878 VALIDATER(arglist); VALIDATER(argument); |
|
18646
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
879 VALIDATER(listmaker); VALIDATER(yield_stmt); |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
880 VALIDATER(testlist1); VALIDATER(gen_for); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
881 VALIDATER(gen_iter); VALIDATER(gen_if); |
|
35298
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
882 VALIDATER(testlist_gexp); VALIDATER(yield_expr); |
|
36673
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
883 VALIDATER(yield_or_testlist); VALIDATER(or_test); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
884 VALIDATER(old_test); VALIDATER(old_lambdef); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
885 |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
886 #undef VALIDATER |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
887 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
888 #define is_even(n) (((n) & 1) == 0) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
889 #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
|
890 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
891 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
892 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
893 validate_ntype(node *n, int t) |
| 4084 | 894 { |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
895 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
|
896 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
|
897 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
|
898 return 0; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
899 } |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
900 return 1; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
901 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
902 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
903 |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
904 /* 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
|
905 * 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
|
906 * 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
|
907 * "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
|
908 * 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
|
909 * in that fashion. |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
910 */ |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
911 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
912 validate_numnodes(node *n, int num, const char *const name) |
| 4084 | 913 { |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
914 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
|
915 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
|
916 "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
|
917 return 0; |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
918 } |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
919 return 1; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
920 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
921 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
922 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
923 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
924 validate_terminal(node *terminal, int type, char *string) |
| 4084 | 925 { |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
926 int res = (validate_ntype(terminal, type) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
927 && ((string == 0) || (strcmp(string, STR(terminal)) == 0))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
928 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
929 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
|
930 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
|
931 "Illegal terminal: expected \"%s\"", string); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
932 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
933 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
934 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
935 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
936 |
| 4084 | 937 /* X (',' X) [','] |
| 938 */ | |
| 939 static int | |
|
13667
a6c7bfdd6777
Even more ANSIfication: fix as many function pointers and declarations as
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
940 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
|
941 const char *const name) |
| 4084 | 942 { |
| 943 int nch = NCH(tree); | |
| 944 int res = (nch && validate_ntype(tree, ntype) | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
945 && vfunc(CHILD(tree, 0))); |
| 4084 | 946 |
| 947 if (!res && !PyErr_Occurred()) | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
948 (void) validate_numnodes(tree, 1, name); |
| 4084 | 949 else { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
950 if (is_even(nch)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
951 res = validate_comma(CHILD(tree, --nch)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
952 if (res && nch > 1) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
953 int pos = 1; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
954 for ( ; res && pos < nch; pos += 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
955 res = (validate_comma(CHILD(tree, pos)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
956 && vfunc(CHILD(tree, pos + 1))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
957 } |
| 4084 | 958 } |
| 959 return (res); | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
960 } |
| 4084 | 961 |
| 962 | |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
963 /* validate_class() |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
964 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
965 * classdef: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
966 * 'class' NAME ['(' testlist ')'] ':' suite |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
967 */ |
| 4084 | 968 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
969 validate_class(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
970 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
971 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
|
972 int res = (validate_ntype(tree, classdef) && |
|
7c2780c9e51b
Flush out support for ``class B(): pass`` syntax by adding support to the
Brett Cannon <bcannon@gmail.com>
parents:
33353
diff
changeset
|
973 ((nch == 4) || (nch == 6) || (nch == 7))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
974 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
975 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
976 res = (validate_name(CHILD(tree, 0), "class") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
977 && validate_ntype(CHILD(tree, 1), NAME) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
978 && validate_colon(CHILD(tree, nch - 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
979 && validate_suite(CHILD(tree, nch - 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
980 } |
|
34887
7c2780c9e51b
Flush out support for ``class B(): pass`` syntax by adding support to the
Brett Cannon <bcannon@gmail.com>
parents:
33353
diff
changeset
|
981 else { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
982 (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
|
983 } |
|
7c2780c9e51b
Flush out support for ``class B(): pass`` syntax by adding support to the
Brett Cannon <bcannon@gmail.com>
parents:
33353
diff
changeset
|
984 |
|
7c2780c9e51b
Flush out support for ``class B(): pass`` syntax by adding support to the
Brett Cannon <bcannon@gmail.com>
parents:
33353
diff
changeset
|
985 if (res) { |
|
7c2780c9e51b
Flush out support for ``class B(): pass`` syntax by adding support to the
Brett Cannon <bcannon@gmail.com>
parents:
33353
diff
changeset
|
986 if (nch == 7) { |
|
7c2780c9e51b
Flush out support for ``class B(): pass`` syntax by adding support to the
Brett Cannon <bcannon@gmail.com>
parents:
33353
diff
changeset
|
987 res = ((validate_lparen(CHILD(tree, 2)) && |
|
7c2780c9e51b
Flush out support for ``class B(): pass`` syntax by adding support to the
Brett Cannon <bcannon@gmail.com>
parents:
33353
diff
changeset
|
988 validate_testlist(CHILD(tree, 3)) && |
|
7c2780c9e51b
Flush out support for ``class B(): pass`` syntax by adding support to the
Brett Cannon <bcannon@gmail.com>
parents:
33353
diff
changeset
|
989 validate_rparen(CHILD(tree, 4)))); |
|
7c2780c9e51b
Flush out support for ``class B(): pass`` syntax by adding support to the
Brett Cannon <bcannon@gmail.com>
parents:
33353
diff
changeset
|
990 } |
|
7c2780c9e51b
Flush out support for ``class B(): pass`` syntax by adding support to the
Brett Cannon <bcannon@gmail.com>
parents:
33353
diff
changeset
|
991 else if (nch == 6) { |
|
7c2780c9e51b
Flush out support for ``class B(): pass`` syntax by adding support to the
Brett Cannon <bcannon@gmail.com>
parents:
33353
diff
changeset
|
992 res = (validate_lparen(CHILD(tree,2)) && |
|
7c2780c9e51b
Flush out support for ``class B(): pass`` syntax by adding support to the
Brett Cannon <bcannon@gmail.com>
parents:
33353
diff
changeset
|
993 validate_rparen(CHILD(tree,3))); |
|
7c2780c9e51b
Flush out support for ``class B(): pass`` syntax by adding support to the
Brett Cannon <bcannon@gmail.com>
parents:
33353
diff
changeset
|
994 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
995 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
996 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
997 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
998 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
999 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1000 /* if_stmt: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1001 * '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
|
1002 */ |
| 4084 | 1003 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1004 validate_if(node *tree) |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1005 { |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1006 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1007 int res = (validate_ntype(tree, if_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1008 && (nch >= 4) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1009 && validate_name(CHILD(tree, 0), "if") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1010 && validate_test(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1011 && validate_colon(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1012 && validate_suite(CHILD(tree, 3))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1013 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1014 if (res && ((nch % 4) == 3)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1015 /* ... 'else' ':' suite */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1016 res = (validate_name(CHILD(tree, nch - 3), "else") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1017 && validate_colon(CHILD(tree, nch - 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1018 && validate_suite(CHILD(tree, nch - 1))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1019 nch -= 3; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1020 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1021 else if (!res && !PyErr_Occurred()) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1022 (void) validate_numnodes(tree, 4, "if"); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1023 if ((nch % 4) != 0) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1024 /* Will catch the case for nch < 4 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1025 res = validate_numnodes(tree, 0, "if"); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1026 else if (res && (nch > 4)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1027 /* ... ('elif' test ':' suite)+ ... */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1028 int j = 4; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1029 while ((j < nch) && res) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1030 res = (validate_name(CHILD(tree, j), "elif") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1031 && validate_colon(CHILD(tree, j + 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1032 && validate_test(CHILD(tree, j + 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1033 && validate_suite(CHILD(tree, j + 3))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1034 j += 4; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1035 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1036 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1037 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1038 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1039 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1040 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1041 /* parameters: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1042 * '(' [varargslist] ')' |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1043 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1044 */ |
| 4084 | 1045 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1046 validate_parameters(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1047 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1048 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1049 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
|
1050 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1051 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1052 res = (validate_lparen(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1053 && validate_rparen(CHILD(tree, nch - 1))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1054 if (res && (nch == 3)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1055 res = validate_varargslist(CHILD(tree, 1)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1056 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1057 else { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1058 (void) validate_numnodes(tree, 2, "parameters"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1059 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1060 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1061 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1062 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1063 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1064 /* validate_suite() |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1065 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1066 * suite: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1067 * simple_stmt |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1068 * | NEWLINE INDENT stmt+ DEDENT |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1069 */ |
| 4084 | 1070 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1071 validate_suite(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1072 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1073 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1074 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
|
1075 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1076 if (res && (nch == 1)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1077 res = validate_simple_stmt(CHILD(tree, 0)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1078 else if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1079 /* NEWLINE INDENT stmt+ DEDENT */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1080 res = (validate_newline(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1081 && validate_indent(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1082 && validate_stmt(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1083 && validate_dedent(CHILD(tree, nch - 1))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1084 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1085 if (res && (nch > 4)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1086 int i = 3; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1087 --nch; /* forget the DEDENT */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1088 for ( ; res && (i < nch); ++i) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1089 res = validate_stmt(CHILD(tree, i)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1090 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1091 else if (nch < 4) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1092 res = validate_numnodes(tree, 4, "suite"); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1093 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1094 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1095 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1096 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1097 |
| 4084 | 1098 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1099 validate_testlist(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1100 { |
| 4084 | 1101 return (validate_repeating_list(tree, testlist, |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1102 validate_test, "testlist")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1103 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1104 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1105 |
|
20432
56141b86a7f2
Very subtle syntax change: in a list comprehension, the testlist in
Guido van Rossum <guido@python.org>
parents:
19274
diff
changeset
|
1106 static int |
|
23538
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1107 validate_testlist1(node *tree) |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1108 { |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1109 return (validate_repeating_list(tree, testlist1, |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1110 validate_test, "testlist1")); |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1111 } |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1112 |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1113 |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1114 static int |
|
20432
56141b86a7f2
Very subtle syntax change: in a list comprehension, the testlist in
Guido van Rossum <guido@python.org>
parents:
19274
diff
changeset
|
1115 validate_testlist_safe(node *tree) |
|
56141b86a7f2
Very subtle syntax change: in a list comprehension, the testlist in
Guido van Rossum <guido@python.org>
parents:
19274
diff
changeset
|
1116 { |
|
56141b86a7f2
Very subtle syntax change: in a list comprehension, the testlist in
Guido van Rossum <guido@python.org>
parents:
19274
diff
changeset
|
1117 return (validate_repeating_list(tree, testlist_safe, |
|
36673
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
1118 validate_old_test, "testlist_safe")); |
|
20432
56141b86a7f2
Very subtle syntax change: in a list comprehension, the testlist in
Guido van Rossum <guido@python.org>
parents:
19274
diff
changeset
|
1119 } |
|
56141b86a7f2
Very subtle syntax change: in a list comprehension, the testlist in
Guido van Rossum <guido@python.org>
parents:
19274
diff
changeset
|
1120 |
|
56141b86a7f2
Very subtle syntax change: in a list comprehension, the testlist in
Guido van Rossum <guido@python.org>
parents:
19274
diff
changeset
|
1121 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1122 /* '*' NAME [',' '**' NAME] | '**' NAME |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1123 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1124 static int |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1125 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
|
1126 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1127 int nch = NCH(tree); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1128 int res = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1129 int sym; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1130 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1131 if (nch <= start) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1132 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
|
1133 return 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1134 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1135 sym = TYPE(CHILD(tree, start)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1136 if (sym == STAR) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1137 /* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1138 * ('*' NAME [',' '**' NAME] |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1139 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1140 if (nch-start == 2) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1141 res = validate_name(CHILD(tree, start+1), NULL); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1142 else if (nch-start == 5) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1143 res = (validate_name(CHILD(tree, start+1), NULL) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1144 && validate_comma(CHILD(tree, start+2)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1145 && validate_doublestar(CHILD(tree, start+3)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1146 && validate_name(CHILD(tree, start+4), NULL)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1147 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1148 else if (sym == DOUBLESTAR) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1149 /* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1150 * '**' NAME |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1151 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1152 if (nch-start == 2) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1153 res = validate_name(CHILD(tree, start+1), NULL); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1154 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1155 if (!res) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1156 err_string("illegal variable argument trailer for varargslist"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1157 return res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1158 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1159 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1160 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1161 /* validate_varargslist() |
|
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 * varargslist: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1164 * (fpdef ['=' test] ',')* |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1165 * ('*' NAME [',' '**' NAME] |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1166 * | '**' NAME) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1167 * | fpdef ['=' test] (',' fpdef ['=' test])* [','] |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1168 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1169 */ |
| 4084 | 1170 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1171 validate_varargslist(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1172 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1173 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1174 int res = validate_ntype(tree, varargslist) && (nch != 0); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1175 int sym; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1176 |
|
15506
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1177 if (!res) |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1178 return 0; |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1179 if (nch < 1) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1180 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
|
1181 return 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1182 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1183 sym = TYPE(CHILD(tree, 0)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1184 if (sym == STAR || sym == DOUBLESTAR) |
|
15506
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1185 /* whole thing matches: |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1186 * '*' NAME [',' '**' NAME] | '**' NAME |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1187 */ |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1188 res = validate_varargslist_trailer(tree, 0); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1189 else if (sym == fpdef) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1190 int i = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1191 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1192 sym = TYPE(CHILD(tree, nch-1)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1193 if (sym == NAME) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1194 /* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1195 * (fpdef ['=' test] ',')+ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1196 * ('*' NAME [',' '**' NAME] |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1197 * | '**' NAME) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1198 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1199 /* skip over (fpdef ['=' test] ',')+ */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1200 while (res && (i+2 <= nch)) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1201 res = validate_fpdef(CHILD(tree, i)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1202 ++i; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1203 if (res && TYPE(CHILD(tree, i)) == EQUAL && (i+2 <= nch)) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1204 res = (validate_equal(CHILD(tree, i)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1205 && 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
|
1206 if (res) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1207 i += 2; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1208 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1209 if (res && i < nch) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1210 res = validate_comma(CHILD(tree, i)); |
|
15506
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1211 ++i; |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1212 if (res && i < nch |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1213 && (TYPE(CHILD(tree, i)) == DOUBLESTAR |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1214 || TYPE(CHILD(tree, i)) == STAR)) |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1215 break; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1216 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1217 } |
|
15506
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1218 /* ... '*' NAME [',' '**' NAME] | '**' NAME |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1219 * i --^^^ |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1220 */ |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1221 if (res) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1222 res = validate_varargslist_trailer(tree, i); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1223 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1224 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1225 /* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1226 * fpdef ['=' test] (',' fpdef ['=' test])* [','] |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1227 */ |
|
15506
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1228 /* strip trailing comma node */ |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1229 if (sym == COMMA) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1230 res = validate_comma(CHILD(tree, nch-1)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1231 if (!res) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1232 return 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1233 --nch; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1234 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1235 /* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1236 * fpdef ['=' test] (',' fpdef ['=' test])* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1237 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1238 res = validate_fpdef(CHILD(tree, 0)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1239 ++i; |
|
15506
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1240 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
|
1241 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
|
1242 && validate_test(CHILD(tree, i+1))); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1243 i += 2; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1244 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1245 /* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1246 * ... (',' fpdef ['=' test])* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1247 * i ---^^^ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1248 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1249 while (res && (nch - i) >= 2) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1250 res = (validate_comma(CHILD(tree, i)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1251 && validate_fpdef(CHILD(tree, i+1))); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1252 i += 2; |
|
15506
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1253 if (res && (nch - i) >= 2 && 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
|
1254 res = (validate_equal(CHILD(tree, i)) |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1255 && validate_test(CHILD(tree, i+1))); |
|
15506
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1256 i += 2; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1257 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1258 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1259 if (res && nch - i != 0) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1260 res = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1261 err_string("illegal formation for varargslist"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1262 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1263 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1264 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1265 return res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1266 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1267 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1268 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1269 /* list_iter: list_for | list_if |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1270 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1271 static int |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1272 validate_list_iter(node *tree) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1273 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1274 int res = (validate_ntype(tree, list_iter) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1275 && validate_numnodes(tree, 1, "list_iter")); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1276 if (res && TYPE(CHILD(tree, 0)) == list_for) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1277 res = validate_list_for(CHILD(tree, 0)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1278 else |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1279 res = validate_list_if(CHILD(tree, 0)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1280 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1281 return res; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1282 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1283 |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1284 /* gen_iter: gen_for | gen_if |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1285 */ |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1286 static int |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1287 validate_gen_iter(node *tree) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1288 { |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1289 int res = (validate_ntype(tree, gen_iter) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1290 && validate_numnodes(tree, 1, "gen_iter")); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1291 if (res && TYPE(CHILD(tree, 0)) == gen_for) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1292 res = validate_gen_for(CHILD(tree, 0)); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1293 else |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1294 res = validate_gen_if(CHILD(tree, 0)); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1295 |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1296 return res; |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1297 } |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1298 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1299 /* list_for: 'for' exprlist 'in' testlist [list_iter] |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1300 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1301 static int |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1302 validate_list_for(node *tree) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1303 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1304 int nch = NCH(tree); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1305 int res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1306 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1307 if (nch == 5) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1308 res = validate_list_iter(CHILD(tree, 4)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1309 else |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1310 res = validate_numnodes(tree, 4, "list_for"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1311 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1312 if (res) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1313 res = (validate_name(CHILD(tree, 0), "for") |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1314 && validate_exprlist(CHILD(tree, 1)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1315 && validate_name(CHILD(tree, 2), "in") |
|
20432
56141b86a7f2
Very subtle syntax change: in a list comprehension, the testlist in
Guido van Rossum <guido@python.org>
parents:
19274
diff
changeset
|
1316 && validate_testlist_safe(CHILD(tree, 3))); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1317 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1318 return res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1319 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1320 |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1321 /* gen_for: 'for' exprlist 'in' test [gen_iter] |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1322 */ |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1323 static int |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1324 validate_gen_for(node *tree) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1325 { |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1326 int nch = NCH(tree); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1327 int res; |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1328 |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1329 if (nch == 5) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1330 res = validate_gen_iter(CHILD(tree, 4)); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1331 else |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1332 res = validate_numnodes(tree, 4, "gen_for"); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1333 |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1334 if (res) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1335 res = (validate_name(CHILD(tree, 0), "for") |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1336 && validate_exprlist(CHILD(tree, 1)) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1337 && validate_name(CHILD(tree, 2), "in") |
|
36673
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
1338 && validate_or_test(CHILD(tree, 3))); |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1339 |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1340 return res; |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1341 } |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1342 |
| 37622 | 1343 /* list_if: 'if' old_test [list_iter] |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1344 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1345 static int |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1346 validate_list_if(node *tree) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1347 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1348 int nch = NCH(tree); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1349 int res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1350 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1351 if (nch == 3) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1352 res = validate_list_iter(CHILD(tree, 2)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1353 else |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1354 res = validate_numnodes(tree, 2, "list_if"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1355 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1356 if (res) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1357 res = (validate_name(CHILD(tree, 0), "if") |
| 37622 | 1358 && validate_old_test(CHILD(tree, 1))); |
|
14110
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 return res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1361 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1362 |
| 37622 | 1363 /* gen_if: 'if' old_test [gen_iter] |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1364 */ |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1365 static int |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1366 validate_gen_if(node *tree) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1367 { |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1368 int nch = NCH(tree); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1369 int res; |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1370 |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1371 if (nch == 3) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1372 res = validate_gen_iter(CHILD(tree, 2)); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1373 else |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1374 res = validate_numnodes(tree, 2, "gen_if"); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1375 |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1376 if (res) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1377 res = (validate_name(CHILD(tree, 0), "if") |
| 37622 | 1378 && validate_old_test(CHILD(tree, 1))); |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1379 |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1380 return res; |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
1381 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1382 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1383 /* validate_fpdef() |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1384 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1385 * fpdef: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1386 * NAME |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1387 * | '(' fplist ')' |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1388 */ |
| 4084 | 1389 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1390 validate_fpdef(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1391 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1392 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1393 int res = validate_ntype(tree, fpdef); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1394 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1395 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1396 if (nch == 1) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1397 res = validate_ntype(CHILD(tree, 0), NAME); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1398 else if (nch == 3) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1399 res = (validate_lparen(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1400 && validate_fplist(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1401 && validate_rparen(CHILD(tree, 2))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1402 else |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1403 res = validate_numnodes(tree, 1, "fpdef"); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1404 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1405 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1406 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1407 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1408 |
| 4084 | 1409 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1410 validate_fplist(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1411 { |
| 4084 | 1412 return (validate_repeating_list(tree, fplist, |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1413 validate_fpdef, "fplist")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1414 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1415 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1416 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1417 /* simple_stmt | compound_stmt |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1418 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1419 */ |
| 4084 | 1420 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1421 validate_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1422 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1423 int res = (validate_ntype(tree, stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1424 && validate_numnodes(tree, 1, "stmt")); |
|
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 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1427 tree = CHILD(tree, 0); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1428 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1429 if (TYPE(tree) == simple_stmt) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1430 res = validate_simple_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1431 else |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1432 res = validate_compound_stmt(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1433 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1434 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1435 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1436 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1437 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1438 /* small_stmt (';' small_stmt)* [';'] NEWLINE |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1439 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1440 */ |
| 4084 | 1441 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1442 validate_simple_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1443 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1444 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1445 int res = (validate_ntype(tree, simple_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1446 && (nch >= 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1447 && validate_small_stmt(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1448 && validate_newline(CHILD(tree, nch - 1))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1449 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1450 if (nch < 2) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1451 res = validate_numnodes(tree, 2, "simple_stmt"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1452 --nch; /* forget the NEWLINE */ |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1453 if (res && is_even(nch)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1454 res = validate_semi(CHILD(tree, --nch)); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1455 if (res && (nch > 2)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1456 int i; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1457 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1458 for (i = 1; res && (i < nch); i += 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1459 res = (validate_semi(CHILD(tree, i)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1460 && 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
|
1461 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1462 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1463 } |
|
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 |
| 4084 | 1466 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1467 validate_small_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1468 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1469 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
|
1470 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
|
1471 |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1472 if (res) { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1473 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
|
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 ( (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
|
1476 || (ntype == print_stmt) |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1477 || (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
|
1478 || (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
|
1479 || (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
|
1480 || (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
|
1481 || (ntype == global_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 == assert_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 == exec_stmt)) |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1484 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
|
1485 else { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1486 res = 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1487 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
|
1488 } |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1489 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1490 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
|
1491 res = 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1492 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
|
1493 "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
|
1494 TYPE(CHILD(tree, 0))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1495 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1496 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1497 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1498 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1499 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1500 /* compound_stmt: |
|
45447
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
1501 * if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef | decorated |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1502 */ |
| 4084 | 1503 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1504 validate_compound_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1505 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1506 int res = (validate_ntype(tree, compound_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1507 && 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
|
1508 int ntype; |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1509 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1510 if (!res) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1511 return (0); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1512 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1513 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
|
1514 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
|
1515 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
|
1516 || (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
|
1517 || (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
|
1518 || (ntype == try_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 == funcdef) |
|
45447
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
1520 || (ntype == classdef) |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
1521 || (ntype == decorated)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1522 res = validate_node(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1523 else { |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1524 res = 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1525 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
|
1526 "Illegal compound statement type: %d.", TYPE(tree)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1527 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1528 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1529 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1530 |
| 4084 | 1531 static int |
|
35298
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1532 validate_yield_or_testlist(node *tree) |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1533 { |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1534 if (TYPE(tree) == yield_expr) |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1535 return 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
|
1536 else |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1537 return validate_testlist(tree); |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1538 } |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1539 |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1540 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1541 validate_expr_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1542 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1543 int j; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1544 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1545 int res = (validate_ntype(tree, expr_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1546 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1547 && validate_testlist(CHILD(tree, 0))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1548 |
|
14214
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1549 if (res && nch == 3 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1550 && 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
|
1551 res = validate_numnodes(CHILD(tree, 1), 1, "augassign") |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1552 && validate_yield_or_testlist(CHILD(tree, 2)); |
|
14214
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1553 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1554 if (res) { |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1555 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
|
1556 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1557 res = (strcmp(s, "+=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1558 || strcmp(s, "-=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1559 || strcmp(s, "*=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1560 || strcmp(s, "/=") == 0 |
|
27517
51abb5e86226
Teach the parsermodule about floor division. Fixes
Michael W. Hudson <mwh@python.net>
parents:
26979
diff
changeset
|
1561 || strcmp(s, "//=") == 0 |
|
14214
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1562 || strcmp(s, "%=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1563 || strcmp(s, "&=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1564 || strcmp(s, "|=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1565 || 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); |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1569 if (!res) |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1570 err_string("illegal augmmented assignment operator"); |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1571 } |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1572 } |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1573 else { |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1574 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
|
1575 res = validate_equal(CHILD(tree, j)) |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1576 && validate_yield_or_testlist(CHILD(tree, j + 1)); |
|
14214
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1577 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1578 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1579 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1580 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1581 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1582 /* print_stmt: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1583 * |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1584 * 'print' ( [ test (',' test)* [','] ] |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1585 * | '>>' test [ (',' test)+ [','] ] ) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1586 */ |
| 4084 | 1587 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1588 validate_print_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1589 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1590 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1591 int res = (validate_ntype(tree, print_stmt) |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1592 && (nch > 0) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1593 && validate_name(CHILD(tree, 0), "print")); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1594 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1595 if (res && nch > 1) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1596 int sym = TYPE(CHILD(tree, 1)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1597 int i = 1; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1598 int allow_trailing_comma = 1; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1599 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1600 if (sym == test) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1601 res = validate_test(CHILD(tree, i++)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1602 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1603 if (nch < 3) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1604 res = validate_numnodes(tree, 3, "print_stmt"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1605 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1606 res = (validate_ntype(CHILD(tree, i), RIGHTSHIFT) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1607 && 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
|
1608 i += 2; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1609 allow_trailing_comma = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1610 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1611 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1612 if (res) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1613 /* ... (',' test)* [','] */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1614 while (res && i+2 <= nch) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1615 res = (validate_comma(CHILD(tree, i)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1616 && 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
|
1617 allow_trailing_comma = 1; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1618 i += 2; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1619 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1620 if (res && !allow_trailing_comma) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1621 res = validate_numnodes(tree, i, "print_stmt"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1622 else if (res && i < nch) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1623 res = validate_comma(CHILD(tree, i)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1624 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1625 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1626 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1627 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1628 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1629 |
| 4084 | 1630 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1631 validate_del_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1632 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1633 return (validate_numnodes(tree, 2, "del_stmt") |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1634 && validate_name(CHILD(tree, 0), "del") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1635 && validate_exprlist(CHILD(tree, 1))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1636 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1637 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1638 |
| 4084 | 1639 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1640 validate_return_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1641 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1642 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1643 int res = (validate_ntype(tree, return_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1644 && ((nch == 1) || (nch == 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1645 && validate_name(CHILD(tree, 0), "return")); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1646 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1647 if (res && (nch == 2)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1648 res = validate_testlist(CHILD(tree, 1)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1649 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1650 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1651 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1652 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1653 |
| 4084 | 1654 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1655 validate_raise_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1656 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1657 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1658 int res = (validate_ntype(tree, raise_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1659 && ((nch == 1) || (nch == 2) || (nch == 4) || (nch == 6))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1660 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1661 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1662 res = validate_name(CHILD(tree, 0), "raise"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1663 if (res && (nch >= 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1664 res = validate_test(CHILD(tree, 1)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1665 if (res && nch > 2) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1666 res = (validate_comma(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1667 && validate_test(CHILD(tree, 3))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1668 if (res && (nch > 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1669 res = (validate_comma(CHILD(tree, 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1670 && validate_test(CHILD(tree, 5))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1671 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1672 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1673 else |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1674 (void) validate_numnodes(tree, 2, "raise"); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1675 if (res && (nch == 4)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1676 res = (validate_comma(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1677 && validate_test(CHILD(tree, 3))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1678 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1679 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1680 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1681 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1682 |
|
35298
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1683 /* yield_expr: 'yield' [testlist] |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1684 */ |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1685 static int |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1686 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
|
1687 { |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1688 int nch = NCH(tree); |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1689 int res = (validate_ntype(tree, yield_expr) |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1690 && ((nch == 1) || (nch == 2)) |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1691 && validate_name(CHILD(tree, 0), "yield")); |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1692 |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1693 if (res && (nch == 2)) |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1694 res = validate_testlist(CHILD(tree, 1)); |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1695 |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1696 return (res); |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1697 } |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1698 |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1699 |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
1700 /* yield_stmt: yield_expr |
|
18646
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1701 */ |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1702 static int |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1703 validate_yield_stmt(node *tree) |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1704 { |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1705 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
|
1706 && 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
|
1707 && validate_yield_expr(CHILD(tree, 0))); |
|
18646
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1708 } |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1709 |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1710 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1711 static int |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1712 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
|
1713 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1714 int nch = NCH(tree); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1715 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
|
1716 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1717 if (ok) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1718 if (nch == 1) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1719 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
|
1720 else if (nch == 3) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1721 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
|
1722 && 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
|
1723 && 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
|
1724 else |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1725 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
|
1726 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1727 return ok; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1728 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1729 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1730 |
|
15751
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1731 /* dotted_name: NAME ("." NAME)* |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1732 */ |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1733 static int |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1734 validate_dotted_name(node *tree) |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1735 { |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1736 int nch = NCH(tree); |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1737 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
|
1738 && is_odd(nch) |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1739 && 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
|
1740 int i; |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1741 |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1742 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
|
1743 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
|
1744 && 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
|
1745 } |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1746 return res; |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1747 } |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1748 |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1749 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1750 /* 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
|
1751 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1752 static int |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1753 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
|
1754 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1755 int nch = NCH(tree); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1756 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
|
1757 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1758 if (res) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1759 if (nch == 1) |
|
15751
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1760 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
|
1761 else if (nch == 3) |
|
15751
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1762 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
|
1763 && 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
|
1764 && 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
|
1765 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1766 res = 0; |
| 15318 | 1767 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
|
1768 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1769 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1770 return res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1771 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1772 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1773 |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1774 /* dotted_as_name (',' dotted_as_name)* */ |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1775 static int |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1776 validate_dotted_as_names(node *tree) |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1777 { |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1778 int nch = NCH(tree); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1779 int res = is_odd(nch) && validate_dotted_as_name(CHILD(tree, 0)); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1780 int i; |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1781 |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1782 for (i = 1; res && (i < nch); i += 2) |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1783 res = (validate_comma(CHILD(tree, i)) |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1784 && validate_dotted_as_name(CHILD(tree, i + 1))); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1785 return (res); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1786 } |
|
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 /* import_as_name (',' import_as_name)* [','] */ |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1790 static int |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1791 validate_import_as_names(node *tree) |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1792 { |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1793 int nch = NCH(tree); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1794 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
|
1795 int i; |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1796 |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1797 for (i = 1; res && (i + 1 < nch); i += 2) |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1798 res = (validate_comma(CHILD(tree, i)) |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1799 && validate_import_as_name(CHILD(tree, i + 1))); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1800 return (res); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1801 } |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1802 |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1803 |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1804 /* 'import' dotted_as_names */ |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1805 static int |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1806 validate_import_name(node *tree) |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1807 { |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1808 return (validate_ntype(tree, import_name) |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1809 && validate_numnodes(tree, 2, "import_name") |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1810 && validate_name(CHILD(tree, 0), "import") |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1811 && validate_dotted_as_names(CHILD(tree, 1))); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1812 } |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1813 |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1814 /* Helper function to count the number of leading dots in |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1815 * 'from ...module import name' |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1816 */ |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1817 static int |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1818 count_from_dots(node *tree) |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1819 { |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1820 int i; |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1821 for (i = 0; i < NCH(tree); i++) |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1822 if (TYPE(CHILD(tree, i)) != DOT) |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1823 break; |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1824 return i; |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1825 } |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1826 |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1827 /* 'from' ('.'* dotted_name | '.') 'import' ('*' | '(' import_as_names ')' | |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1828 * import_as_names |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1829 */ |
| 4084 | 1830 static int |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1831 validate_import_from(node *tree) |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1832 { |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1833 int nch = NCH(tree); |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1834 int ndots = count_from_dots(tree); |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1835 int havename = (TYPE(CHILD(tree, ndots + 1)) == dotted_name); |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1836 int offset = ndots + havename; |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1837 int res = validate_ntype(tree, import_from) |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1838 && (nch >= 4 + ndots) |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1839 && validate_name(CHILD(tree, 0), "from") |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1840 && (!havename || validate_dotted_name(CHILD(tree, ndots + 1))) |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1841 && validate_name(CHILD(tree, offset + 1), "import"); |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1842 |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1843 if (res && TYPE(CHILD(tree, offset + 2)) == LPAR) |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1844 res = ((nch == offset + 5) |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1845 && validate_lparen(CHILD(tree, offset + 2)) |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1846 && validate_import_as_names(CHILD(tree, offset + 3)) |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1847 && validate_rparen(CHILD(tree, offset + 4))); |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1848 else if (res && TYPE(CHILD(tree, offset + 2)) != STAR) |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36680
diff
changeset
|
1849 res = validate_import_as_names(CHILD(tree, offset + 2)); |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1850 return (res); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1851 } |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1852 |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1853 |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1854 /* import_stmt: import_name | import_from */ |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1855 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1856 validate_import_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1857 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1858 int nch = NCH(tree); |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1859 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
|
1860 |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1861 if (res) { |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1862 int ntype = TYPE(CHILD(tree, 0)); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1863 |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1864 if (ntype == import_name || ntype == import_from) |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1865 res = validate_node(CHILD(tree, 0)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1866 else { |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1867 res = 0; |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1868 err_string("illegal import_stmt child type"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1869 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1870 } |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1871 else if (nch == 1) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1872 res = 0; |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1873 PyErr_Format(parser_error, |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1874 "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
|
1875 TYPE(CHILD(tree, 0))); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1876 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1877 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1878 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1879 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1880 |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1881 |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
1882 |
| 4084 | 1883 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1884 validate_global_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1885 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1886 int j; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1887 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1888 int res = (validate_ntype(tree, global_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1889 && is_even(nch) && (nch >= 2)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1890 |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
1891 if (!res && !PyErr_Occurred()) |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
1892 err_string("illegal global statement"); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
1893 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1894 if (res) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1895 res = (validate_name(CHILD(tree, 0), "global") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1896 && validate_ntype(CHILD(tree, 1), NAME)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1897 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
|
1898 res = (validate_comma(CHILD(tree, j)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1899 && validate_ntype(CHILD(tree, j + 1), NAME)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1900 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1901 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1902 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1903 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1904 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1905 /* exec_stmt: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1906 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1907 * 'exec' expr ['in' test [',' test]] |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1908 */ |
| 4084 | 1909 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1910 validate_exec_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1911 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1912 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1913 int res = (validate_ntype(tree, exec_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1914 && ((nch == 2) || (nch == 4) || (nch == 6)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1915 && validate_name(CHILD(tree, 0), "exec") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1916 && validate_expr(CHILD(tree, 1))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1917 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1918 if (!res && !PyErr_Occurred()) |
| 15318 | 1919 err_string("illegal exec statement"); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1920 if (res && (nch > 2)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1921 res = (validate_name(CHILD(tree, 2), "in") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1922 && validate_test(CHILD(tree, 3))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1923 if (res && (nch == 6)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1924 res = (validate_comma(CHILD(tree, 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1925 && validate_test(CHILD(tree, 5))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1926 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1927 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1928 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1929 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1930 |
| 5236 | 1931 /* assert_stmt: |
| 1932 * | |
| 1933 * 'assert' test [',' test] | |
| 1934 */ | |
| 1935 static int | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1936 validate_assert_stmt(node *tree) |
| 5236 | 1937 { |
| 1938 int nch = NCH(tree); | |
| 1939 int res = (validate_ntype(tree, assert_stmt) | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1940 && ((nch == 2) || (nch == 4)) |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
1941 && (validate_name(CHILD(tree, 0), "assert")) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1942 && validate_test(CHILD(tree, 1))); |
| 5236 | 1943 |
| 1944 if (!res && !PyErr_Occurred()) | |
| 15318 | 1945 err_string("illegal assert statement"); |
| 5236 | 1946 if (res && (nch > 2)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1947 res = (validate_comma(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1948 && validate_test(CHILD(tree, 3))); |
| 5236 | 1949 |
| 1950 return (res); | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1951 } |
| 5236 | 1952 |
| 1953 | |
| 4084 | 1954 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1955 validate_while(node *tree) |
|
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 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1958 int res = (validate_ntype(tree, while_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1959 && ((nch == 4) || (nch == 7)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1960 && validate_name(CHILD(tree, 0), "while") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1961 && validate_test(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1962 && validate_colon(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1963 && validate_suite(CHILD(tree, 3))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1964 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1965 if (res && (nch == 7)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1966 res = (validate_name(CHILD(tree, 4), "else") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1967 && validate_colon(CHILD(tree, 5)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1968 && validate_suite(CHILD(tree, 6))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1969 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1970 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1971 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1972 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1973 |
| 4084 | 1974 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1975 validate_for(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1976 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1977 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1978 int res = (validate_ntype(tree, for_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1979 && ((nch == 6) || (nch == 9)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1980 && validate_name(CHILD(tree, 0), "for") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1981 && validate_exprlist(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1982 && validate_name(CHILD(tree, 2), "in") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1983 && validate_testlist(CHILD(tree, 3)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1984 && validate_colon(CHILD(tree, 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1985 && validate_suite(CHILD(tree, 5))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1986 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1987 if (res && (nch == 9)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1988 res = (validate_name(CHILD(tree, 6), "else") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1989 && validate_colon(CHILD(tree, 7)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1990 && validate_suite(CHILD(tree, 8))); |
|
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 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1993 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1994 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1995 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1996 /* try_stmt: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1997 * 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite] |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1998 * | 'try' ':' suite 'finally' ':' suite |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1999 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2000 */ |
| 4084 | 2001 static int |
| 13503 | 2002 validate_try(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2003 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2004 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2005 int pos = 3; |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2006 int res = (validate_ntype(tree, try_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2007 && (nch >= 6) && ((nch % 3) == 0)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2008 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2009 if (res) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2010 res = (validate_name(CHILD(tree, 0), "try") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2011 && validate_colon(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2012 && validate_suite(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2013 && validate_colon(CHILD(tree, nch - 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2014 && 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
|
2015 else if (!PyErr_Occurred()) { |
|
13325
7bac10a9bb61
Andrew Kuchling <akuchlin@mems-exchange.org>:
Fred Drake <fdrake@acm.org>
parents:
13256
diff
changeset
|
2016 const char* name = "except"; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2017 if (TYPE(CHILD(tree, nch - 3)) != except_clause) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2018 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
|
2019 |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
2020 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
|
2021 "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
|
2022 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2023 /* Skip past except_clause sections: */ |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2024 while (res && (TYPE(CHILD(tree, pos)) == except_clause)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2025 res = (validate_except_clause(CHILD(tree, pos)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2026 && validate_colon(CHILD(tree, pos + 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2027 && validate_suite(CHILD(tree, pos + 2))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2028 pos += 3; |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2029 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2030 if (res && (pos < nch)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2031 res = validate_ntype(CHILD(tree, pos), NAME); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2032 if (res && (strcmp(STR(CHILD(tree, pos)), "finally") == 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2033 res = (validate_numnodes(tree, 6, "try/finally") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2034 && validate_colon(CHILD(tree, 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2035 && validate_suite(CHILD(tree, 5))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2036 else if (res) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2037 if (nch == (pos + 3)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2038 res = ((strcmp(STR(CHILD(tree, pos)), "except") == 0) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2039 || (strcmp(STR(CHILD(tree, pos)), "else") == 0)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2040 if (!res) |
| 15318 | 2041 err_string("illegal trailing triple in try statement"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2042 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2043 else if (nch == (pos + 6)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2044 res = (validate_name(CHILD(tree, pos), "except") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2045 && validate_colon(CHILD(tree, pos + 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2046 && validate_suite(CHILD(tree, pos + 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2047 && validate_name(CHILD(tree, pos + 3), "else")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2048 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2049 else |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2050 res = validate_numnodes(tree, pos + 3, "try/except"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2051 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2052 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2053 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2054 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2055 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2056 |
| 4084 | 2057 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2058 validate_except_clause(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2059 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2060 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2061 int res = (validate_ntype(tree, except_clause) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2062 && ((nch == 1) || (nch == 2) || (nch == 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2063 && validate_name(CHILD(tree, 0), "except")); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2064 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2065 if (res && (nch > 1)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2066 res = validate_test(CHILD(tree, 1)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2067 if (res && (nch == 4)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2068 res = (validate_comma(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2069 && validate_test(CHILD(tree, 3))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2070 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2071 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2072 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2073 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2074 |
| 4084 | 2075 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2076 validate_test(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2077 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2078 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2079 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
|
2080 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2081 if (res && (TYPE(CHILD(tree, 0)) == lambdef)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2082 res = ((nch == 1) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2083 && validate_lambdef(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2084 else if (res) { |
|
36673
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2085 res = validate_or_test(CHILD(tree, 0)); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2086 res = (res && (nch == 1 || (nch == 5 && |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2087 validate_name(CHILD(tree, 1), "if") && |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2088 validate_or_test(CHILD(tree, 2)) && |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2089 validate_name(CHILD(tree, 3), "else") && |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2090 validate_test(CHILD(tree, 4))))); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2091 } |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2092 return (res); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2093 } |
|
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 static int |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2096 validate_old_test(node *tree) |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2097 { |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2098 int nch = NCH(tree); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2099 int res = validate_ntype(tree, old_test) && (nch == 1); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2100 |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2101 if (res && (TYPE(CHILD(tree, 0)) == old_lambdef)) |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2102 res = (validate_old_lambdef(CHILD(tree, 0))); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2103 else if (res) { |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2104 res = (validate_or_test(CHILD(tree, 0))); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2105 } |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2106 return (res); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2107 } |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2108 |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2109 static int |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2110 validate_or_test(node *tree) |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2111 { |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2112 int nch = NCH(tree); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2113 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
|
2114 |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2115 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2116 int pos; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2117 res = validate_and_test(CHILD(tree, 0)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2118 for (pos = 1; res && (pos < nch); pos += 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2119 res = (validate_name(CHILD(tree, pos), "or") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2120 && 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
|
2121 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2122 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2123 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2124 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2125 |
| 4084 | 2126 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2127 validate_and_test(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2128 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2129 int pos; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2130 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2131 int res = (validate_ntype(tree, and_test) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2132 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2133 && validate_not_test(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2134 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2135 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
|
2136 res = (validate_name(CHILD(tree, pos), "and") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2137 && validate_not_test(CHILD(tree, 0))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2138 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2139 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2140 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2141 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2142 |
| 4084 | 2143 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2144 validate_not_test(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2145 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2146 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2147 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
|
2148 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2149 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2150 if (nch == 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2151 res = (validate_name(CHILD(tree, 0), "not") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2152 && validate_not_test(CHILD(tree, 1))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2153 else if (nch == 1) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2154 res = validate_comparison(CHILD(tree, 0)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2155 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2156 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2157 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2158 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2159 |
| 4084 | 2160 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2161 validate_comparison(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2162 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2163 int pos; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2164 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2165 int res = (validate_ntype(tree, comparison) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2166 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2167 && validate_expr(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2168 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2169 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
|
2170 res = (validate_comp_op(CHILD(tree, pos)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2171 && validate_expr(CHILD(tree, pos + 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2172 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2173 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2174 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2175 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2176 |
| 4084 | 2177 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2178 validate_comp_op(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2179 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2180 int res = 0; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2181 int nch = NCH(tree); |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2182 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2183 if (!validate_ntype(tree, comp_op)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2184 return (0); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2185 if (nch == 1) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2186 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2187 * 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
|
2188 * 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
|
2189 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2190 tree = CHILD(tree, 0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2191 switch (TYPE(tree)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2192 case LESS: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2193 case GREATER: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2194 case EQEQUAL: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2195 case EQUAL: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2196 case LESSEQUAL: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2197 case GREATEREQUAL: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2198 case NOTEQUAL: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2199 res = 1; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2200 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2201 case NAME: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2202 res = ((strcmp(STR(tree), "in") == 0) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2203 || (strcmp(STR(tree), "is") == 0)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2204 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
|
2205 PyErr_Format(parser_error, |
| 15318 | 2206 "illegal operator '%s'", STR(tree)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2207 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2208 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2209 default: |
| 15318 | 2210 err_string("illegal comparison operator type"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2211 break; |
|
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 } |
| 4600 | 2214 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
|
2215 res = (validate_ntype(CHILD(tree, 0), NAME) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2216 && validate_ntype(CHILD(tree, 1), NAME) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2217 && (((strcmp(STR(CHILD(tree, 0)), "is") == 0) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2218 && (strcmp(STR(CHILD(tree, 1)), "not") == 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2219 || ((strcmp(STR(CHILD(tree, 0)), "not") == 0) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2220 && (strcmp(STR(CHILD(tree, 1)), "in") == 0)))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2221 if (!res && !PyErr_Occurred()) |
| 15318 | 2222 err_string("unknown comparison operator"); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2223 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2224 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2225 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2226 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2227 |
| 4084 | 2228 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2229 validate_expr(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2230 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2231 int j; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2232 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2233 int res = (validate_ntype(tree, expr) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2234 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2235 && validate_xor_expr(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2236 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2237 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
|
2238 res = (validate_xor_expr(CHILD(tree, j)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2239 && validate_vbar(CHILD(tree, j - 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2240 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2241 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2242 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2243 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2244 |
| 4084 | 2245 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2246 validate_xor_expr(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2247 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2248 int j; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2249 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2250 int res = (validate_ntype(tree, xor_expr) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2251 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2252 && validate_and_expr(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2253 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2254 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
|
2255 res = (validate_circumflex(CHILD(tree, j - 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2256 && validate_and_expr(CHILD(tree, j))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2257 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2258 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2259 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2260 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2261 |
| 4084 | 2262 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2263 validate_and_expr(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2264 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2265 int pos; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2266 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2267 int res = (validate_ntype(tree, and_expr) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2268 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2269 && validate_shift_expr(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2270 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2271 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
|
2272 res = (validate_ampersand(CHILD(tree, pos)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2273 && validate_shift_expr(CHILD(tree, pos + 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2274 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2275 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2276 } |
|
3200
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 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2279 static int |
| 13503 | 2280 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
|
2281 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2282 int pos = 1; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2283 int nch = NCH(tree); |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2284 int res = (is_odd(nch) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2285 && (*termvalid)(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2286 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2287 for ( ; res && (pos < nch); pos += 2) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2288 if (TYPE(CHILD(tree, pos)) != op1) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2289 res = validate_ntype(CHILD(tree, pos), op2); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2290 if (res) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2291 res = (*termvalid)(CHILD(tree, pos + 1)); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2292 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2293 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2294 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2295 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2296 |
| 4084 | 2297 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2298 validate_shift_expr(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2299 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2300 return (validate_ntype(tree, shift_expr) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2301 && validate_chain_two_ops(tree, validate_arith_expr, |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2302 LEFTSHIFT, RIGHTSHIFT)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2303 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2304 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2305 |
| 4084 | 2306 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2307 validate_arith_expr(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2308 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2309 return (validate_ntype(tree, arith_expr) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2310 && 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
|
2311 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2312 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2313 |
| 4084 | 2314 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2315 validate_term(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2316 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2317 int pos = 1; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2318 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2319 int res = (validate_ntype(tree, term) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2320 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2321 && validate_factor(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2322 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2323 for ( ; res && (pos < nch); pos += 2) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2324 res = (((TYPE(CHILD(tree, pos)) == STAR) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2325 || (TYPE(CHILD(tree, pos)) == SLASH) |
|
27517
51abb5e86226
Teach the parsermodule about floor division. Fixes
Michael W. Hudson <mwh@python.net>
parents:
26979
diff
changeset
|
2326 || (TYPE(CHILD(tree, pos)) == DOUBLESLASH) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2327 || (TYPE(CHILD(tree, pos)) == PERCENT)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2328 && validate_factor(CHILD(tree, pos + 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2329 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2330 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2331 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2332 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2333 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2334 /* factor: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2335 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2336 * factor: ('+'|'-'|'~') factor | power |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2337 */ |
| 4084 | 2338 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2339 validate_factor(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2340 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2341 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2342 int res = (validate_ntype(tree, factor) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2343 && (((nch == 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2344 && ((TYPE(CHILD(tree, 0)) == PLUS) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2345 || (TYPE(CHILD(tree, 0)) == MINUS) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2346 || (TYPE(CHILD(tree, 0)) == TILDE)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2347 && validate_factor(CHILD(tree, 1))) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2348 || ((nch == 1) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2349 && validate_power(CHILD(tree, 0))))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2350 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2351 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2352 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2353 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2354 /* power: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2355 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2356 * power: atom trailer* ('**' factor)* |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2357 */ |
| 4084 | 2358 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2359 validate_power(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2360 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2361 int pos = 1; |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2362 int nch = NCH(tree); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2363 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
|
2364 && validate_atom(CHILD(tree, 0))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2365 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2366 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
|
2367 res = validate_trailer(CHILD(tree, pos++)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2368 if (res && (pos < nch)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2369 if (!is_even(nch - pos)) { |
| 15318 | 2370 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
|
2371 return (0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2372 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2373 for ( ; res && (pos < (nch - 1)); pos += 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2374 res = (validate_doublestar(CHILD(tree, pos)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2375 && validate_factor(CHILD(tree, pos + 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2376 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2377 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2378 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2379 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2380 |
| 4084 | 2381 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2382 validate_atom(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2383 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2384 int pos; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2385 int nch = NCH(tree); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2386 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
|
2387 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2388 if (res && nch < 1) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2389 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
|
2390 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2391 switch (TYPE(CHILD(tree, 0))) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2392 case LPAR: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2393 res = ((nch <= 3) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2394 && (validate_rparen(CHILD(tree, nch - 1)))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2395 |
|
35298
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
2396 if (res && (nch == 3)) { |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
2397 if (TYPE(CHILD(tree, 1))==yield_expr) |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
2398 res = validate_yield_expr(CHILD(tree, 1)); |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
2399 else |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
2400 res = validate_testlist_gexp(CHILD(tree, 1)); |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
2401 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2402 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2403 case LSQB: |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2404 if (nch == 2) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2405 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
|
2406 else if (nch == 3) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2407 res = (validate_listmaker(CHILD(tree, 1)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2408 && 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
|
2409 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2410 res = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2411 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
|
2412 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2413 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2414 case LBRACE: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2415 res = ((nch <= 3) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2416 && 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
|
2417 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2418 if (res && (nch == 3)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2419 res = validate_dictmaker(CHILD(tree, 1)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2420 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2421 case BACKQUOTE: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2422 res = ((nch == 3) |
|
23538
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
2423 && validate_testlist1(CHILD(tree, 1)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2424 && validate_ntype(CHILD(tree, 2), BACKQUOTE)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2425 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2426 case NAME: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2427 case NUMBER: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2428 res = (nch == 1); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2429 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2430 case STRING: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2431 for (pos = 1; res && (pos < nch); ++pos) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2432 res = validate_ntype(CHILD(tree, pos), STRING); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2433 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2434 default: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2435 res = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2436 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2437 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2438 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2439 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2440 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2441 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2442 |
|
14129
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2443 /* listmaker: |
|
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2444 * test ( list_for | (',' test)* [','] ) |
|
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2445 */ |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2446 static int |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2447 validate_listmaker(node *tree) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2448 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2449 int nch = NCH(tree); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2450 int ok = nch; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2451 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2452 if (nch == 0) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2453 err_string("missing child nodes of listmaker"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2454 else |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2455 ok = validate_test(CHILD(tree, 0)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2456 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2457 /* |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2458 * list_for | (',' test)* [','] |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2459 */ |
|
14129
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2460 if (nch == 2 && TYPE(CHILD(tree, 1)) == list_for) |
|
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2461 ok = validate_list_for(CHILD(tree, 1)); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2462 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2463 /* (',' test)* [','] */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2464 int i = 1; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2465 while (ok && nch - i >= 2) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2466 ok = (validate_comma(CHILD(tree, i)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2467 && validate_test(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
|
2468 i += 2; |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2469 } |
|
14129
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2470 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
|
2471 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
|
2472 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
|
2473 ok = 0; |
|
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2474 err_string("illegal trailing nodes for listmaker"); |
|
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2475 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2476 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2477 return ok; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2478 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2479 |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2480 /* testlist_gexp: |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2481 * test ( gen_for | (',' test)* [','] ) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2482 */ |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2483 static int |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2484 validate_testlist_gexp(node *tree) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2485 { |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2486 int nch = NCH(tree); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2487 int ok = nch; |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2488 |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2489 if (nch == 0) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2490 err_string("missing child nodes of testlist_gexp"); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2491 else { |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2492 ok = validate_test(CHILD(tree, 0)); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2493 } |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2494 |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2495 /* |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2496 * gen_for | (',' test)* [','] |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2497 */ |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2498 if (nch == 2 && TYPE(CHILD(tree, 1)) == gen_for) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2499 ok = validate_gen_for(CHILD(tree, 1)); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2500 else { |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2501 /* (',' test)* [','] */ |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2502 int i = 1; |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2503 while (ok && nch - i >= 2) { |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2504 ok = (validate_comma(CHILD(tree, i)) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2505 && validate_test(CHILD(tree, i+1))); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2506 i += 2; |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2507 } |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2508 if (ok && i == nch-1) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2509 ok = validate_comma(CHILD(tree, i)); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2510 else if (i != nch) { |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2511 ok = 0; |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2512 err_string("illegal trailing nodes for testlist_gexp"); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2513 } |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2514 } |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2515 return ok; |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2516 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2517 |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2518 /* decorator: |
|
33166
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2519 * '@' dotted_name [ '(' [arglist] ')' ] NEWLINE |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2520 */ |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2521 static int |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2522 validate_decorator(node *tree) |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2523 { |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2524 int ok; |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2525 int nch = NCH(tree); |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2526 ok = (validate_ntype(tree, decorator) && |
|
33166
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2527 (nch == 3 || nch == 5 || nch == 6) && |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2528 validate_at(CHILD(tree, 0)) && |
|
33166
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2529 validate_dotted_name(CHILD(tree, 1)) && |
|
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2530 validate_newline(RCHILD(tree, -1))); |
|
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2531 |
|
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2532 if (ok && nch != 3) { |
|
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2533 ok = (validate_lparen(CHILD(tree, 2)) && |
|
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2534 validate_rparen(RCHILD(tree, -2))); |
|
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2535 |
|
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2536 if (ok && nch == 6) |
|
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2537 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
|
2538 } |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2539 |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2540 return ok; |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2541 } |
|
33166
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2542 |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2543 /* decorators: |
|
33166
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2544 * decorator+ |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2545 */ |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2546 static int |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2547 validate_decorators(node *tree) |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2548 { |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2549 int i, nch, ok; |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2550 nch = NCH(tree); |
|
33166
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2551 ok = validate_ntype(tree, decorators) && nch >= 1; |
|
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2552 |
|
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2553 for (i = 0; ok && i < nch; ++i) |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2554 ok = validate_decorator(CHILD(tree, i)); |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2555 |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2556 return ok; |
|
33166
2e8d2bdd33de
This is Mark Russell's patch:
Michael W. Hudson <mwh@python.net>
parents:
32888
diff
changeset
|
2557 } |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2558 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2559 /* funcdef: |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2560 * |
|
45447
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2561 * -5 -4 -3 -2 -1 |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2562 * 'def' NAME parameters ':' suite |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2563 */ |
| 4084 | 2564 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2565 validate_funcdef(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2566 { |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2567 int nch = NCH(tree); |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2568 int ok = (validate_ntype(tree, funcdef) |
|
45447
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2569 && (nch == 5) |
|
32888
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2570 && validate_name(RCHILD(tree, -5), "def") |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2571 && validate_ntype(RCHILD(tree, -4), NAME) |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2572 && validate_colon(RCHILD(tree, -2)) |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2573 && validate_parameters(RCHILD(tree, -3)) |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2574 && validate_suite(RCHILD(tree, -1))); |
|
c7e03cf8333e
PEP-0318, @decorator-style. In Guido's words:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
32121
diff
changeset
|
2575 return ok; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2576 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2577 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2578 |
|
45447
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2579 /* decorated |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2580 * decorators (classdef | funcdef) |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2581 */ |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2582 static int |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2583 validate_decorated(node *tree) |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2584 { |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2585 int nch = NCH(tree); |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2586 int ok = (validate_ntype(tree, decorated) |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2587 && (nch == 2) |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2588 && validate_decorators(RCHILD(tree, -2)) |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2589 && (validate_funcdef(RCHILD(tree, -1)) |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2590 || validate_class(RCHILD(tree, -1))) |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2591 ); |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2592 return ok; |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2593 } |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2594 |
| 4084 | 2595 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2596 validate_lambdef(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2597 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2598 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2599 int res = (validate_ntype(tree, lambdef) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2600 && ((nch == 3) || (nch == 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2601 && validate_name(CHILD(tree, 0), "lambda") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2602 && validate_colon(CHILD(tree, nch - 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2603 && validate_test(CHILD(tree, nch - 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2604 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2605 if (res && (nch == 4)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2606 res = validate_varargslist(CHILD(tree, 1)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2607 else if (!res && !PyErr_Occurred()) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2608 (void) validate_numnodes(tree, 3, "lambdef"); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2609 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2610 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2611 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2612 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2613 |
|
36673
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2614 static int |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2615 validate_old_lambdef(node *tree) |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2616 { |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2617 int nch = NCH(tree); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2618 int res = (validate_ntype(tree, old_lambdef) |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2619 && ((nch == 3) || (nch == 4)) |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2620 && validate_name(CHILD(tree, 0), "lambda") |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2621 && validate_colon(CHILD(tree, nch - 2)) |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2622 && validate_test(CHILD(tree, nch - 1))); |
|
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 if (res && (nch == 4)) |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2625 res = validate_varargslist(CHILD(tree, 1)); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2626 else if (!res && !PyErr_Occurred()) |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2627 (void) validate_numnodes(tree, 3, "old_lambdef"); |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2628 |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2629 return (res); |
|
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 |
|
2ddea5535f08
Update for PEP 308 patch.
Thomas Wouters <thomas@python.org>
parents:
36518
diff
changeset
|
2632 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2633 /* arglist: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2634 * |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2635 * (argument ',')* (argument [','] | '*' test [',' '**' test] | '**' test) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2636 */ |
| 4084 | 2637 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2638 validate_arglist(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2639 { |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2640 int nch = NCH(tree); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2641 int i = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2642 int ok = 1; |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2643 |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2644 if (nch <= 0) |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2645 /* 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
|
2646 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
|
2647 |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2648 if (nch > 1) { |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2649 for (i=0; i<nch; i++) { |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2650 if (TYPE(CHILD(tree, i)) == argument) { |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2651 node *ch = CHILD(tree, i); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2652 if (NCH(ch) == 2 && TYPE(CHILD(ch, 1)) == gen_for) { |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2653 err_string("need '(', ')' for generator expression"); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2654 return 0; |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2655 } |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2656 } |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2657 } |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2658 } |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2659 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2660 while (ok && nch-i >= 2) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2661 /* skip leading (argument ',') */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2662 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
|
2663 && 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
|
2664 if (ok) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2665 i += 2; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2666 else |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2667 PyErr_Clear(); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2668 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2669 ok = 1; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2670 if (nch-i > 0) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2671 /* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2672 * argument | '*' test [',' '**' test] | '**' test |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2673 */ |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2674 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
|
2675 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2676 if (sym == argument) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2677 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
|
2678 if (ok && i+1 != nch) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2679 err_string("illegal arglist specification" |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2680 " (extra stuff on end)"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2681 ok = 0; |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2682 } |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2683 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2684 else if (sym == STAR) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2685 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
|
2686 if (ok && (nch-i == 2)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2687 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
|
2688 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
|
2689 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
|
2690 && 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
|
2691 && 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
|
2692 && 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
|
2693 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2694 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
|
2695 ok = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2696 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2697 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2698 else if (sym == DOUBLESTAR) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2699 if (nch-i == 2) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2700 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
|
2701 && 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
|
2702 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2703 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
|
2704 ok = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2705 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2706 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2707 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2708 err_string("illegal arglist specification"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2709 ok = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2710 } |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2711 } |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2712 return (ok); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2713 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2714 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2715 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2716 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2717 /* argument: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2718 * |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2719 * [test '='] test [gen_for] |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2720 */ |
| 4084 | 2721 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2722 validate_argument(node *tree) |
|
3774
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 int nch = NCH(tree); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2725 int res = (validate_ntype(tree, argument) |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2726 && ((nch == 1) || (nch == 2) || (nch == 3)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2727 && validate_test(CHILD(tree, 0))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2728 |
|
32121
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2729 if (res && (nch == 2)) |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2730 res = validate_gen_for(CHILD(tree, 1)); |
|
302d399cfd37
SF patch #872326: Generator expression implementation
Raymond Hettinger <python@rcn.com>
parents:
30979
diff
changeset
|
2731 else if (res && (nch == 3)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2732 res = (validate_equal(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2733 && validate_test(CHILD(tree, 2))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2734 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2735 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2736 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2737 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2738 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2739 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2740 /* trailer: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2741 * |
| 4084 | 2742 * '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2743 */ |
| 4084 | 2744 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2745 validate_trailer(node *tree) |
|
3774
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 int nch = NCH(tree); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2748 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
|
2749 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2750 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2751 switch (TYPE(CHILD(tree, 0))) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2752 case LPAR: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2753 res = validate_rparen(CHILD(tree, nch - 1)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2754 if (res && (nch == 3)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2755 res = validate_arglist(CHILD(tree, 1)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2756 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2757 case LSQB: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2758 res = (validate_numnodes(tree, 3, "trailer") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2759 && validate_subscriptlist(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2760 && validate_ntype(CHILD(tree, 2), RSQB)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2761 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2762 case DOT: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2763 res = (validate_numnodes(tree, 2, "trailer") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2764 && validate_ntype(CHILD(tree, 1), NAME)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2765 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2766 default: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2767 res = 0; |
|
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 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2770 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2771 else { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2772 (void) validate_numnodes(tree, 2, "trailer"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2773 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2774 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2775 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2776 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2777 |
| 4084 | 2778 /* subscriptlist: |
| 2779 * | |
| 2780 * subscript (',' subscript)* [','] | |
| 2781 */ | |
| 2782 static int | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2783 validate_subscriptlist(node *tree) |
| 4084 | 2784 { |
| 2785 return (validate_repeating_list(tree, subscriptlist, | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2786 validate_subscript, "subscriptlist")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2787 } |
| 4084 | 2788 |
| 2789 | |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2790 /* subscript: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2791 * |
| 4084 | 2792 * '.' '.' '.' | test | [test] ':' [test] [sliceop] |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2793 */ |
| 4084 | 2794 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2795 validate_subscript(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2796 { |
| 4084 | 2797 int offset = 0; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2798 int nch = NCH(tree); |
| 4084 | 2799 int res = validate_ntype(tree, subscript) && (nch >= 1) && (nch <= 4); |
| 2800 | |
| 2801 if (!res) { | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2802 if (!PyErr_Occurred()) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2803 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
|
2804 return (0); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2805 } |
| 4084 | 2806 if (TYPE(CHILD(tree, 0)) == DOT) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2807 /* take care of ('.' '.' '.') possibility */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2808 return (validate_numnodes(tree, 3, "subscript") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2809 && validate_dot(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2810 && validate_dot(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2811 && validate_dot(CHILD(tree, 2))); |
| 4084 | 2812 if (nch == 1) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2813 if (TYPE(CHILD(tree, 0)) == test) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2814 res = validate_test(CHILD(tree, 0)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2815 else |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2816 res = validate_colon(CHILD(tree, 0)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2817 return (res); |
| 4084 | 2818 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2819 /* Must be [test] ':' [test] [sliceop], |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2820 * 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
|
2821 * be present, but we don't know which yet. |
| 4084 | 2822 */ |
| 2823 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
|
2824 res = validate_test(CHILD(tree, 0)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2825 offset = 1; |
| 4084 | 2826 } |
| 2827 if (res) | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2828 res = validate_colon(CHILD(tree, offset)); |
| 4084 | 2829 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2830 int rem = nch - ++offset; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2831 if (rem) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2832 if (TYPE(CHILD(tree, offset)) == test) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2833 res = validate_test(CHILD(tree, offset)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2834 ++offset; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2835 --rem; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2836 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2837 if (res && rem) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2838 res = validate_sliceop(CHILD(tree, offset)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2839 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2840 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2841 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2842 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2843 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2844 |
| 4084 | 2845 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2846 validate_sliceop(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2847 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2848 int nch = NCH(tree); |
| 4084 | 2849 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
|
2850 && validate_ntype(tree, sliceop); |
| 4084 | 2851 if (!res && !PyErr_Occurred()) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2852 res = validate_numnodes(tree, 1, "sliceop"); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2853 } |
| 4084 | 2854 if (res) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2855 res = validate_colon(CHILD(tree, 0)); |
| 4084 | 2856 if (res && (nch == 2)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2857 res = validate_test(CHILD(tree, 1)); |
| 4084 | 2858 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2859 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2860 } |
| 4084 | 2861 |
| 2862 | |
| 2863 static int | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2864 validate_exprlist(node *tree) |
| 4084 | 2865 { |
| 2866 return (validate_repeating_list(tree, exprlist, | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2867 validate_expr, "exprlist")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2868 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2869 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2870 |
| 4084 | 2871 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2872 validate_dictmaker(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2873 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2874 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2875 int res = (validate_ntype(tree, dictmaker) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2876 && (nch >= 3) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2877 && validate_test(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2878 && validate_colon(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2879 && validate_test(CHILD(tree, 2))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2880 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2881 if (res && ((nch % 4) == 0)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2882 res = validate_comma(CHILD(tree, --nch)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2883 else if (res) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2884 res = ((nch % 4) == 3); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2885 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2886 if (res && (nch > 3)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2887 int pos = 3; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2888 /* ( ',' test ':' test )* */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2889 while (res && (pos < nch)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2890 res = (validate_comma(CHILD(tree, pos)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2891 && validate_test(CHILD(tree, pos + 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2892 && validate_colon(CHILD(tree, pos + 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2893 && validate_test(CHILD(tree, pos + 3))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2894 pos += 4; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2895 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2896 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2897 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2898 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2899 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2900 |
| 4084 | 2901 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2902 validate_eval_input(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2903 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2904 int pos; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2905 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2906 int res = (validate_ntype(tree, eval_input) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2907 && (nch >= 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2908 && validate_testlist(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2909 && 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
|
2910 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2911 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
|
2912 res = validate_ntype(CHILD(tree, pos), NEWLINE); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2913 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2914 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2915 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2916 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2917 |
| 4084 | 2918 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2919 validate_node(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2920 { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2921 int nch = 0; /* num. children on current node */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2922 int res = 1; /* result value */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2923 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
|
2924 |
|
18247
e3cf3348feca
Properly use &&. Closes bug #434989.
Martin v. Löwis <martin@v.loewis.de>
parents:
15751
diff
changeset
|
2925 while (res && (tree != 0)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2926 nch = NCH(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2927 next = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2928 switch (TYPE(tree)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2929 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2930 * Definition nodes. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2931 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2932 case funcdef: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2933 res = validate_funcdef(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2934 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2935 case classdef: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2936 res = validate_class(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2937 break; |
|
45447
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2938 case decorated: |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2939 res = validate_decorated(tree); |
|
393822f2ef90
Patch #1759: Backport of PEP 3129 class decorators
Christian Heimes <christian@cheimes.de>
parents:
44439
diff
changeset
|
2940 break; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2941 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2942 * "Trivial" parse tree nodes. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2943 * (Why did I call these trivial?) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2944 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2945 case stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2946 res = validate_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2947 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2948 case small_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2949 /* |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
2950 * expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2951 * | import_stmt | global_stmt | exec_stmt | assert_stmt |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2952 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2953 res = validate_small_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2954 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2955 case flow_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2956 res = (validate_numnodes(tree, 1, "flow_stmt") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2957 && ((TYPE(CHILD(tree, 0)) == break_stmt) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2958 || (TYPE(CHILD(tree, 0)) == continue_stmt) |
|
18646
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
2959 || (TYPE(CHILD(tree, 0)) == yield_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2960 || (TYPE(CHILD(tree, 0)) == return_stmt) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2961 || (TYPE(CHILD(tree, 0)) == raise_stmt))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2962 if (res) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2963 next = CHILD(tree, 0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2964 else if (nch == 1) |
| 15318 | 2965 err_string("illegal flow_stmt type"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2966 break; |
|
18646
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
2967 case yield_stmt: |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
2968 res = validate_yield_stmt(tree); |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
2969 break; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2970 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2971 * Compound statements. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2972 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2973 case simple_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2974 res = validate_simple_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2975 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2976 case compound_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2977 res = validate_compound_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2978 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2979 /* |
|
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
|
2980 * Fundamental statements. |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2981 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2982 case expr_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2983 res = validate_expr_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2984 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2985 case print_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2986 res = validate_print_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2987 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2988 case del_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2989 res = validate_del_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2990 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2991 case pass_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2992 res = (validate_numnodes(tree, 1, "pass") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2993 && validate_name(CHILD(tree, 0), "pass")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2994 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2995 case break_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2996 res = (validate_numnodes(tree, 1, "break") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2997 && validate_name(CHILD(tree, 0), "break")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2998 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2999 case continue_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3000 res = (validate_numnodes(tree, 1, "continue") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3001 && validate_name(CHILD(tree, 0), "continue")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3002 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3003 case return_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3004 res = validate_return_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3005 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3006 case raise_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3007 res = validate_raise_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3008 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3009 case import_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3010 res = validate_import_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3011 break; |
|
33353
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
3012 case import_name: |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
3013 res = validate_import_name(tree); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
3014 break; |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
3015 case import_from: |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
3016 res = validate_import_from(tree); |
|
f7474d31ba3f
SF patch #1007189, multi-line imports, for instance:
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33166
diff
changeset
|
3017 break; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3018 case global_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3019 res = validate_global_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3020 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3021 case exec_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3022 res = validate_exec_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3023 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3024 case assert_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3025 res = validate_assert_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3026 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3027 case if_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3028 res = validate_if(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3029 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3030 case while_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3031 res = validate_while(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 for_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3034 res = validate_for(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3035 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3036 case try_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3037 res = validate_try(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3038 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3039 case suite: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3040 res = validate_suite(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3041 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3042 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3043 * Expression nodes. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3044 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3045 case testlist: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3046 res = validate_testlist(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3047 break; |
|
35298
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
3048 case yield_expr: |
|
b2fe5f8fcfdd
PEP 342 implementation. Per Guido's comments, the generator throw()
Phillip J. Eby <pje@telecommunity.com>
parents:
34887
diff
changeset
|
3049 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
|
3050 break; |
|
23538
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
3051 case testlist1: |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
3052 res = validate_testlist1(tree); |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
3053 break; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3054 case test: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3055 res = validate_test(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3056 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3057 case and_test: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3058 res = validate_and_test(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3059 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3060 case not_test: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3061 res = validate_not_test(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3062 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3063 case comparison: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3064 res = validate_comparison(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3065 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3066 case exprlist: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3067 res = validate_exprlist(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3068 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3069 case comp_op: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3070 res = validate_comp_op(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3071 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3072 case expr: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3073 res = validate_expr(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3074 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3075 case xor_expr: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3076 res = validate_xor_expr(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3077 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3078 case and_expr: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3079 res = validate_and_expr(tree); |
|
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 shift_expr: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3082 res = validate_shift_expr(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3083 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3084 case arith_expr: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3085 res = validate_arith_expr(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3086 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3087 case term: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3088 res = validate_term(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3089 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3090 case factor: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3091 res = validate_factor(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3092 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3093 case power: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3094 res = validate_power(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3095 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3096 case atom: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3097 res = validate_atom(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3098 break; |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3099 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3100 default: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3101 /* Hopefully never reached! */ |
| 15318 | 3102 err_string("unrecognized node type"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3103 res = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3104 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3105 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3106 tree = next; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3107 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3108 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3109 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3110 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3111 |
| 4084 | 3112 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3113 validate_expr_tree(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3114 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3115 int res = validate_eval_input(tree); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3116 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3117 if (!res && !PyErr_Occurred()) |
| 15318 | 3118 err_string("could not validate expression tuple"); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3119 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3120 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3121 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3122 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3123 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3124 /* file_input: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3125 * (NEWLINE | stmt)* ENDMARKER |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3126 */ |
| 4084 | 3127 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3128 validate_file_input(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3129 { |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3130 int j; |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3131 int nch = NCH(tree) - 1; |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3132 int res = ((nch >= 0) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3133 && validate_ntype(CHILD(tree, nch), ENDMARKER)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3134 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3135 for (j = 0; res && (j < nch); ++j) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3136 if (TYPE(CHILD(tree, j)) == stmt) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3137 res = validate_stmt(CHILD(tree, j)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3138 else |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3139 res = validate_newline(CHILD(tree, j)); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3140 } |
|
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
|
3141 /* 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
|
3142 * 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
|
3143 * this, we have some debugging to do. |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3144 */ |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
3145 if (!res && !PyErr_Occurred()) |
| 15318 | 3146 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
|
3147 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3148 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3149 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3150 |
|
27767
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3151 static int |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3152 validate_encoding_decl(node *tree) |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3153 { |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3154 int nch = NCH(tree); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3155 int res = ((nch == 1) |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3156 && validate_file_input(CHILD(tree, 0))); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3157 |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3158 if (!res && !PyErr_Occurred()) |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3159 err_string("Error Parsing encoding_decl"); |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3160 |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3161 return res; |
|
82cbf1178e4f
Apply logistix's patch from
Michael W. Hudson <mwh@python.net>
parents:
27517
diff
changeset
|
3162 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3163 |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3164 static PyObject* |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3165 pickle_constructor = NULL; |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3166 |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3167 |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3168 static PyObject* |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3169 parser__pickler(PyObject *self, PyObject *args) |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3170 { |
| 8196 | 3171 NOTE(ARGUNUSED(self)) |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3172 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
|
3173 PyObject *st = NULL; |
|
11297
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
3174 PyObject *empty_dict = NULL; |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3175 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3176 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
|
3177 PyObject *newargs; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3178 PyObject *tuple; |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3179 |
|
11297
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
3180 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
|
3181 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
|
3182 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
|
3183 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
|
3184 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
|
3185 if (tuple != NULL) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3186 result = Py_BuildValue("O(O)", pickle_constructor, tuple); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3187 Py_DECREF(tuple); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3188 } |
|
11297
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
3189 Py_DECREF(empty_dict); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3190 Py_DECREF(newargs); |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3191 } |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3192 finally: |
|
11297
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
3193 Py_XDECREF(empty_dict); |
|
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
3194 |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3195 return (result); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3196 } |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3197 |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3198 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3199 /* 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
|
3200 * 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
|
3201 * 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
|
3202 * 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
|
3203 * inheritance. |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3204 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3205 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
|
3206 {"ast2tuple", (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
|
3207 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
|
3208 {"ast2list", (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
|
3209 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
|
3210 {"compileast", (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
|
3211 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
|
3212 {"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
|
3213 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
|
3214 {"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
|
3215 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
|
3216 {"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
|
3217 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
|
3218 {"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
|
3219 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
|
3220 {"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
|
3221 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
|
3222 {"sequence2ast", (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
|
3223 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
|
3224 {"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
|
3225 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
|
3226 {"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
|
3227 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
|
3228 {"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
|
3229 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
|
3230 {"tuple2ast", (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
|
3231 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
|
3232 {"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
|
3233 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
|
3234 |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3235 /* 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
|
3236 {"_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
|
3237 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
|
3238 |
| 8196 | 3239 {NULL, NULL, 0, NULL} |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3240 }; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3241 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3242 |
|
24363
979ff5d0ae07
Replace DL_IMPORT with PyMODINIT_FUNC and remove "/export:init..." link
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
3243 PyMODINIT_FUNC initparser(void); /* supply a prototype */ |
|
979ff5d0ae07
Replace DL_IMPORT with PyMODINIT_FUNC and remove "/export:init..." link
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
3244 |
|
979ff5d0ae07
Replace DL_IMPORT with PyMODINIT_FUNC and remove "/export:init..." link
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
3245 PyMODINIT_FUNC |
| 13692 | 3246 initparser(void) |
|
14214
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
3247 { |
|
19274
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3248 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
|
3249 |
|
44350
26384b8180c7
#1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT. Macros for b/w compatibility are available.
Christian Heimes <christian@cheimes.de>
parents:
42333
diff
changeset
|
3250 Py_TYPE(&PyST_Type) = &PyType_Type; |
|
5039
38032267968c
Initialize the ob_type field of PyAST_Type dynamically (in
Guido van Rossum <guido@python.org>
parents:
4600
diff
changeset
|
3251 module = Py_InitModule("parser", parser_functions); |
|
36324
1af7f719ed28
Check return result from Py_InitModule*(). This API can fail.
Neal Norwitz <nnorwitz@gmail.com>
parents:
35999
diff
changeset
|
3252 if (module == NULL) |
|
1af7f719ed28
Check return result from Py_InitModule*(). This API can fail.
Neal Norwitz <nnorwitz@gmail.com>
parents:
35999
diff
changeset
|
3253 return; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3254 |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
3255 if (parser_error == 0) |
|
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
3256 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
|
3257 |
|
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
|
3258 if (parser_error == 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
|
3259 /* caller will check 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
|
3260 return; |
|
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
|
3261 /* CAUTION: The code next used to skip bumping the refcount on |
|
1cbc6b7836dc
Merge 23c1-branch back into the head. Barry will send email about the
Tim Peters <tim.peters@gmail.com>
parents:
28551
diff
changeset
|
3262 * parser_error. That's a disaster if initparser() gets called more |
|
1cbc6b7836dc
Merge 23c1-branch back into the head. Barry will send email about the
Tim Peters <tim.peters@gmail.com>
parents:
28551
diff
changeset
|
3263 * 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
|
3264 * 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
|
3265 * 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
|
3266 */ |
|
1cbc6b7836dc
Merge 23c1-branch back into the head. Barry will send email about the
Tim Peters <tim.peters@gmail.com>
parents:
28551
diff
changeset
|
3267 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
|
3268 if (PyModule_AddObject(module, "ParserError", parser_error) != 0) |
|
1cbc6b7836dc
Merge 23c1-branch back into the head. Barry will send email about the
Tim Peters <tim.peters@gmail.com>
parents:
28551
diff
changeset
|
3269 return; |
|
1cbc6b7836dc
Merge 23c1-branch back into the head. Barry will send email about the
Tim Peters <tim.peters@gmail.com>
parents:
28551
diff
changeset
|
3270 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3271 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
|
3272 PyModule_AddObject(module, "ASTType", (PyObject*)&PyST_Type); |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
3273 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
|
3274 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
|
3275 |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3276 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
|
3277 parser_copyright_string); |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3278 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
|
3279 parser_doc_string); |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3280 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
|
3281 parser_version_string); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
3282 |
| 18748 | 3283 /* Register to support pickling. |
| 3284 * If this fails, the import of this module will fail because an | |
| 3285 * exception will be raised here; should we clear the exception? | |
| 3286 */ | |
|
47189
f419b2e96a98
Revert copy_reg -> copyreg rename.
Georg Brandl <georg@python.org>
parents:
46865
diff
changeset
|
3287 copyreg = PyImport_ImportModuleNoBlock("copy_reg"); |
|
19274
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3288 if (copyreg != NULL) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3289 PyObject *func, *pickler; |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3290 |
|
19274
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3291 func = PyObject_GetAttrString(copyreg, "pickle"); |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3292 pickle_constructor = PyObject_GetAttrString(module, "sequence2st"); |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3293 pickler = PyObject_GetAttrString(module, "_pickler"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3294 Py_XINCREF(pickle_constructor); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3295 if ((func != NULL) && (pickle_constructor != NULL) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3296 && (pickler != NULL)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3297 PyObject *res; |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3298 |
|
38314
1fdf29a88f0e
Replace PyObject_CallFunction calls with only object args
Georg Brandl <georg@python.org>
parents:
37622
diff
changeset
|
3299 res = PyObject_CallFunctionObjArgs(func, &PyST_Type, pickler, |
|
1fdf29a88f0e
Replace PyObject_CallFunction calls with only object args
Georg Brandl <georg@python.org>
parents:
37622
diff
changeset
|
3300 pickle_constructor, NULL); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3301 Py_XDECREF(res); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3302 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3303 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
|
3304 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
|
3305 Py_XDECREF(pickler); |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
3306 Py_DECREF(copyreg); |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
3307 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
3308 } |
