diff options
-rwxr-xr-x | Parser/asdl_c.py | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py index 21e5044..5f0b89b 100755 --- a/Parser/asdl_c.py +++ b/Parser/asdl_c.py @@ -71,16 +71,20 @@ def reflow_lines(s, depth): def reflow_c_string(s, depth): return '"%s"' % s.replace('\n', '\\n"\n%s"' % (' ' * depth * TABSIZE)) -def is_simple(sum): +def is_simple(sum_type): """Return True if a sum is a simple. - A sum is simple if its types have no fields, e.g. + A sum is simple if it's types have no fields and itself + doesn't have any attributes. Instances of these types are + cached at C level, and they act like singletons when propagating + parser generated nodes into Python level, e.g. unaryop = Invert | Not | UAdd | USub """ - for t in sum.types: - if t.fields: - return False - return True + + return not ( + sum_type.attributes or + any(constructor.fields for constructor in sum_type.types) + ) def asdl_of(name, obj): if isinstance(obj, asdl.Product) or isinstance(obj, asdl.Constructor): |