aboutsummaryrefslogtreecommitdiff
path: root/Parser
diff options
context:
space:
mode:
authorBatuhan Taskaya <batuhanosmantaskaya@gmail.com>2020-10-10 20:14:59 +0300
committerGitHub <noreply@github.com>2020-10-10 10:14:59 -0700
commit02a1603f918b9862e164e4fd050c505b16bc9f57 (patch)
tree89edf08ba59a6f30fd436375b7c24ce5402b71d0 /Parser
parentbpo-41986: Add Py_FileSystemDefaultEncodeErrors and Py_UTF8Mode back to limit... (diff)
downloadcpython-02a1603f918b9862e164e4fd050c505b16bc9f57.tar.gz
cpython-02a1603f918b9862e164e4fd050c505b16bc9f57.tar.bz2
cpython-02a1603f918b9862e164e4fd050c505b16bc9f57.zip
bpo-42000: Cleanup the AST related C-code (GH-22641)
- Use the proper asdl sequence when creating empty arguments - Remove reduntant casts (thanks to new typed asdl_sequences) - Remove MarshalPrototypeVisitor and some utilities from asdl generator - Fix the header of `Python/ast.c` (kept from pgen times) Automerge-Triggered-By: @pablogsal
Diffstat (limited to 'Parser')
-rwxr-xr-xParser/asdl_c.py42
-rw-r--r--Parser/pegen.c2
2 files changed, 1 insertions, 43 deletions
diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py
index 242eccf3d3..481261cd85 100755
--- a/Parser/asdl_c.py
+++ b/Parser/asdl_c.py
@@ -618,16 +618,6 @@ class Obj2ModVisitor(PickleVisitor):
self.emit("}", depth)
-class MarshalPrototypeVisitor(PickleVisitor):
-
- def prototype(self, sum, name):
- ctype = get_c_type(name)
- self.emit("static int marshal_write_%s(PyObject **, int *, %s);"
- % (name, ctype), 0)
-
- visitProduct = visitSum = prototype
-
-
class SequenceConstructorVisitor(EmitVisitor):
def visitModule(self, mod):
for dfn in mod.dfns:
@@ -1167,25 +1157,6 @@ PyInit__ast(void)
self.emit("Py_INCREF(state->%s_type);" % name, 1)
-_SPECIALIZED_SEQUENCES = ('stmt', 'expr')
-
-def find_sequence(fields, doing_specialization):
- """Return True if any field uses a sequence."""
- for f in fields:
- if f.seq:
- if not doing_specialization:
- return True
- if str(f.type) not in _SPECIALIZED_SEQUENCES:
- return True
- return False
-
-def has_sequence(types, doing_specialization):
- for t in types:
- if find_sequence(t.fields, doing_specialization):
- return True
- return False
-
-
class StaticVisitor(PickleVisitor):
CODE = '''Very simple, always emit this static code. Override CODE'''
@@ -1283,18 +1254,6 @@ class ObjVisitor(PickleVisitor):
emit("goto failed;", 1)
emit("Py_DECREF(value);", 0)
- def emitSeq(self, field, value, depth, emit):
- emit("seq = %s;" % value, 0)
- emit("n = asdl_seq_LEN(seq);", 0)
- emit("value = PyList_New(n);", 0)
- emit("if (!value) goto failed;", 0)
- emit("for (i = 0; i < n; i++) {", 0)
- self.set("value", field, "asdl_seq_GET(seq, i)", depth + 1)
- emit("if (!value1) goto failed;", 1)
- emit("PyList_SET_ITEM(value, i, value1);", 1)
- emit("value1 = NULL;", 1)
- emit("}", 0)
-
def set(self, field, value, depth):
if field.seq:
# XXX should really check for is_simple, but that requires a symbol table
@@ -1313,7 +1272,6 @@ class ObjVisitor(PickleVisitor):
else:
self.emit("value = ast2obj_list(state, (asdl_seq*)%s, ast2obj_%s);" % (value, field.type), depth)
else:
- ctype = get_c_type(field.type)
self.emit("value = ast2obj_%s(state, %s);" % (field.type, value), depth, reflow=False)
diff --git a/Parser/pegen.c b/Parser/pegen.c
index 1de495eaf3..efa5ed9f28 100644
--- a/Parser/pegen.c
+++ b/Parser/pegen.c
@@ -1897,7 +1897,7 @@ _PyPegen_empty_arguments(Parser *p)
return NULL;
}
- return _Py_arguments(posonlyargs, posargs, NULL, kwonlyargs, kwdefaults, NULL, kwdefaults,
+ return _Py_arguments(posonlyargs, posargs, NULL, kwonlyargs, kwdefaults, NULL, posdefaults,
p->arena);
}