12 |
12 |
13 import ast |
13 import ast |
14 import sys |
14 import sys |
15 from enum import IntEnum, auto |
15 from enum import IntEnum, auto |
16 from contextlib import contextmanager, nullcontext |
16 from contextlib import contextmanager, nullcontext |
|
17 |
|
18 import AstUtilities |
17 |
19 |
18 # Large float and imaginary literals get turned into infinities in the AST. |
20 # Large float and imaginary literals get turned into infinities in the AST. |
19 # We unparse those infinities to INFSTR. |
21 # We unparse those infinities to INFSTR. |
20 _INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1) |
22 _INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1) |
21 |
23 |
596 self._write_str_avoiding_backslashes(value) |
598 self._write_str_avoiding_backslashes(value) |
597 else: |
599 else: |
598 self.write(repr(value)) |
600 self.write(repr(value)) |
599 |
601 |
600 def visit_Constant(self, node): |
602 def visit_Constant(self, node): |
601 value = node.value |
603 value = AstUtilities.getValue(node) |
602 if isinstance(value, tuple): |
604 if isinstance(value, tuple): |
603 with self.delimit("(", ")"): |
605 with self.delimit("(", ")"): |
604 self.items_view(self._write_constant, value) |
606 self.items_view(self._write_constant, value) |
605 elif value is ...: |
607 elif value is ...: |
606 self.write("...") |
608 self.write("...") |
607 else: |
609 else: |
608 if node.kind == "u": |
610 if hasattr(node, "kind") and node.kind == "u": |
609 self.write("u") |
611 self.write("u") |
610 self._write_constant(node.value) |
612 self._write_constant(value) |
|
613 |
|
614 visit_NameConstant = visit_Constant |
|
615 visit_Num = visit_Constant |
|
616 visit_Str = visit_Constant |
|
617 visit_Bytes = visit_Constant |
|
618 visit_Ellipsis = visit_Constant |
611 |
619 |
612 def visit_List(self, node): |
620 def visit_List(self, node): |
613 with self.delimit("[", "]"): |
621 with self.delimit("[", "]"): |
614 self.interleave(lambda: self.write(", "), self.traverse, node.elts) |
622 self.interleave(lambda: self.write(", "), self.traverse, node.elts) |
615 |
623 |