1.1 --- a/translator.py Wed Dec 14 16:23:32 2016 +0100
1.2 +++ b/translator.py Wed Dec 14 16:40:00 2016 +0100
1.3 @@ -415,23 +415,25 @@
1.4
1.5 # Constant referencing.
1.6
1.7 - def get_literal_instance(self, n, name):
1.8 + def get_literal_instance(self, n, name=None):
1.9
1.10 """
1.11 - For node 'n', return a reference for the type of the given 'name'.
1.12 + For node 'n', return a reference for the type of the given 'name', or if
1.13 + 'name' is not specified, deduce the type from the value.
1.14 """
1.15
1.16 # Handle stray None constants (Sliceobj seems to produce them).
1.17
1.18 - if name == "NoneType":
1.19 + if name is None and n.value is None:
1.20 return self.process_name_node(compiler.ast.Name("None"))
1.21
1.22 - ref = self.get_builtin_class(name)
1.23 -
1.24 if name in ("dict", "list", "tuple"):
1.25 + ref = self.get_builtin_class(name)
1.26 return self.process_literal_sequence_node(n, name, ref, TrLiteralSequenceRef)
1.27 else:
1.28 - value = self.get_constant_value(n.value)
1.29 + value, typename = self.get_constant_value(n.value, n.literal)
1.30 + name = get_builtin_type(typename)
1.31 + ref = self.get_builtin_class(name)
1.32 value_type = ref.get_origin()
1.33
1.34 path = self.get_namespace_path()
1.35 @@ -607,7 +609,7 @@
1.36 # Constant usage.
1.37
1.38 elif isinstance(n, compiler.ast.Const):
1.39 - return self.get_literal_instance(n, n.value.__class__.__name__)
1.40 + return self.get_literal_instance(n)
1.41
1.42 elif isinstance(n, compiler.ast.Dict):
1.43 return self.get_literal_instance(n, "dict")