Message 286588 - Python tracker (original) (raw)

We have already Constant and NameConstant. So it seems there are no need for None, Bool, TupleConst, SetConst nodes. Yes, Constant is Victor's version of Lit.

I think converting Num, Str, Bytes, Ellipsis into Constant in folding stage is easier than fixing all tests. Fixing tests was fairly easy the last time. I think the question is what changes to the public API of AST are acceptable.

Take docstring before constant folding isn't enough? (I'm sorry if I'm wrong. I haven't tried it yet.) It may be doable, but seems very messy. Instead of a clean pipeline text -> AST -> Optimized AST -> bytecode, you have to collect all docstrings, and pass them around in a side structure.

With the current code there can be a simple fix. If original string literals are Str, but constant-folded string constants are Constant, only treat Strs as docstrings. Then the optimizer needs a change to always preserve Str as a first statement in a function/module, and that's it. I still think that having a dedicated docstring attribute in AST is cleaner, though.

They are all NameConstant already. Keep in mind this patch is 6 years old :)