Mercurial > cpython-lru_cache-weakref
annotate Modules/parsermodule.c @ 27281:5a050200f736 legacy-trunk
When time.localtime() is passed a tick count the platform C localtime()
function can't handle, don't raise IOError -- that doesn't make sense.
Raise ValueError instead.
Bugfix candidate.
| author | Tim Peters <tim.peters@gmail.com> |
|---|---|
| date | Fri, 17 Jan 2003 20:08:54 +0000 |
| parents | 784e7fdf8c52 |
| children | 51abb5e86226 |
| 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 | |
|
8184
142165ed84d8
Add a declaration for strdup() for the Mac.
Guido van Rossum <guido@python.org>
parents:
8112
diff
changeset
|
42 #ifdef macintosh |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
43 char *strdup(char *); |
|
8184
142165ed84d8
Add a declaration for strdup() for the Mac.
Guido van Rossum <guido@python.org>
parents:
8112
diff
changeset
|
44 #endif |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
45 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
46 /* String constants used to initialize module attributes. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
47 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
48 */ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23538
diff
changeset
|
49 static char parser_copyright_string[] = |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23538
diff
changeset
|
50 "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
|
51 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
|
52 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
|
53 Centrum, Amsterdam, The Netherlands."; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
54 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
55 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23538
diff
changeset
|
56 PyDoc_STRVAR(parser_doc_string, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23538
diff
changeset
|
57 "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
|
58 |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23538
diff
changeset
|
59 static char parser_version_string[] = "0.5"; |
| 4084 | 60 |
| 61 | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
62 typedef PyObject* (*SeqMaker) (int length); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
63 typedef int (*SeqInserter) (PyObject* sequence, |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
64 int index, |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
65 PyObject* element); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
66 |
|
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
|
67 /* 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
|
68 * 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
|
69 * 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
|
70 * 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
|
71 * 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
|
72 * 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
|
73 * 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
|
74 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
75 |
|
1406
474823e5f7dc
* parsermodule.c, Makefile, config.c: rudimentary interface to the Python
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
76 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
77 static PyObject* |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
78 node2tuple(node *n, /* node to convert */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
79 SeqMaker mkseq, /* create sequence */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
80 SeqInserter addelem, /* func. to add elem. in seq. */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
81 int lineno) /* include line numbers? */ |
| 4084 | 82 { |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
83 if (n == NULL) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
84 Py_INCREF(Py_None); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
85 return (Py_None); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
86 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
87 if (ISNONTERMINAL(TYPE(n))) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
88 int i; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
89 PyObject *v; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
90 PyObject *w; |
| 8196 | 91 |
|
26979
784e7fdf8c52
SF patch [ 597919 ] compiler package and SET_LINENO
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24796
diff
changeset
|
92 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
|
93 if (v == NULL) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
94 return (v); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
95 w = PyInt_FromLong(TYPE(n)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
96 if (w == NULL) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
97 Py_DECREF(v); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
98 return ((PyObject*) NULL); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
99 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
100 (void) addelem(v, 0, w); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
101 for (i = 0; i < NCH(n); i++) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
102 w = node2tuple(CHILD(n, i), mkseq, addelem, lineno); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
103 if (w == NULL) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
104 Py_DECREF(v); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
105 return ((PyObject*) NULL); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
106 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
107 (void) addelem(v, i+1, w); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
108 } |
|
26979
784e7fdf8c52
SF patch [ 597919 ] compiler package and SET_LINENO
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24796
diff
changeset
|
109 |
|
784e7fdf8c52
SF patch [ 597919 ] compiler package and SET_LINENO
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24796
diff
changeset
|
110 if (TYPE(n) == encoding_decl) |
|
784e7fdf8c52
SF patch [ 597919 ] compiler package and SET_LINENO
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24796
diff
changeset
|
111 (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
|
112 return (v); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
113 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
114 else if (ISTERMINAL(TYPE(n))) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
115 PyObject *result = mkseq(2 + lineno); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
116 if (result != NULL) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
117 (void) addelem(result, 0, PyInt_FromLong(TYPE(n))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
118 (void) addelem(result, 1, PyString_FromString(STR(n))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
119 if (lineno == 1) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
120 (void) addelem(result, 2, PyInt_FromLong(n->n_lineno)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
121 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
122 return (result); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
123 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
124 else { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
125 PyErr_SetString(PyExc_SystemError, |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
126 "unrecognized parse tree node type"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
127 return ((PyObject*) NULL); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
128 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
129 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
130 /* |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
131 * 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
|
132 */ |
|
1406
474823e5f7dc
* parsermodule.c, Makefile, config.c: rudimentary interface to the Python
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
133 |
|
3200
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 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
136 /* 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
|
137 * '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
|
138 * 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
|
139 * 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
|
140 * 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
|
141 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
142 |
|
18669
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_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
|
144 #define PyST_SUITE 2 |
|
3200
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 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
147 /* 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
|
148 * 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
|
149 * 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
|
150 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
151 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
152 static PyObject* |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
153 parser_error = 0; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
154 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
155 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
156 typedef struct { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
157 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
|
158 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
|
159 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
|
160 } PyST_Object; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
161 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
162 |
|
24280
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
163 static void parser_free(PyST_Object *st); |
|
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
164 static int parser_compare(PyST_Object *left, PyST_Object *right); |
|
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
165 static PyObject *parser_getattr(PyObject *self, char *name); |
| 8196 | 166 |
| 167 | |
| 168 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
|
169 PyTypeObject PyST_Type = { |
|
8450
61912d4ad52f
Sorry, the initializer for ob_type must really be NULL,
Guido van Rossum <guido@python.org>
parents:
8290
diff
changeset
|
170 PyObject_HEAD_INIT(NULL) |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
171 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
|
172 "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
|
173 (int) sizeof(PyST_Object), /* tp_basicsize */ |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
174 0, /* tp_itemsize */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
175 (destructor)parser_free, /* tp_dealloc */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
176 0, /* tp_print */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
177 parser_getattr, /* tp_getattr */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
178 0, /* tp_setattr */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
179 (cmpfunc)parser_compare, /* tp_compare */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
180 0, /* tp_repr */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
181 0, /* tp_as_number */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
182 0, /* tp_as_sequence */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
183 0, /* tp_as_mapping */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
184 0, /* tp_hash */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
185 0, /* tp_call */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
186 0, /* tp_str */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
187 0, /* tp_getattro */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
188 0, /* tp_setattro */ |
|
5613
190e35bbc15a
Add doc string to type object.
Fred Drake <fdrake@acm.org>
parents:
5236
diff
changeset
|
189 |
|
190e35bbc15a
Add doc string to type object.
Fred Drake <fdrake@acm.org>
parents:
5236
diff
changeset
|
190 /* 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
|
191 0, /* tp_as_buffer */ |
|
5613
190e35bbc15a
Add doc string to type object.
Fred Drake <fdrake@acm.org>
parents:
5236
diff
changeset
|
192 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
193 Py_TPFLAGS_DEFAULT, /* tp_flags */ |
|
5613
190e35bbc15a
Add doc string to type object.
Fred Drake <fdrake@acm.org>
parents:
5236
diff
changeset
|
194 |
|
190e35bbc15a
Add doc string to type object.
Fred Drake <fdrake@acm.org>
parents:
5236
diff
changeset
|
195 /* __doc__ */ |
|
190e35bbc15a
Add doc string to type object.
Fred Drake <fdrake@acm.org>
parents:
5236
diff
changeset
|
196 "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
|
197 }; /* PyST_Type */ |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
198 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
199 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
200 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
201 parser_compare_nodes(node *left, node *right) |
| 4084 | 202 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
203 int j; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
204 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
205 if (TYPE(left) < TYPE(right)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
206 return (-1); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
207 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
208 if (TYPE(right) < TYPE(left)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
209 return (1); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
210 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
211 if (ISTERMINAL(TYPE(left))) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
212 return (strcmp(STR(left), STR(right))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
213 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
214 if (NCH(left) < NCH(right)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
215 return (-1); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
216 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
217 if (NCH(right) < NCH(left)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
218 return (1); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
219 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
220 for (j = 0; j < NCH(left); ++j) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
221 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
|
222 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
223 if (v != 0) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
224 return (v); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
225 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
226 return (0); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
227 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
228 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
229 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
230 /* 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
|
231 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
232 * Comparison function used by the Python operators ==, !=, <, >, <=, >= |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
233 * 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
|
234 * checks and protection code. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
235 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
236 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
237 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
|
238 parser_compare(PyST_Object *left, PyST_Object *right) |
| 4084 | 239 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
240 if (left == right) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
241 return (0); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
242 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
243 if ((left == 0) || (right == 0)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
244 return (-1); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
245 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
246 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
|
247 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
248 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
249 |
|
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 /* parser_newstobject(node* st) |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
251 * |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
252 * 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
|
253 * '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
|
254 * Python code. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
255 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
256 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
257 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
|
258 parser_newstobject(node *st, int type) |
| 4084 | 259 { |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
260 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
|
261 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
262 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
|
263 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
|
264 o->st_type = type; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
265 } |
| 8196 | 266 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
|
267 PyNode_Free(st); |
| 8196 | 268 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
269 return ((PyObject*)o); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
270 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
271 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
272 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
273 /* void parser_free(PyST_Object* st) |
|
3200
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 * 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
|
276 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
277 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
278 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
|
279 parser_free(PyST_Object *st) |
| 4084 | 280 { |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
281 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
|
282 PyObject_Del(st); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
283 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
284 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
285 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
286 /* 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
|
287 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
288 * 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
|
289 * 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
|
290 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
291 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
292 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
|
293 parser_st2tuple(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 294 { |
| 295 PyObject *line_option = 0; | |
| 296 PyObject *res = 0; | |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
297 int ok; |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
298 |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
299 static char *keywords[] = {"ast", "line_info", NULL}; |
|
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
300 |
| 8196 | 301 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
|
302 ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|O:st2tuple", keywords, |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
303 &PyST_Type, &self, &line_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 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
306 ok = PyArg_ParseTupleAndKeywords(args, kw, "|O:totuple", &keywords[1], |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
307 &line_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; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
310 if (line_option != NULL) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
311 lineno = (PyObject_IsTrue(line_option) != 0) ? 1 : 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
312 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
313 /* |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
314 * 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
|
315 * since it's known to work already. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
316 */ |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
317 res = node2tuple(((PyST_Object*)self)->st_node, |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
318 PyTuple_New, PyTuple_SetItem, lineno); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
319 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
320 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
321 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
322 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
323 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
324 /* parser_st2list(PyObject* self, PyObject* args, PyObject* kw) |
| 4084 | 325 * |
|
11297
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
326 * 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
|
327 * returned to the Python-level caller. The ST object is not modified. |
| 4084 | 328 * |
| 329 */ | |
| 330 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
|
331 parser_st2list(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 332 { |
| 333 PyObject *line_option = 0; | |
| 334 PyObject *res = 0; | |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
335 int ok; |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
336 |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
337 static char *keywords[] = {"ast", "line_info", NULL}; |
|
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
338 |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
339 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
|
340 ok = PyArg_ParseTupleAndKeywords(args, kw, "O!|O:st2list", keywords, |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
341 &PyST_Type, &self, &line_option); |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
342 else |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
343 ok = PyArg_ParseTupleAndKeywords(args, kw, "|O:tolist", &keywords[1], |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
344 &line_option); |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
345 if (ok) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
346 int lineno = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
347 if (line_option != 0) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
348 lineno = PyObject_IsTrue(line_option) ? 1 : 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
349 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
350 /* |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
351 * 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
|
352 * since it's known to work already. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
353 */ |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
354 res = node2tuple(self->st_node, |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
355 PyList_New, PyList_SetItem, lineno); |
| 4084 | 356 } |
| 357 return (res); | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
358 } |
| 4084 | 359 |
| 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 /* parser_compilest(PyObject* self, PyObject* args) |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
362 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
363 * 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
|
364 * 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
|
365 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
366 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
367 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
|
368 parser_compilest(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 369 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
370 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
|
371 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
|
372 int ok; |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
373 |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
374 static char *keywords[] = {"ast", "filename", NULL}; |
|
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
375 |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
376 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
|
377 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
|
378 &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
|
379 else |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
380 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
|
381 &str); |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
382 |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
383 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
|
384 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
|
385 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
386 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
387 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
388 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
389 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
390 /* PyObject* parser_isexpr(PyObject* self, PyObject* args) |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
391 * PyObject* parser_issuite(PyObject* self, PyObject* args) |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
392 * |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
393 * 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
|
394 * 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
|
395 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
396 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
397 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
|
398 parser_isexpr(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 399 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
400 PyObject* res = 0; |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
401 int ok; |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
402 |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
403 static char *keywords[] = {"ast", NULL}; |
|
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
404 |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
405 if (self == NULL) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
406 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
|
407 &PyST_Type, &self); |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
408 else |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
409 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
|
410 |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
411 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
|
412 /* 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
|
413 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
|
414 Py_INCREF(res); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
415 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
416 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
417 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
418 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
419 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
420 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
|
421 parser_issuite(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 422 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
423 PyObject* res = 0; |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
424 int ok; |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
425 |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
426 static char *keywords[] = {"ast", NULL}; |
|
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
427 |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
428 if (self == NULL) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
429 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
|
430 &PyST_Type, &self); |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
431 else |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
432 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
|
433 |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
434 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
|
435 /* 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
|
436 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
|
437 Py_INCREF(res); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
438 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
439 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
440 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
441 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
442 |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
443 #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
|
444 |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
445 static PyMethodDef |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
446 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
|
447 {"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
|
448 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
|
449 {"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
|
450 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
|
451 {"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
|
452 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
|
453 {"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
|
454 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
|
455 {"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
|
456 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
|
457 |
| 8196 | 458 {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
|
459 }; |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
460 |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
461 |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
462 static PyObject* |
| 13503 | 463 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
|
464 { |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
465 return (Py_FindMethod(parser_methods, self, name)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
466 } |
|
8039
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
467 |
|
a38550613af3
The documentation threatened it would happen -- the functions that should
Fred Drake <fdrake@acm.org>
parents:
8034
diff
changeset
|
468 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
469 /* err_string(char* message) |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
470 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
471 * 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
|
472 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
473 */ |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
474 static void |
| 13503 | 475 err_string(char *message) |
| 4084 | 476 { |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
477 PyErr_SetString(parser_error, message); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
478 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
479 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
480 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
481 /* 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
|
482 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
483 * 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
|
484 * 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
|
485 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
486 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
487 static PyObject* |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
488 parser_do_parse(PyObject *args, PyObject *kw, char *argspec, int type) |
| 4084 | 489 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
490 char* string = 0; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
491 PyObject* res = 0; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
492 |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
493 static char *keywords[] = {"source", NULL}; |
|
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
494 |
|
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
495 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
|
496 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
|
497 (type == PyST_EXPR) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
498 ? eval_input : file_input); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
499 |
|
26979
784e7fdf8c52
SF patch [ 597919 ] compiler package and SET_LINENO
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24796
diff
changeset
|
500 if (n) |
|
784e7fdf8c52
SF patch [ 597919 ] compiler package and SET_LINENO
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
24796
diff
changeset
|
501 res = parser_newstobject(n, type); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
502 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
503 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
504 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
505 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
506 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
507 /* PyObject* parser_expr(PyObject* self, PyObject* args) |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
508 * PyObject* parser_suite(PyObject* self, PyObject* args) |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
509 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
510 * 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
|
511 * 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
|
512 * 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
|
513 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
514 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
515 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
|
516 parser_expr(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 517 { |
| 8196 | 518 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
|
519 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
|
520 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
521 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
522 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
523 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
|
524 parser_suite(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 525 { |
| 8196 | 526 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
|
527 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
|
528 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
529 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
530 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
531 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
532 /* 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
|
533 * 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
|
534 * 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
|
535 * 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
|
536 * 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
|
537 * 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
|
538 * phase, returning an exception instead. |
|
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 * 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
|
541 * 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
|
542 * 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
|
543 * 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
|
544 * 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
|
545 * 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
|
546 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
547 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
548 |
|
24280
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
549 static node* build_node_tree(PyObject *tuple); |
|
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
550 static int validate_expr_tree(node *tree); |
|
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
551 static int validate_file_input(node *tree); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
552 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
553 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
554 /* 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
|
555 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
556 * 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
|
557 * 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
|
558 * 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
|
559 * 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
|
560 * 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
|
561 * 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
|
562 * |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
563 * 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
|
564 * ST objects. |
|
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 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
567 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
|
568 parser_tuple2st(PyST_Object *self, PyObject *args, PyObject *kw) |
| 4084 | 569 { |
| 8196 | 570 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
|
571 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
|
572 PyObject *tuple; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
573 node *tree; |
| 4084 | 574 |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
575 static char *keywords[] = {"sequence", NULL}; |
|
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
576 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
577 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
|
578 &tuple)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
579 return (0); |
| 4084 | 580 if (!PySequence_Check(tuple)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
581 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
|
582 "sequence2st() requires a single sequence argument"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
583 return (0); |
| 4084 | 584 } |
| 585 /* | |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
586 * Convert the tree to the internal form before checking it. |
| 4084 | 587 */ |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
588 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
|
589 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
|
590 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
|
591 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
|
592 /* 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
|
593 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
|
594 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
|
595 else |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
596 PyNode_Free(tree); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
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 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
|
599 /* 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
|
600 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
|
601 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
|
602 else |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
603 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
|
604 } |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
605 else { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
606 /* 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
|
607 PyNode_Free(tree); |
| 15318 | 608 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
|
609 } |
| 4084 | 610 } |
| 611 /* Make sure we throw an exception on all errors. We should never | |
| 612 * get this, but we'd do well to be sure something is done. | |
| 613 */ | |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
614 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
|
615 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
|
616 |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
617 return st; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
618 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
619 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
620 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
621 /* node* build_node_children() |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
622 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
623 * 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
|
624 * 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
|
625 * 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
|
626 * and no memory will have been deallocated. |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
627 * |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
628 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
629 static node* |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
630 build_node_children(PyObject *tuple, node *root, int *line_num) |
| 4084 | 631 { |
|
13576
61e4c29d53d8
replace PyXXX_Length calls with PyXXX_Size calls
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
13503
diff
changeset
|
632 int len = PyObject_Size(tuple); |
|
21237
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
633 int i, err; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
634 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
635 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
|
636 /* 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
|
637 PyObject* elem = PySequence_GetItem(tuple, i); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
638 int ok = elem != NULL; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
639 long type = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
640 char *strn = 0; |
| 4084 | 641 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
642 if (ok) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
643 ok = PySequence_Check(elem); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
644 if (ok) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
645 PyObject *temp = PySequence_GetItem(elem, 0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
646 if (temp == NULL) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
647 ok = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
648 else { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
649 ok = PyInt_Check(temp); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
650 if (ok) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
651 type = PyInt_AS_LONG(temp); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
652 Py_DECREF(temp); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
653 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
654 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
655 if (!ok) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
656 PyErr_SetObject(parser_error, |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
657 Py_BuildValue("os", elem, |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
658 "Illegal node construct.")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
659 Py_XDECREF(elem); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
660 return (0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
661 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
662 if (ISTERMINAL(type)) { |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
663 int len = PyObject_Size(elem); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
664 PyObject *temp; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
665 |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
666 if ((len != 2) && (len != 3)) { |
| 15318 | 667 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
|
668 return 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
669 } |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
670 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
|
671 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
|
672 return 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
673 if (!PyString_Check(temp)) { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
674 PyErr_Format(parser_error, |
| 15318 | 675 "second item in terminal node must be a string," |
| 676 " found %s", | |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
677 ((PyTypeObject*)PyObject_Type(temp))->tp_name); |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12487
diff
changeset
|
678 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
|
679 return 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
680 } |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
681 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
|
682 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
|
683 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
|
684 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
|
685 *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
|
686 else { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
687 PyErr_Format(parser_error, |
| 15318 | 688 "third item in terminal node must be an" |
| 689 " integer, found %s", | |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
690 ((PyTypeObject*)PyObject_Type(temp))->tp_name); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
691 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
|
692 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
|
693 return 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
694 } |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
695 Py_DECREF(o); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
696 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
697 } |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
698 len = PyString_GET_SIZE(temp) + 1; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
699 strn = (char *)PyMem_MALLOC(len); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
700 if (strn != NULL) |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
701 (void) memcpy(strn, PyString_AS_STRING(temp), len); |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
702 Py_DECREF(temp); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
703 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
704 else if (!ISNONTERMINAL(type)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
705 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
706 * 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
|
707 * Throw an exception. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
708 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
709 PyErr_SetObject(parser_error, |
| 15318 | 710 Py_BuildValue("os", elem, "unknown node type.")); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
711 Py_XDECREF(elem); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
712 return (0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
713 } |
|
21237
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
714 err = PyNode_AddChild(root, type, strn, *line_num); |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
715 if (err == E_NOMEM) { |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
716 PyMem_DEL(strn); |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
717 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
|
718 } |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
719 if (err == E_OVERFLOW) { |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
720 PyMem_DEL(strn); |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
721 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
|
722 "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
|
723 return NULL; |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
724 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
725 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
726 if (ISNONTERMINAL(type)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
727 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
|
728 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
729 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
|
730 Py_XDECREF(elem); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
731 return (0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
732 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
733 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
734 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
|
735 ++(*line_num); /* line number *after* the newline! */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
736 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
737 Py_XDECREF(elem); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
738 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
739 return (root); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
740 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
741 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
742 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
743 static node* |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
744 build_node_tree(PyObject *tuple) |
| 4084 | 745 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
746 node* res = 0; |
| 4084 | 747 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
|
748 long num = -1; |
| 4084 | 749 |
| 750 if (temp != NULL) | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
751 num = PyInt_AsLong(temp); |
| 4084 | 752 Py_XDECREF(temp); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
753 if (ISTERMINAL(num)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
754 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
755 * 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
|
756 * 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
|
757 */ |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
758 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
|
759 "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
|
760 PyErr_SetObject(parser_error, tuple); |
|
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 else if (ISNONTERMINAL(num)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
763 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
764 * Not efficient, but that can be handled later. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
765 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
766 int line_num = 0; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
767 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
768 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
|
769 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
|
770 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
|
771 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
|
772 res = NULL; |
|
42d0819546d6
Fix memory leak in the parser module: There were two leaks in
Fred Drake <fdrake@acm.org>
parents:
20432
diff
changeset
|
773 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
774 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
775 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
776 else |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
777 /* 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
|
778 * 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
|
779 * 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
|
780 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
781 PyErr_SetObject(parser_error, |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
782 Py_BuildValue("os", tuple, |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
783 "Illegal component tuple.")); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
784 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
785 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
786 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
787 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
788 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
789 /* |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
790 * Validation routines used within the validation section: |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
791 */ |
|
24280
1598a1e473e2
staticforward bites the dust.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23832
diff
changeset
|
792 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
|
793 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
794 #define validate_ampersand(ch) validate_terminal(ch, AMPER, "&") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
795 #define validate_circumflex(ch) validate_terminal(ch, CIRCUMFLEX, "^") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
796 #define validate_colon(ch) validate_terminal(ch, COLON, ":") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
797 #define validate_comma(ch) validate_terminal(ch, COMMA, ",") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
798 #define validate_dedent(ch) validate_terminal(ch, DEDENT, "") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
799 #define validate_equal(ch) validate_terminal(ch, EQUAL, "=") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
800 #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
|
801 #define validate_lparen(ch) validate_terminal(ch, LPAR, "(") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
802 #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
|
803 #define validate_rparen(ch) validate_terminal(ch, RPAR, ")") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
804 #define validate_semi(ch) validate_terminal(ch, SEMI, ";") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
805 #define validate_star(ch) validate_terminal(ch, STAR, "*") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
806 #define validate_vbar(ch) validate_terminal(ch, VBAR, "|") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
807 #define validate_doublestar(ch) validate_terminal(ch, DOUBLESTAR, "**") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
808 #define validate_dot(ch) validate_terminal(ch, DOT, ".") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
809 #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
|
810 |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
811 #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
|
812 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
813 VALIDATER(node); VALIDATER(small_stmt); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
814 VALIDATER(class); VALIDATER(node); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
815 VALIDATER(parameters); VALIDATER(suite); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
816 VALIDATER(testlist); VALIDATER(varargslist); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
817 VALIDATER(fpdef); VALIDATER(fplist); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
818 VALIDATER(stmt); VALIDATER(simple_stmt); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
819 VALIDATER(expr_stmt); VALIDATER(power); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
820 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
|
821 VALIDATER(return_stmt); VALIDATER(list_iter); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
822 VALIDATER(raise_stmt); VALIDATER(import_stmt); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
823 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
|
824 VALIDATER(assert_stmt); VALIDATER(list_for); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
825 VALIDATER(exec_stmt); VALIDATER(compound_stmt); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
826 VALIDATER(while); VALIDATER(for); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
827 VALIDATER(try); VALIDATER(except_clause); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
828 VALIDATER(test); VALIDATER(and_test); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
829 VALIDATER(not_test); VALIDATER(comparison); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
830 VALIDATER(comp_op); VALIDATER(expr); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
831 VALIDATER(xor_expr); VALIDATER(and_expr); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
832 VALIDATER(shift_expr); VALIDATER(arith_expr); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
833 VALIDATER(term); VALIDATER(factor); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
834 VALIDATER(atom); VALIDATER(lambdef); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
835 VALIDATER(trailer); VALIDATER(subscript); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
836 VALIDATER(subscriptlist); VALIDATER(sliceop); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
837 VALIDATER(exprlist); VALIDATER(dictmaker); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
838 VALIDATER(arglist); VALIDATER(argument); |
|
18646
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
839 VALIDATER(listmaker); VALIDATER(yield_stmt); |
|
23538
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
840 VALIDATER(testlist1); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
841 |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
842 #undef VALIDATER |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
843 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
844 #define is_even(n) (((n) & 1) == 0) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
845 #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
|
846 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
847 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
848 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
849 validate_ntype(node *n, int t) |
| 4084 | 850 { |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
851 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
|
852 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
|
853 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
|
854 return 0; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
855 } |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
856 return 1; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
857 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
858 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
859 |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
860 /* 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
|
861 * 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
|
862 * 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
|
863 * "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
|
864 * 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
|
865 * in that fashion. |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
866 */ |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
867 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
868 validate_numnodes(node *n, int num, const char *const name) |
| 4084 | 869 { |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
870 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
|
871 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
|
872 "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
|
873 return 0; |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
874 } |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
875 return 1; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
876 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
877 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
878 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
879 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
880 validate_terminal(node *terminal, int type, char *string) |
| 4084 | 881 { |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
882 int res = (validate_ntype(terminal, type) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
883 && ((string == 0) || (strcmp(string, STR(terminal)) == 0))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
884 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
885 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
|
886 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
|
887 "Illegal terminal: expected \"%s\"", string); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
888 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
889 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
890 } |
|
3200
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 |
| 4084 | 893 /* X (',' X) [','] |
| 894 */ | |
| 895 static int | |
|
13667
a6c7bfdd6777
Even more ANSIfication: fix as many function pointers and declarations as
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
896 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
|
897 const char *const name) |
| 4084 | 898 { |
| 899 int nch = NCH(tree); | |
| 900 int res = (nch && validate_ntype(tree, ntype) | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
901 && vfunc(CHILD(tree, 0))); |
| 4084 | 902 |
| 903 if (!res && !PyErr_Occurred()) | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
904 (void) validate_numnodes(tree, 1, name); |
| 4084 | 905 else { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
906 if (is_even(nch)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
907 res = validate_comma(CHILD(tree, --nch)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
908 if (res && nch > 1) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
909 int pos = 1; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
910 for ( ; res && pos < nch; pos += 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
911 res = (validate_comma(CHILD(tree, pos)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
912 && vfunc(CHILD(tree, pos + 1))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
913 } |
| 4084 | 914 } |
| 915 return (res); | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
916 } |
| 4084 | 917 |
| 918 | |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
919 /* validate_class() |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
920 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
921 * classdef: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
922 * 'class' NAME ['(' testlist ')'] ':' suite |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
923 */ |
| 4084 | 924 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
925 validate_class(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
926 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
927 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
928 int res = validate_ntype(tree, classdef) && ((nch == 4) || (nch == 7)); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
929 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
930 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
931 res = (validate_name(CHILD(tree, 0), "class") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
932 && validate_ntype(CHILD(tree, 1), NAME) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
933 && validate_colon(CHILD(tree, nch - 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
934 && validate_suite(CHILD(tree, nch - 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
935 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
936 else |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
937 (void) validate_numnodes(tree, 4, "class"); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
938 if (res && (nch == 7)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
939 res = (validate_lparen(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
940 && validate_testlist(CHILD(tree, 3)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
941 && validate_rparen(CHILD(tree, 4))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
942 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
943 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
944 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
945 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
946 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
947 /* if_stmt: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
948 * '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
|
949 */ |
| 4084 | 950 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
951 validate_if(node *tree) |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
952 { |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
953 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
954 int res = (validate_ntype(tree, if_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
955 && (nch >= 4) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
956 && validate_name(CHILD(tree, 0), "if") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
957 && validate_test(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
958 && validate_colon(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
959 && validate_suite(CHILD(tree, 3))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
960 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
961 if (res && ((nch % 4) == 3)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
962 /* ... 'else' ':' suite */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
963 res = (validate_name(CHILD(tree, nch - 3), "else") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
964 && validate_colon(CHILD(tree, nch - 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
965 && validate_suite(CHILD(tree, nch - 1))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
966 nch -= 3; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
967 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
968 else if (!res && !PyErr_Occurred()) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
969 (void) validate_numnodes(tree, 4, "if"); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
970 if ((nch % 4) != 0) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
971 /* Will catch the case for nch < 4 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
972 res = validate_numnodes(tree, 0, "if"); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
973 else if (res && (nch > 4)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
974 /* ... ('elif' test ':' suite)+ ... */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
975 int j = 4; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
976 while ((j < nch) && res) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
977 res = (validate_name(CHILD(tree, j), "elif") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
978 && validate_colon(CHILD(tree, j + 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
979 && validate_test(CHILD(tree, j + 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
980 && validate_suite(CHILD(tree, j + 3))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
981 j += 4; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
982 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
983 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
984 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
985 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
986 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
987 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
988 /* parameters: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
989 * '(' [varargslist] ')' |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
990 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
991 */ |
| 4084 | 992 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
993 validate_parameters(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
994 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
995 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
996 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
|
997 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
998 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
999 res = (validate_lparen(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1000 && validate_rparen(CHILD(tree, nch - 1))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1001 if (res && (nch == 3)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1002 res = validate_varargslist(CHILD(tree, 1)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1003 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1004 else { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1005 (void) validate_numnodes(tree, 2, "parameters"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1006 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1007 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1008 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1009 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1010 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1011 /* validate_suite() |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1012 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1013 * suite: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1014 * simple_stmt |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1015 * | NEWLINE INDENT stmt+ DEDENT |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1016 */ |
| 4084 | 1017 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1018 validate_suite(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1019 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1020 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1021 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
|
1022 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1023 if (res && (nch == 1)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1024 res = validate_simple_stmt(CHILD(tree, 0)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1025 else if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1026 /* NEWLINE INDENT stmt+ DEDENT */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1027 res = (validate_newline(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1028 && validate_indent(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1029 && validate_stmt(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1030 && validate_dedent(CHILD(tree, nch - 1))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1031 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1032 if (res && (nch > 4)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1033 int i = 3; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1034 --nch; /* forget the DEDENT */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1035 for ( ; res && (i < nch); ++i) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1036 res = validate_stmt(CHILD(tree, i)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1037 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1038 else if (nch < 4) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1039 res = validate_numnodes(tree, 4, "suite"); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1040 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1041 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1042 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1043 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
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_testlist(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1047 { |
| 4084 | 1048 return (validate_repeating_list(tree, testlist, |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1049 validate_test, "testlist")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1050 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1051 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1052 |
|
20432
56141b86a7f2
Very subtle syntax change: in a list comprehension, the testlist in
Guido van Rossum <guido@python.org>
parents:
19274
diff
changeset
|
1053 static int |
|
23538
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1054 validate_testlist1(node *tree) |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1055 { |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1056 return (validate_repeating_list(tree, testlist1, |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1057 validate_test, "testlist1")); |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1058 } |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1059 |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1060 |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
1061 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
|
1062 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
|
1063 { |
|
56141b86a7f2
Very subtle syntax change: in a list comprehension, the testlist in
Guido van Rossum <guido@python.org>
parents:
19274
diff
changeset
|
1064 return (validate_repeating_list(tree, testlist_safe, |
|
56141b86a7f2
Very subtle syntax change: in a list comprehension, the testlist in
Guido van Rossum <guido@python.org>
parents:
19274
diff
changeset
|
1065 validate_test, "testlist_safe")); |
|
56141b86a7f2
Very subtle syntax change: in a list comprehension, the testlist in
Guido van Rossum <guido@python.org>
parents:
19274
diff
changeset
|
1066 } |
|
56141b86a7f2
Very subtle syntax change: in a list comprehension, the testlist in
Guido van Rossum <guido@python.org>
parents:
19274
diff
changeset
|
1067 |
|
56141b86a7f2
Very subtle syntax change: in a list comprehension, the testlist in
Guido van Rossum <guido@python.org>
parents:
19274
diff
changeset
|
1068 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1069 /* '*' NAME [',' '**' NAME] | '**' NAME |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1070 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1071 static int |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1072 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
|
1073 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1074 int nch = NCH(tree); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1075 int res = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1076 int sym; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1077 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1078 if (nch <= start) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1079 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
|
1080 return 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1081 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1082 sym = TYPE(CHILD(tree, start)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1083 if (sym == STAR) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1084 /* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1085 * ('*' NAME [',' '**' NAME] |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1086 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1087 if (nch-start == 2) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1088 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
|
1089 else if (nch-start == 5) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1090 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
|
1091 && 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
|
1092 && 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
|
1093 && 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
|
1094 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1095 else if (sym == DOUBLESTAR) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1096 /* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1097 * '**' NAME |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1098 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1099 if (nch-start == 2) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1100 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
|
1101 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1102 if (!res) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1103 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
|
1104 return res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1105 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1106 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1107 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1108 /* validate_varargslist() |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1109 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1110 * varargslist: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1111 * (fpdef ['=' test] ',')* |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1112 * ('*' NAME [',' '**' NAME] |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1113 * | '**' NAME) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1114 * | fpdef ['=' test] (',' fpdef ['=' test])* [','] |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1115 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1116 */ |
| 4084 | 1117 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1118 validate_varargslist(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1119 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1120 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1121 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
|
1122 int sym; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1123 |
|
15506
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1124 if (!res) |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1125 return 0; |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1126 if (nch < 1) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1127 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
|
1128 return 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1129 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1130 sym = TYPE(CHILD(tree, 0)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1131 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
|
1132 /* whole thing matches: |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1133 * '*' NAME [',' '**' NAME] | '**' NAME |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1134 */ |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1135 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
|
1136 else if (sym == fpdef) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1137 int i = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1138 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1139 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
|
1140 if (sym == NAME) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1141 /* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1142 * (fpdef ['=' test] ',')+ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1143 * ('*' NAME [',' '**' NAME] |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1144 * | '**' NAME) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1145 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1146 /* skip over (fpdef ['=' test] ',')+ */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1147 while (res && (i+2 <= nch)) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1148 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
|
1149 ++i; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1150 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
|
1151 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
|
1152 && 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
|
1153 if (res) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1154 i += 2; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1155 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1156 if (res && i < nch) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1157 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
|
1158 ++i; |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1159 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
|
1160 && (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
|
1161 || 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
|
1162 break; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1163 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1164 } |
|
15506
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1165 /* ... '*' NAME [',' '**' NAME] | '**' NAME |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1166 * i --^^^ |
|
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1167 */ |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1168 if (res) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1169 res = validate_varargslist_trailer(tree, i); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1170 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1171 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1172 /* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1173 * fpdef ['=' test] (',' fpdef ['=' test])* [','] |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1174 */ |
|
15506
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1175 /* strip trailing comma node */ |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1176 if (sym == COMMA) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1177 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
|
1178 if (!res) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1179 return 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1180 --nch; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1181 } |
|
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 * fpdef ['=' test] (',' fpdef ['=' test])* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1184 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1185 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
|
1186 ++i; |
|
15506
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1187 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
|
1188 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
|
1189 && 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
|
1190 i += 2; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1191 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1192 /* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1193 * ... (',' fpdef ['=' test])* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1194 * i ---^^^ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1195 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1196 while (res && (nch - i) >= 2) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1197 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
|
1198 && 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
|
1199 i += 2; |
|
15506
ac830c9e9a83
validate_varargslist(): Fix two bugs in this function, one that affected
Fred Drake <fdrake@acm.org>
parents:
15318
diff
changeset
|
1200 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
|
1201 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
|
1202 && 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
|
1203 i += 2; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1204 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1205 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1206 if (res && nch - i != 0) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1207 res = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1208 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
|
1209 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1210 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1211 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1212 return res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1213 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1214 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1215 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1216 /* 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
|
1217 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1218 static int |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1219 validate_list_iter(node *tree) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1220 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1221 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
|
1222 && 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
|
1223 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
|
1224 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
|
1225 else |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1226 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
|
1227 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1228 return res; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1229 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1230 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1231 /* 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
|
1232 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1233 static int |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1234 validate_list_for(node *tree) |
|
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 int nch = NCH(tree); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1237 int res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1238 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1239 if (nch == 5) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1240 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
|
1241 else |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1242 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
|
1243 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1244 if (res) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1245 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
|
1246 && validate_exprlist(CHILD(tree, 1)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1247 && 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
|
1248 && 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
|
1249 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1250 return res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1251 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1252 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1253 /* list_if: 'if' test [list_iter] |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1254 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1255 static int |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1256 validate_list_if(node *tree) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1257 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1258 int nch = NCH(tree); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1259 int res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1260 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1261 if (nch == 3) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1262 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
|
1263 else |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1264 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
|
1265 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1266 if (res) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1267 res = (validate_name(CHILD(tree, 0), "if") |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1268 && validate_test(CHILD(tree, 1))); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1269 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1270 return res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1271 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1272 |
|
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 /* validate_fpdef() |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1275 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1276 * fpdef: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1277 * NAME |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1278 * | '(' fplist ')' |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1279 */ |
| 4084 | 1280 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1281 validate_fpdef(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1282 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1283 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1284 int res = validate_ntype(tree, fpdef); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1285 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1286 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1287 if (nch == 1) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1288 res = validate_ntype(CHILD(tree, 0), NAME); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1289 else if (nch == 3) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1290 res = (validate_lparen(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1291 && validate_fplist(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1292 && validate_rparen(CHILD(tree, 2))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1293 else |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1294 res = validate_numnodes(tree, 1, "fpdef"); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1295 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1296 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1297 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1298 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1299 |
| 4084 | 1300 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1301 validate_fplist(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1302 { |
| 4084 | 1303 return (validate_repeating_list(tree, fplist, |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1304 validate_fpdef, "fplist")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1305 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1306 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1307 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1308 /* simple_stmt | compound_stmt |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1309 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1310 */ |
| 4084 | 1311 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1312 validate_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1313 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1314 int res = (validate_ntype(tree, stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1315 && validate_numnodes(tree, 1, "stmt")); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1316 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1317 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1318 tree = CHILD(tree, 0); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1319 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1320 if (TYPE(tree) == simple_stmt) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1321 res = validate_simple_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1322 else |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1323 res = validate_compound_stmt(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1324 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1325 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1326 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1327 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1328 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1329 /* small_stmt (';' small_stmt)* [';'] NEWLINE |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1330 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1331 */ |
| 4084 | 1332 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1333 validate_simple_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1334 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1335 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1336 int res = (validate_ntype(tree, simple_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1337 && (nch >= 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1338 && validate_small_stmt(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1339 && validate_newline(CHILD(tree, nch - 1))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1340 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1341 if (nch < 2) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1342 res = validate_numnodes(tree, 2, "simple_stmt"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1343 --nch; /* forget the NEWLINE */ |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1344 if (res && is_even(nch)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1345 res = validate_semi(CHILD(tree, --nch)); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1346 if (res && (nch > 2)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1347 int i; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1348 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1349 for (i = 1; res && (i < nch); i += 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1350 res = (validate_semi(CHILD(tree, i)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1351 && 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
|
1352 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1353 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1354 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1355 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1356 |
| 4084 | 1357 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1358 validate_small_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1359 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1360 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
|
1361 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
|
1362 |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1363 if (res) { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1364 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
|
1365 |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1366 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
|
1367 || (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
|
1368 || (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
|
1369 || (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
|
1370 || (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
|
1371 || (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
|
1372 || (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
|
1373 || (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
|
1374 || (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
|
1375 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
|
1376 else { |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1377 res = 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1378 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
|
1379 } |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1380 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1381 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
|
1382 res = 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1383 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
|
1384 "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
|
1385 TYPE(CHILD(tree, 0))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1386 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1387 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1388 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1389 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1390 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1391 /* compound_stmt: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1392 * if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1393 */ |
| 4084 | 1394 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1395 validate_compound_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1396 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1397 int res = (validate_ntype(tree, compound_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1398 && 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
|
1399 int ntype; |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1400 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1401 if (!res) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1402 return (0); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1403 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1404 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
|
1405 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
|
1406 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
|
1407 || (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
|
1408 || (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
|
1409 || (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
|
1410 || (ntype == funcdef) |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1411 || (ntype == classdef)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1412 res = validate_node(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1413 else { |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1414 res = 0; |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1415 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
|
1416 "Illegal compound statement type: %d.", TYPE(tree)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1417 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1418 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1419 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1420 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1421 |
| 4084 | 1422 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1423 validate_expr_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1424 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1425 int j; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1426 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1427 int res = (validate_ntype(tree, expr_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1428 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1429 && validate_testlist(CHILD(tree, 0))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1430 |
|
14214
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1431 if (res && nch == 3 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1432 && TYPE(CHILD(tree, 1)) == augassign) { |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1433 res = (validate_numnodes(CHILD(tree, 1), 1, "augassign") |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1434 && validate_testlist(CHILD(tree, 2))); |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1435 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1436 if (res) { |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1437 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
|
1438 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1439 res = (strcmp(s, "+=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1440 || strcmp(s, "-=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1441 || strcmp(s, "*=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1442 || strcmp(s, "/=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1443 || strcmp(s, "%=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1444 || strcmp(s, "&=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1445 || strcmp(s, "|=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1446 || strcmp(s, "^=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1447 || strcmp(s, "<<=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1448 || strcmp(s, ">>=") == 0 |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1449 || strcmp(s, "**=") == 0); |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1450 if (!res) |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1451 err_string("illegal augmmented assignment operator"); |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1452 } |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1453 } |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1454 else { |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1455 for (j = 1; res && (j < nch); j += 2) |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1456 res = (validate_equal(CHILD(tree, j)) |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1457 && validate_testlist(CHILD(tree, j + 1))); |
|
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
1458 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1459 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1460 } |
|
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 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1463 /* print_stmt: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1464 * |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1465 * 'print' ( [ test (',' test)* [','] ] |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1466 * | '>>' test [ (',' test)+ [','] ] ) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1467 */ |
| 4084 | 1468 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1469 validate_print_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1470 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1471 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1472 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
|
1473 && (nch > 0) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1474 && validate_name(CHILD(tree, 0), "print")); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1475 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1476 if (res && nch > 1) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1477 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
|
1478 int i = 1; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1479 int allow_trailing_comma = 1; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1480 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1481 if (sym == test) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1482 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
|
1483 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1484 if (nch < 3) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1485 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
|
1486 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1487 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
|
1488 && 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
|
1489 i += 2; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1490 allow_trailing_comma = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1491 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1492 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1493 if (res) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1494 /* ... (',' test)* [','] */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1495 while (res && i+2 <= nch) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1496 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
|
1497 && 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
|
1498 allow_trailing_comma = 1; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1499 i += 2; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1500 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1501 if (res && !allow_trailing_comma) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1502 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
|
1503 else if (res && i < nch) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1504 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
|
1505 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1506 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1507 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1508 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1509 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1510 |
| 4084 | 1511 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1512 validate_del_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1513 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1514 return (validate_numnodes(tree, 2, "del_stmt") |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1515 && validate_name(CHILD(tree, 0), "del") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1516 && validate_exprlist(CHILD(tree, 1))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1517 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1518 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1519 |
| 4084 | 1520 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1521 validate_return_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1522 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1523 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1524 int res = (validate_ntype(tree, return_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1525 && ((nch == 1) || (nch == 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1526 && validate_name(CHILD(tree, 0), "return")); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1527 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1528 if (res && (nch == 2)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1529 res = validate_testlist(CHILD(tree, 1)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1530 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1531 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1532 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1533 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1534 |
| 4084 | 1535 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1536 validate_raise_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1537 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1538 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1539 int res = (validate_ntype(tree, raise_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1540 && ((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
|
1541 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1542 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1543 res = validate_name(CHILD(tree, 0), "raise"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1544 if (res && (nch >= 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1545 res = validate_test(CHILD(tree, 1)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1546 if (res && nch > 2) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1547 res = (validate_comma(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1548 && validate_test(CHILD(tree, 3))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1549 if (res && (nch > 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1550 res = (validate_comma(CHILD(tree, 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1551 && validate_test(CHILD(tree, 5))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1552 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1553 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1554 else |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1555 (void) validate_numnodes(tree, 2, "raise"); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1556 if (res && (nch == 4)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1557 res = (validate_comma(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1558 && validate_test(CHILD(tree, 3))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1559 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1560 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1561 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1562 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1563 |
|
18646
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1564 /* yield_stmt: 'yield' testlist |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1565 */ |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1566 static int |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1567 validate_yield_stmt(node *tree) |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1568 { |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1569 return (validate_ntype(tree, yield_stmt) |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1570 && validate_numnodes(tree, 2, "yield_stmt") |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1571 && validate_name(CHILD(tree, 0), "yield") |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1572 && validate_testlist(CHILD(tree, 1))); |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1573 } |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1574 |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
1575 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1576 static int |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1577 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
|
1578 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1579 int nch = NCH(tree); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1580 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
|
1581 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1582 if (ok) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1583 if (nch == 1) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1584 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
|
1585 else if (nch == 3) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1586 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
|
1587 && 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
|
1588 && 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
|
1589 else |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1590 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
|
1591 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1592 return ok; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1593 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1594 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1595 |
|
15751
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1596 /* dotted_name: NAME ("." NAME)* |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1597 */ |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1598 static int |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1599 validate_dotted_name(node *tree) |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1600 { |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1601 int nch = NCH(tree); |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1602 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
|
1603 && is_odd(nch) |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1604 && 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
|
1605 int i; |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1606 |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1607 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
|
1608 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
|
1609 && 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
|
1610 } |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1611 return res; |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1612 } |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1613 |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1614 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1615 /* 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
|
1616 */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1617 static int |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1618 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
|
1619 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1620 int nch = NCH(tree); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1621 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
|
1622 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1623 if (res) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1624 if (nch == 1) |
|
15751
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1625 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
|
1626 else if (nch == 3) |
|
15751
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1627 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
|
1628 && 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
|
1629 && 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
|
1630 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1631 res = 0; |
| 15318 | 1632 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
|
1633 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1634 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1635 return res; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1636 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1637 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1638 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1639 /* import_stmt: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1640 * |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1641 * 'import' dotted_as_name (',' dotted_as_name)* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1642 * | 'from' dotted_name 'import' ('*' | import_as_name (',' import_as_name)*) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1643 */ |
| 4084 | 1644 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1645 validate_import_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1646 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1647 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1648 int res = (validate_ntype(tree, import_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1649 && (nch >= 2) && is_even(nch) |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1650 && validate_ntype(CHILD(tree, 0), NAME)); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1651 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1652 if (res && (strcmp(STR(CHILD(tree, 0)), "import") == 0)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1653 int j; |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1654 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1655 res = validate_dotted_as_name(CHILD(tree, 1)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1656 for (j = 2; res && (j < nch); j += 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1657 res = (validate_comma(CHILD(tree, j)) |
|
15751
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1658 && validate_dotted_as_name(CHILD(tree, j + 1))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1659 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1660 else if (res && (res = validate_name(CHILD(tree, 0), "from"))) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1661 res = ((nch >= 4) && is_even(nch) |
|
15751
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1662 && validate_dotted_name(CHILD(tree, 1)) |
|
939b8fffc452
Fix problems with validation of import statement parse trees.
Fred Drake <fdrake@acm.org>
parents:
15506
diff
changeset
|
1663 && validate_name(CHILD(tree, 2), "import")); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1664 if (nch == 4) { |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1665 if (TYPE(CHILD(tree, 3)) == import_as_name) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1666 res = validate_import_as_name(CHILD(tree, 3)); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1667 else |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1668 res = validate_star(CHILD(tree, 3)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1669 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1670 else { |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1671 /* 'from' dotted_name 'import' import_as_name |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1672 * (',' import_as_name)+ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1673 */ |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1674 int j; |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1675 res = validate_import_as_name(CHILD(tree, 3)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1676 for (j = 4; res && (j < nch); j += 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1677 res = (validate_comma(CHILD(tree, j)) |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
1678 && validate_import_as_name(CHILD(tree, j + 1))); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1679 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1680 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1681 else |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1682 res = 0; |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1683 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1684 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1685 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1686 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1687 |
| 4084 | 1688 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1689 validate_global_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1690 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1691 int j; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1692 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1693 int res = (validate_ntype(tree, global_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1694 && is_even(nch) && (nch >= 2)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1695 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1696 if (res) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1697 res = (validate_name(CHILD(tree, 0), "global") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1698 && validate_ntype(CHILD(tree, 1), NAME)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1699 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
|
1700 res = (validate_comma(CHILD(tree, j)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1701 && validate_ntype(CHILD(tree, j + 1), NAME)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1702 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1703 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1704 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1705 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1706 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1707 /* exec_stmt: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1708 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1709 * 'exec' expr ['in' test [',' test]] |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1710 */ |
| 4084 | 1711 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1712 validate_exec_stmt(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1713 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1714 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1715 int res = (validate_ntype(tree, exec_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1716 && ((nch == 2) || (nch == 4) || (nch == 6)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1717 && validate_name(CHILD(tree, 0), "exec") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1718 && validate_expr(CHILD(tree, 1))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1719 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1720 if (!res && !PyErr_Occurred()) |
| 15318 | 1721 err_string("illegal exec statement"); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1722 if (res && (nch > 2)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1723 res = (validate_name(CHILD(tree, 2), "in") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1724 && validate_test(CHILD(tree, 3))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1725 if (res && (nch == 6)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1726 res = (validate_comma(CHILD(tree, 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1727 && validate_test(CHILD(tree, 5))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1728 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1729 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1730 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1731 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1732 |
| 5236 | 1733 /* assert_stmt: |
| 1734 * | |
| 1735 * 'assert' test [',' test] | |
| 1736 */ | |
| 1737 static int | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1738 validate_assert_stmt(node *tree) |
| 5236 | 1739 { |
| 1740 int nch = NCH(tree); | |
| 1741 int res = (validate_ntype(tree, assert_stmt) | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1742 && ((nch == 2) || (nch == 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1743 && (validate_name(CHILD(tree, 0), "__assert__") || |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1744 validate_name(CHILD(tree, 0), "assert")) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1745 && validate_test(CHILD(tree, 1))); |
| 5236 | 1746 |
| 1747 if (!res && !PyErr_Occurred()) | |
| 15318 | 1748 err_string("illegal assert statement"); |
| 5236 | 1749 if (res && (nch > 2)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1750 res = (validate_comma(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1751 && validate_test(CHILD(tree, 3))); |
| 5236 | 1752 |
| 1753 return (res); | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1754 } |
| 5236 | 1755 |
| 1756 | |
| 4084 | 1757 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1758 validate_while(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1759 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1760 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1761 int res = (validate_ntype(tree, while_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1762 && ((nch == 4) || (nch == 7)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1763 && validate_name(CHILD(tree, 0), "while") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1764 && validate_test(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1765 && validate_colon(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1766 && validate_suite(CHILD(tree, 3))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1767 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1768 if (res && (nch == 7)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1769 res = (validate_name(CHILD(tree, 4), "else") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1770 && validate_colon(CHILD(tree, 5)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1771 && validate_suite(CHILD(tree, 6))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1772 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1773 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1774 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1775 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1776 |
| 4084 | 1777 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1778 validate_for(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1779 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1780 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1781 int res = (validate_ntype(tree, for_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1782 && ((nch == 6) || (nch == 9)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1783 && validate_name(CHILD(tree, 0), "for") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1784 && validate_exprlist(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1785 && validate_name(CHILD(tree, 2), "in") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1786 && validate_testlist(CHILD(tree, 3)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1787 && validate_colon(CHILD(tree, 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1788 && validate_suite(CHILD(tree, 5))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1789 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1790 if (res && (nch == 9)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1791 res = (validate_name(CHILD(tree, 6), "else") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1792 && validate_colon(CHILD(tree, 7)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1793 && validate_suite(CHILD(tree, 8))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1794 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1795 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1796 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1797 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1798 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1799 /* try_stmt: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1800 * 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite] |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1801 * | 'try' ':' suite 'finally' ':' suite |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1802 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1803 */ |
| 4084 | 1804 static int |
| 13503 | 1805 validate_try(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1806 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1807 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1808 int pos = 3; |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1809 int res = (validate_ntype(tree, try_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1810 && (nch >= 6) && ((nch % 3) == 0)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1811 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1812 if (res) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1813 res = (validate_name(CHILD(tree, 0), "try") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1814 && validate_colon(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1815 && validate_suite(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1816 && validate_colon(CHILD(tree, nch - 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1817 && 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
|
1818 else if (!PyErr_Occurred()) { |
|
13325
7bac10a9bb61
Andrew Kuchling <akuchlin@mems-exchange.org>:
Fred Drake <fdrake@acm.org>
parents:
13256
diff
changeset
|
1819 const char* name = "except"; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1820 if (TYPE(CHILD(tree, nch - 3)) != except_clause) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1821 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
|
1822 |
|
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
1823 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
|
1824 "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
|
1825 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1826 /* Skip past except_clause sections: */ |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1827 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
|
1828 res = (validate_except_clause(CHILD(tree, pos)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1829 && validate_colon(CHILD(tree, pos + 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1830 && validate_suite(CHILD(tree, pos + 2))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1831 pos += 3; |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1832 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1833 if (res && (pos < nch)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1834 res = validate_ntype(CHILD(tree, pos), NAME); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1835 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
|
1836 res = (validate_numnodes(tree, 6, "try/finally") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1837 && validate_colon(CHILD(tree, 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1838 && validate_suite(CHILD(tree, 5))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1839 else if (res) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1840 if (nch == (pos + 3)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1841 res = ((strcmp(STR(CHILD(tree, pos)), "except") == 0) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1842 || (strcmp(STR(CHILD(tree, pos)), "else") == 0)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1843 if (!res) |
| 15318 | 1844 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
|
1845 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1846 else if (nch == (pos + 6)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1847 res = (validate_name(CHILD(tree, pos), "except") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1848 && validate_colon(CHILD(tree, pos + 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1849 && validate_suite(CHILD(tree, pos + 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1850 && validate_name(CHILD(tree, pos + 3), "else")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1851 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1852 else |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1853 res = validate_numnodes(tree, pos + 3, "try/except"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1854 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1855 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1856 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1857 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1858 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1859 |
| 4084 | 1860 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1861 validate_except_clause(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1862 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1863 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1864 int res = (validate_ntype(tree, except_clause) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1865 && ((nch == 1) || (nch == 2) || (nch == 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1866 && validate_name(CHILD(tree, 0), "except")); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1867 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1868 if (res && (nch > 1)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1869 res = validate_test(CHILD(tree, 1)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1870 if (res && (nch == 4)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1871 res = (validate_comma(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1872 && validate_test(CHILD(tree, 3))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1873 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1874 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1875 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1876 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1877 |
| 4084 | 1878 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1879 validate_test(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1880 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1881 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1882 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
|
1883 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1884 if (res && (TYPE(CHILD(tree, 0)) == lambdef)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1885 res = ((nch == 1) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1886 && validate_lambdef(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1887 else if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1888 int pos; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1889 res = validate_and_test(CHILD(tree, 0)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1890 for (pos = 1; res && (pos < nch); pos += 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1891 res = (validate_name(CHILD(tree, pos), "or") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1892 && 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
|
1893 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1894 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1895 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1896 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1897 |
| 4084 | 1898 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1899 validate_and_test(node *tree) |
|
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 int pos; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1902 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1903 int res = (validate_ntype(tree, and_test) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1904 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1905 && validate_not_test(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1906 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1907 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
|
1908 res = (validate_name(CHILD(tree, pos), "and") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1909 && validate_not_test(CHILD(tree, 0))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1910 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1911 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1912 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1913 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1914 |
| 4084 | 1915 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1916 validate_not_test(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1917 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1918 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1919 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
|
1920 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1921 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1922 if (nch == 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1923 res = (validate_name(CHILD(tree, 0), "not") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1924 && validate_not_test(CHILD(tree, 1))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1925 else if (nch == 1) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1926 res = validate_comparison(CHILD(tree, 0)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1927 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1928 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1929 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1930 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1931 |
| 4084 | 1932 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1933 validate_comparison(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1934 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1935 int pos; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1936 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1937 int res = (validate_ntype(tree, comparison) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1938 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1939 && validate_expr(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1940 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1941 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
|
1942 res = (validate_comp_op(CHILD(tree, pos)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1943 && validate_expr(CHILD(tree, pos + 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1944 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1945 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1946 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1947 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1948 |
| 4084 | 1949 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1950 validate_comp_op(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1951 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1952 int res = 0; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1953 int nch = NCH(tree); |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1954 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
1955 if (!validate_ntype(tree, comp_op)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1956 return (0); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1957 if (nch == 1) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1958 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1959 * 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
|
1960 * 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
|
1961 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1962 tree = CHILD(tree, 0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1963 switch (TYPE(tree)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1964 case LESS: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1965 case GREATER: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1966 case EQEQUAL: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1967 case EQUAL: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1968 case LESSEQUAL: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1969 case GREATEREQUAL: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1970 case NOTEQUAL: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1971 res = 1; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1972 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1973 case NAME: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1974 res = ((strcmp(STR(tree), "in") == 0) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1975 || (strcmp(STR(tree), "is") == 0)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1976 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
|
1977 PyErr_Format(parser_error, |
| 15318 | 1978 "illegal operator '%s'", STR(tree)); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1979 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1980 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1981 default: |
| 15318 | 1982 err_string("illegal comparison operator type"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1983 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1984 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1985 } |
| 4600 | 1986 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
|
1987 res = (validate_ntype(CHILD(tree, 0), NAME) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1988 && validate_ntype(CHILD(tree, 1), NAME) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1989 && (((strcmp(STR(CHILD(tree, 0)), "is") == 0) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1990 && (strcmp(STR(CHILD(tree, 1)), "not") == 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1991 || ((strcmp(STR(CHILD(tree, 0)), "not") == 0) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1992 && (strcmp(STR(CHILD(tree, 1)), "in") == 0)))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1993 if (!res && !PyErr_Occurred()) |
| 15318 | 1994 err_string("unknown comparison operator"); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1995 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1996 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
1997 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1998 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
1999 |
| 4084 | 2000 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2001 validate_expr(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2002 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2003 int j; |
|
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 res = (validate_ntype(tree, expr) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2006 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2007 && validate_xor_expr(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2008 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2009 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
|
2010 res = (validate_xor_expr(CHILD(tree, j)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2011 && validate_vbar(CHILD(tree, j - 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2012 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2013 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2014 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2015 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2016 |
| 4084 | 2017 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2018 validate_xor_expr(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2019 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2020 int j; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2021 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2022 int res = (validate_ntype(tree, xor_expr) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2023 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2024 && validate_and_expr(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2025 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2026 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
|
2027 res = (validate_circumflex(CHILD(tree, j - 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2028 && validate_and_expr(CHILD(tree, j))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2029 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2030 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2031 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2032 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2033 |
| 4084 | 2034 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2035 validate_and_expr(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2036 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2037 int pos; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2038 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2039 int res = (validate_ntype(tree, and_expr) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2040 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2041 && validate_shift_expr(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2042 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2043 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
|
2044 res = (validate_ampersand(CHILD(tree, pos)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2045 && validate_shift_expr(CHILD(tree, pos + 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2046 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2047 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2048 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2049 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2050 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2051 static int |
| 13503 | 2052 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
|
2053 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2054 int pos = 1; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2055 int nch = NCH(tree); |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2056 int res = (is_odd(nch) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2057 && (*termvalid)(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2058 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2059 for ( ; res && (pos < nch); pos += 2) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2060 if (TYPE(CHILD(tree, pos)) != op1) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2061 res = validate_ntype(CHILD(tree, pos), op2); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2062 if (res) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2063 res = (*termvalid)(CHILD(tree, pos + 1)); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2064 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2065 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2066 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2067 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2068 |
| 4084 | 2069 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2070 validate_shift_expr(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2071 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2072 return (validate_ntype(tree, shift_expr) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2073 && validate_chain_two_ops(tree, validate_arith_expr, |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2074 LEFTSHIFT, RIGHTSHIFT)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2075 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2076 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2077 |
| 4084 | 2078 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2079 validate_arith_expr(node *tree) |
|
3774
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 return (validate_ntype(tree, arith_expr) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2082 && 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
|
2083 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2084 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2085 |
| 4084 | 2086 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2087 validate_term(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2088 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2089 int pos = 1; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2090 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2091 int res = (validate_ntype(tree, term) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2092 && is_odd(nch) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2093 && validate_factor(CHILD(tree, 0))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2094 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2095 for ( ; res && (pos < nch); pos += 2) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2096 res = (((TYPE(CHILD(tree, pos)) == STAR) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2097 || (TYPE(CHILD(tree, pos)) == SLASH) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2098 || (TYPE(CHILD(tree, pos)) == PERCENT)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2099 && validate_factor(CHILD(tree, pos + 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2100 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2101 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2102 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2103 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2104 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2105 /* factor: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2106 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2107 * factor: ('+'|'-'|'~') factor | power |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2108 */ |
| 4084 | 2109 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2110 validate_factor(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2111 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2112 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2113 int res = (validate_ntype(tree, factor) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2114 && (((nch == 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2115 && ((TYPE(CHILD(tree, 0)) == PLUS) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2116 || (TYPE(CHILD(tree, 0)) == MINUS) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2117 || (TYPE(CHILD(tree, 0)) == TILDE)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2118 && validate_factor(CHILD(tree, 1))) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2119 || ((nch == 1) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2120 && validate_power(CHILD(tree, 0))))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2121 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2122 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2123 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2124 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2125 /* power: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2126 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2127 * power: atom trailer* ('**' factor)* |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2128 */ |
| 4084 | 2129 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2130 validate_power(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2131 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2132 int pos = 1; |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2133 int nch = NCH(tree); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2134 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
|
2135 && validate_atom(CHILD(tree, 0))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2136 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2137 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
|
2138 res = validate_trailer(CHILD(tree, pos++)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2139 if (res && (pos < nch)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2140 if (!is_even(nch - pos)) { |
| 15318 | 2141 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
|
2142 return (0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2143 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2144 for ( ; res && (pos < (nch - 1)); pos += 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2145 res = (validate_doublestar(CHILD(tree, pos)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2146 && validate_factor(CHILD(tree, pos + 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2147 } |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2148 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2149 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2150 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2151 |
| 4084 | 2152 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2153 validate_atom(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2154 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2155 int pos; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2156 int nch = NCH(tree); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2157 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
|
2158 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2159 if (res && nch < 1) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2160 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
|
2161 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2162 switch (TYPE(CHILD(tree, 0))) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2163 case LPAR: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2164 res = ((nch <= 3) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2165 && (validate_rparen(CHILD(tree, nch - 1)))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2166 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2167 if (res && (nch == 3)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2168 res = validate_testlist(CHILD(tree, 1)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2169 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2170 case LSQB: |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2171 if (nch == 2) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2172 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
|
2173 else if (nch == 3) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2174 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
|
2175 && 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
|
2176 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2177 res = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2178 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
|
2179 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2180 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2181 case LBRACE: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2182 res = ((nch <= 3) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2183 && 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
|
2184 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2185 if (res && (nch == 3)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2186 res = validate_dictmaker(CHILD(tree, 1)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2187 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2188 case BACKQUOTE: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2189 res = ((nch == 3) |
|
23538
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
2190 && validate_testlist1(CHILD(tree, 1)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2191 && validate_ntype(CHILD(tree, 2), BACKQUOTE)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2192 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2193 case NAME: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2194 case NUMBER: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2195 res = (nch == 1); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2196 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2197 case STRING: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2198 for (pos = 1; res && (pos < nch); ++pos) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2199 res = validate_ntype(CHILD(tree, pos), STRING); |
|
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 default: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2202 res = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2203 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2204 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2205 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2206 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2207 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2208 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2209 |
|
14129
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2210 /* listmaker: |
|
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2211 * 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
|
2212 */ |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2213 static int |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2214 validate_listmaker(node *tree) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2215 { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2216 int nch = NCH(tree); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2217 int ok = nch; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2218 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2219 if (nch == 0) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2220 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
|
2221 else |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2222 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
|
2223 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2224 /* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2225 * list_iter | (',' test)* [','] |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2226 */ |
|
14129
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2227 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
|
2228 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
|
2229 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2230 /* (',' test)* [','] */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2231 int i = 1; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2232 while (ok && nch - i >= 2) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2233 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
|
2234 && 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
|
2235 i += 2; |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2236 } |
|
14129
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2237 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
|
2238 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
|
2239 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
|
2240 ok = 0; |
|
2c2ae86dfe87
validate_listmaker(): Revise to match Skip's latest changes to the
Fred Drake <fdrake@acm.org>
parents:
14113
diff
changeset
|
2241 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
|
2242 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2243 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2244 return ok; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2245 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2246 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2247 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2248 /* funcdef: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2249 * 'def' NAME parameters ':' suite |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2250 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2251 */ |
| 4084 | 2252 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2253 validate_funcdef(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2254 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2255 return (validate_ntype(tree, funcdef) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2256 && validate_numnodes(tree, 5, "funcdef") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2257 && validate_name(CHILD(tree, 0), "def") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2258 && validate_ntype(CHILD(tree, 1), NAME) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2259 && validate_colon(CHILD(tree, 3)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2260 && validate_parameters(CHILD(tree, 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2261 && validate_suite(CHILD(tree, 4))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2262 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2263 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2264 |
| 4084 | 2265 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2266 validate_lambdef(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2267 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2268 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2269 int res = (validate_ntype(tree, lambdef) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2270 && ((nch == 3) || (nch == 4)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2271 && validate_name(CHILD(tree, 0), "lambda") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2272 && validate_colon(CHILD(tree, nch - 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2273 && validate_test(CHILD(tree, nch - 1))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2274 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2275 if (res && (nch == 4)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2276 res = validate_varargslist(CHILD(tree, 1)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2277 else if (!res && !PyErr_Occurred()) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2278 (void) validate_numnodes(tree, 3, "lambdef"); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2279 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2280 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2281 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2282 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2283 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2284 /* arglist: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2285 * |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2286 * (argument ',')* (argument [','] | '*' test [',' '**' test] | '**' test) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2287 */ |
| 4084 | 2288 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2289 validate_arglist(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2290 { |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2291 int nch = NCH(tree); |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2292 int i = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2293 int ok = 1; |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2294 |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2295 if (nch <= 0) |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2296 /* 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
|
2297 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
|
2298 |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2299 while (ok && nch-i >= 2) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2300 /* skip leading (argument ',') */ |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2301 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
|
2302 && 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
|
2303 if (ok) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2304 i += 2; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2305 else |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2306 PyErr_Clear(); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2307 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2308 ok = 1; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2309 if (nch-i > 0) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2310 /* |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2311 * argument | '*' test [',' '**' test] | '**' test |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2312 */ |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2313 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
|
2314 |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2315 if (sym == argument) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2316 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
|
2317 if (ok && i+1 != nch) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2318 err_string("illegal arglist specification" |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2319 " (extra stuff on end)"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2320 ok = 0; |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2321 } |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2322 } |
|
14110
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2323 else if (sym == STAR) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2324 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
|
2325 if (ok && (nch-i == 2)) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2326 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
|
2327 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
|
2328 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
|
2329 && 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
|
2330 && 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
|
2331 && 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
|
2332 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2333 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
|
2334 ok = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2335 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2336 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2337 else if (sym == DOUBLESTAR) { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2338 if (nch-i == 2) |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2339 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
|
2340 && 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
|
2341 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2342 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
|
2343 ok = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2344 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2345 } |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2346 else { |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2347 err_string("illegal arglist specification"); |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2348 ok = 0; |
|
0abfca0035dc
Update to reflect recent grammar changes (list comprehensions, extended
Fred Drake <fdrake@acm.org>
parents:
13692
diff
changeset
|
2349 } |
|
12487
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2350 } |
|
f1e867ad7d85
validate_arglist(): Re-written to reflect extended call syntax.
Fred Drake <fdrake@acm.org>
parents:
12416
diff
changeset
|
2351 return (ok); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2352 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2353 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2354 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2355 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2356 /* argument: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2357 * |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2358 * [test '='] test |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2359 */ |
| 4084 | 2360 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2361 validate_argument(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2362 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2363 int nch = NCH(tree); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2364 int res = (validate_ntype(tree, argument) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2365 && ((nch == 1) || (nch == 3)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2366 && validate_test(CHILD(tree, 0))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2367 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2368 if (res && (nch == 3)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2369 res = (validate_equal(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2370 && validate_test(CHILD(tree, 2))); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2371 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2372 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2373 } |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2374 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2375 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2376 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2377 /* trailer: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2378 * |
| 4084 | 2379 * '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME |
|
3774
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_trailer(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2383 { |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2384 int nch = NCH(tree); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2385 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
|
2386 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2387 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2388 switch (TYPE(CHILD(tree, 0))) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2389 case LPAR: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2390 res = validate_rparen(CHILD(tree, nch - 1)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2391 if (res && (nch == 3)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2392 res = validate_arglist(CHILD(tree, 1)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2393 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2394 case LSQB: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2395 res = (validate_numnodes(tree, 3, "trailer") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2396 && validate_subscriptlist(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2397 && validate_ntype(CHILD(tree, 2), RSQB)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2398 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2399 case DOT: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2400 res = (validate_numnodes(tree, 2, "trailer") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2401 && validate_ntype(CHILD(tree, 1), NAME)); |
|
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 default: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2404 res = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2405 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2406 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2407 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2408 else { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2409 (void) validate_numnodes(tree, 2, "trailer"); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2410 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2411 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2412 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2413 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2414 |
| 4084 | 2415 /* subscriptlist: |
| 2416 * | |
| 2417 * subscript (',' subscript)* [','] | |
| 2418 */ | |
| 2419 static int | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2420 validate_subscriptlist(node *tree) |
| 4084 | 2421 { |
| 2422 return (validate_repeating_list(tree, subscriptlist, | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2423 validate_subscript, "subscriptlist")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2424 } |
| 4084 | 2425 |
| 2426 | |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2427 /* subscript: |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2428 * |
| 4084 | 2429 * '.' '.' '.' | test | [test] ':' [test] [sliceop] |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2430 */ |
| 4084 | 2431 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2432 validate_subscript(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2433 { |
| 4084 | 2434 int offset = 0; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2435 int nch = NCH(tree); |
| 4084 | 2436 int res = validate_ntype(tree, subscript) && (nch >= 1) && (nch <= 4); |
| 2437 | |
| 2438 if (!res) { | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2439 if (!PyErr_Occurred()) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2440 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
|
2441 return (0); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2442 } |
| 4084 | 2443 if (TYPE(CHILD(tree, 0)) == DOT) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2444 /* take care of ('.' '.' '.') possibility */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2445 return (validate_numnodes(tree, 3, "subscript") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2446 && validate_dot(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2447 && validate_dot(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2448 && validate_dot(CHILD(tree, 2))); |
| 4084 | 2449 if (nch == 1) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2450 if (TYPE(CHILD(tree, 0)) == test) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2451 res = validate_test(CHILD(tree, 0)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2452 else |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2453 res = validate_colon(CHILD(tree, 0)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2454 return (res); |
| 4084 | 2455 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2456 /* Must be [test] ':' [test] [sliceop], |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2457 * 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
|
2458 * be present, but we don't know which yet. |
| 4084 | 2459 */ |
| 2460 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
|
2461 res = validate_test(CHILD(tree, 0)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2462 offset = 1; |
| 4084 | 2463 } |
| 2464 if (res) | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2465 res = validate_colon(CHILD(tree, offset)); |
| 4084 | 2466 if (res) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2467 int rem = nch - ++offset; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2468 if (rem) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2469 if (TYPE(CHILD(tree, offset)) == test) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2470 res = validate_test(CHILD(tree, offset)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2471 ++offset; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2472 --rem; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2473 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2474 if (res && rem) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2475 res = validate_sliceop(CHILD(tree, offset)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2476 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2477 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2478 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2479 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2480 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2481 |
| 4084 | 2482 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2483 validate_sliceop(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2484 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2485 int nch = NCH(tree); |
| 4084 | 2486 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
|
2487 && validate_ntype(tree, sliceop); |
| 4084 | 2488 if (!res && !PyErr_Occurred()) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2489 res = validate_numnodes(tree, 1, "sliceop"); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2490 } |
| 4084 | 2491 if (res) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2492 res = validate_colon(CHILD(tree, 0)); |
| 4084 | 2493 if (res && (nch == 2)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2494 res = validate_test(CHILD(tree, 1)); |
| 4084 | 2495 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2496 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2497 } |
| 4084 | 2498 |
| 2499 | |
| 2500 static int | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2501 validate_exprlist(node *tree) |
| 4084 | 2502 { |
| 2503 return (validate_repeating_list(tree, exprlist, | |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2504 validate_expr, "exprlist")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2505 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2506 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2507 |
| 4084 | 2508 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2509 validate_dictmaker(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2510 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2511 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2512 int res = (validate_ntype(tree, dictmaker) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2513 && (nch >= 3) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2514 && validate_test(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2515 && validate_colon(CHILD(tree, 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2516 && validate_test(CHILD(tree, 2))); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2517 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2518 if (res && ((nch % 4) == 0)) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2519 res = validate_comma(CHILD(tree, --nch)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2520 else if (res) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2521 res = ((nch % 4) == 3); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2522 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2523 if (res && (nch > 3)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2524 int pos = 3; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2525 /* ( ',' test ':' test )* */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2526 while (res && (pos < nch)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2527 res = (validate_comma(CHILD(tree, pos)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2528 && validate_test(CHILD(tree, pos + 1)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2529 && validate_colon(CHILD(tree, pos + 2)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2530 && validate_test(CHILD(tree, pos + 3))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2531 pos += 4; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2532 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2533 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2534 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2535 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2536 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2537 |
| 4084 | 2538 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2539 validate_eval_input(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2540 { |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2541 int pos; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2542 int nch = NCH(tree); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2543 int res = (validate_ntype(tree, eval_input) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2544 && (nch >= 2) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2545 && validate_testlist(CHILD(tree, 0)) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2546 && 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
|
2547 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2548 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
|
2549 res = validate_ntype(CHILD(tree, pos), NEWLINE); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2550 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2551 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2552 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2553 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2554 |
| 4084 | 2555 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2556 validate_node(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2557 { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2558 int nch = 0; /* num. children on current node */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2559 int res = 1; /* result value */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2560 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
|
2561 |
|
18247
e3cf3348feca
Properly use &&. Closes bug #434989.
Martin v. Löwis <martin@v.loewis.de>
parents:
15751
diff
changeset
|
2562 while (res && (tree != 0)) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2563 nch = NCH(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2564 next = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2565 switch (TYPE(tree)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2566 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2567 * Definition nodes. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2568 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2569 case funcdef: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2570 res = validate_funcdef(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2571 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2572 case classdef: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2573 res = validate_class(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2574 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2575 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2576 * "Trivial" parse tree nodes. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2577 * (Why did I call these trivial?) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2578 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2579 case stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2580 res = validate_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2581 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2582 case small_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2583 /* |
|
14533
635f69123349
Simplify some of the code. Use PyErr_Format() instead of sprintf(), etc.
Fred Drake <fdrake@acm.org>
parents:
14375
diff
changeset
|
2584 * 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
|
2585 * | import_stmt | global_stmt | exec_stmt | assert_stmt |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2586 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2587 res = validate_small_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2588 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2589 case flow_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2590 res = (validate_numnodes(tree, 1, "flow_stmt") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2591 && ((TYPE(CHILD(tree, 0)) == break_stmt) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2592 || (TYPE(CHILD(tree, 0)) == continue_stmt) |
|
18646
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
2593 || (TYPE(CHILD(tree, 0)) == yield_stmt) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2594 || (TYPE(CHILD(tree, 0)) == return_stmt) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2595 || (TYPE(CHILD(tree, 0)) == raise_stmt))); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2596 if (res) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2597 next = CHILD(tree, 0); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2598 else if (nch == 1) |
| 15318 | 2599 err_string("illegal flow_stmt type"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2600 break; |
|
18646
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
2601 case yield_stmt: |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
2602 res = validate_yield_stmt(tree); |
|
c43fe213ee10
Add support for yield statements.
Fred Drake <fdrake@acm.org>
parents:
18247
diff
changeset
|
2603 break; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2604 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2605 * Compound statements. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2606 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2607 case simple_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2608 res = validate_simple_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2609 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2610 case compound_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2611 res = validate_compound_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2612 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2613 /* |
|
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
|
2614 * Fundamental statements. |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2615 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2616 case expr_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2617 res = validate_expr_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2618 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2619 case print_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2620 res = validate_print_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2621 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2622 case del_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2623 res = validate_del_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2624 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2625 case pass_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2626 res = (validate_numnodes(tree, 1, "pass") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2627 && validate_name(CHILD(tree, 0), "pass")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2628 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2629 case break_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2630 res = (validate_numnodes(tree, 1, "break") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2631 && validate_name(CHILD(tree, 0), "break")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2632 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2633 case continue_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2634 res = (validate_numnodes(tree, 1, "continue") |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2635 && validate_name(CHILD(tree, 0), "continue")); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2636 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2637 case return_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2638 res = validate_return_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2639 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2640 case raise_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2641 res = validate_raise_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2642 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2643 case import_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2644 res = validate_import_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2645 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2646 case global_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2647 res = validate_global_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2648 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2649 case exec_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2650 res = validate_exec_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2651 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2652 case assert_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2653 res = validate_assert_stmt(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2654 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2655 case if_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2656 res = validate_if(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2657 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2658 case while_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2659 res = validate_while(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2660 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2661 case for_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2662 res = validate_for(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2663 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2664 case try_stmt: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2665 res = validate_try(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2666 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2667 case suite: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2668 res = validate_suite(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2669 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2670 /* |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2671 * Expression nodes. |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2672 */ |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2673 case testlist: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2674 res = validate_testlist(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2675 break; |
|
23538
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
2676 case testlist1: |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
2677 res = validate_testlist1(tree); |
|
9e67a0d5705f
Disambiguate the grammar for backtick.
Guido van Rossum <guido@python.org>
parents:
21313
diff
changeset
|
2678 break; |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2679 case test: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2680 res = validate_test(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2681 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2682 case and_test: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2683 res = validate_and_test(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2684 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2685 case not_test: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2686 res = validate_not_test(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2687 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2688 case comparison: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2689 res = validate_comparison(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2690 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2691 case exprlist: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2692 res = validate_exprlist(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2693 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2694 case comp_op: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2695 res = validate_comp_op(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2696 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2697 case expr: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2698 res = validate_expr(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2699 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2700 case xor_expr: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2701 res = validate_xor_expr(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2702 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2703 case and_expr: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2704 res = validate_and_expr(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2705 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2706 case shift_expr: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2707 res = validate_shift_expr(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2708 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2709 case arith_expr: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2710 res = validate_arith_expr(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2711 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2712 case term: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2713 res = validate_term(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2714 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2715 case factor: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2716 res = validate_factor(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2717 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2718 case power: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2719 res = validate_power(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2720 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2721 case atom: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2722 res = validate_atom(tree); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2723 break; |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2724 |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2725 default: |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2726 /* Hopefully never reached! */ |
| 15318 | 2727 err_string("unrecognized node type"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2728 res = 0; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2729 break; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2730 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2731 tree = next; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2732 } |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2733 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2734 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2735 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2736 |
| 4084 | 2737 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2738 validate_expr_tree(node *tree) |
|
3774
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 int res = validate_eval_input(tree); |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2741 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2742 if (!res && !PyErr_Occurred()) |
| 15318 | 2743 err_string("could not validate expression tuple"); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2744 |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2745 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2746 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2747 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2748 |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2749 /* file_input: |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2750 * (NEWLINE | stmt)* ENDMARKER |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2751 */ |
| 4084 | 2752 static int |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2753 validate_file_input(node *tree) |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2754 { |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
2755 int j; |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2756 int nch = NCH(tree) - 1; |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2757 int res = ((nch >= 0) |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2758 && validate_ntype(CHILD(tree, nch), ENDMARKER)); |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2759 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
2760 for (j = 0; res && (j < nch); ++j) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2761 if (TYPE(CHILD(tree, j)) == stmt) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2762 res = validate_stmt(CHILD(tree, j)); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2763 else |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2764 res = validate_newline(CHILD(tree, j)); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2765 } |
|
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
|
2766 /* 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
|
2767 * 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
|
2768 * this, we have some debugging to do. |
|
3774
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2769 */ |
|
4c78d73c5667
New submission by Fred Drake.
Guido van Rossum <guido@python.org>
parents:
3336
diff
changeset
|
2770 if (!res && !PyErr_Occurred()) |
| 15318 | 2771 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
|
2772 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2773 return (res); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2774 } |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2775 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2776 |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2777 static PyObject* |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2778 pickle_constructor = NULL; |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2779 |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2780 |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2781 static PyObject* |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2782 parser__pickler(PyObject *self, PyObject *args) |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2783 { |
| 8196 | 2784 NOTE(ARGUNUSED(self)) |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2785 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
|
2786 PyObject *st = NULL; |
|
11297
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
2787 PyObject *empty_dict = NULL; |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2788 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
2789 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
|
2790 PyObject *newargs; |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2791 PyObject *tuple; |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2792 |
|
11297
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
2793 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
|
2794 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
|
2795 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
|
2796 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
|
2797 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
|
2798 if (tuple != NULL) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2799 result = Py_BuildValue("O(O)", pickle_constructor, tuple); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2800 Py_DECREF(tuple); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2801 } |
|
11297
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
2802 Py_DECREF(empty_dict); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2803 Py_DECREF(newargs); |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2804 } |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2805 finally: |
|
11297
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
2806 Py_XDECREF(empty_dict); |
|
2560236ecedb
parser__pickler(): Don't drop the third argument to
Fred Drake <fdrake@acm.org>
parents:
11266
diff
changeset
|
2807 |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2808 return (result); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2809 } |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2810 |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2811 |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2812 /* 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
|
2813 * 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
|
2814 * 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
|
2815 * 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
|
2816 * inheritance. |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2817 */ |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2818 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
|
2819 {"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
|
2820 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
|
2821 {"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
|
2822 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
|
2823 {"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
|
2824 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
|
2825 {"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
|
2826 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
|
2827 {"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
|
2828 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
|
2829 {"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
|
2830 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
|
2831 {"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
|
2832 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
|
2833 {"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
|
2834 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
|
2835 {"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
|
2836 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
|
2837 {"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
|
2838 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
|
2839 {"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
|
2840 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
|
2841 {"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
|
2842 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
|
2843 {"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
|
2844 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
|
2845 {"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
|
2846 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
|
2847 |
|
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2848 /* 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
|
2849 {"_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
|
2850 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
|
2851 |
| 8196 | 2852 {NULL, NULL, 0, NULL} |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2853 }; |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2854 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2855 |
|
24363
979ff5d0ae07
Replace DL_IMPORT with PyMODINIT_FUNC and remove "/export:init..." link
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
2856 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
|
2857 |
|
979ff5d0ae07
Replace DL_IMPORT with PyMODINIT_FUNC and remove "/export:init..." link
Mark Hammond <mhammond@skippinet.com.au>
parents:
24280
diff
changeset
|
2858 PyMODINIT_FUNC |
| 13692 | 2859 initparser(void) |
|
14214
b5fb175ad528
Update the parser module to support augmented assignment.
Fred Drake <fdrake@acm.org>
parents:
14129
diff
changeset
|
2860 { |
|
19274
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
2861 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
|
2862 |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
2863 PyST_Type.ob_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
|
2864 module = Py_InitModule("parser", parser_functions); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2865 |
|
11266
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
2866 if (parser_error == 0) |
|
c0b86a44a120
Added keyword parameter support to all public interfaces; keyword
Fred Drake <fdrake@acm.org>
parents:
10215
diff
changeset
|
2867 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
|
2868 |
|
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2869 if ((parser_error == 0) |
|
19274
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
2870 || (PyModule_AddObject(module, "ParserError", 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
|
2871 /* 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
|
2872 return; |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2873 } |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
2874 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
|
2875 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
|
2876 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
|
2877 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
|
2878 |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
2879 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
|
2880 parser_copyright_string); |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
2881 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
|
2882 parser_doc_string); |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
2883 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
|
2884 parser_version_string); |
|
3200
8f5ab1a6c914
Fred Drake's new parser module
Guido van Rossum <guido@python.org>
parents:
2150
diff
changeset
|
2885 |
| 18748 | 2886 /* Register to support pickling. |
| 2887 * If this fails, the import of this module will fail because an | |
| 2888 * exception will be raised here; should we clear the exception? | |
| 2889 */ | |
|
19274
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
2890 copyreg = PyImport_ImportModule("copy_reg"); |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
2891 if (copyreg != NULL) { |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2892 PyObject *func, *pickler; |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2893 |
|
19274
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
2894 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
|
2895 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
|
2896 pickler = PyObject_GetAttrString(module, "_pickler"); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2897 Py_XINCREF(pickle_constructor); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2898 if ((func != NULL) && (pickle_constructor != NULL) |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2899 && (pickler != NULL)) { |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2900 PyObject *res; |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2901 |
|
18669
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
2902 res = PyObject_CallFunction(func, "OOO", &PyST_Type, pickler, |
|
6d4a530fe7c1
The syntax trees handled by this module are not "abstract," so take the
Fred Drake <fdrake@acm.org>
parents:
18646
diff
changeset
|
2903 pickle_constructor); |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2904 Py_XDECREF(res); |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2905 } |
|
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2906 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
|
2907 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
|
2908 Py_XDECREF(pickler); |
|
5501958edc36
Use the abstract object interfaces when digging around in module objects
Fred Drake <fdrake@acm.org>
parents:
18748
diff
changeset
|
2909 Py_DECREF(copyreg); |
|
8034
cd3092069f5a
Added support for pickling ast objects.
Fred Drake <fdrake@acm.org>
parents:
7982
diff
changeset
|
2910 } |
|
12416
95e296e67a12
ANSI-fy & de-tabify the source.
Fred Drake <fdrake@acm.org>
parents:
11828
diff
changeset
|
2911 } |
