1.1 --- a/inspector.py Wed Dec 14 16:23:32 2016 +0100
1.2 +++ b/inspector.py Wed Dec 14 16:40:00 2016 +0100
1.3 @@ -294,8 +294,7 @@
1.4 # Constant usage.
1.5
1.6 elif isinstance(n, compiler.ast.Const):
1.7 - typename = n.value.__class__.__name__
1.8 - return self.get_literal_instance(n, get_builtin_type(typename))
1.9 + return self.get_literal_instance(n)
1.10
1.11 elif isinstance(n, compiler.ast.Dict):
1.12 return self.get_literal_instance(n, "dict")
1.13 @@ -1383,30 +1382,32 @@
1.14 ref = self.get_builtin_class(name)
1.15 return self.get_constant_reference(ref, value)
1.16
1.17 - def get_literal_instance(self, n, name):
1.18 + def get_literal_instance(self, n, name=None):
1.19
1.20 - "For node 'n', return a reference to an instance of 'name'."
1.21 + """
1.22 + For node 'n', return a reference to an instance of 'name', or if 'name'
1.23 + is not specified, deduce the type from the value.
1.24 + """
1.25
1.26 # Handle stray None constants (Sliceobj seems to produce them).
1.27
1.28 if name == "NoneType":
1.29 return self.process_name_node(compiler.ast.Name("None"))
1.30
1.31 - # Get a reference to the built-in class.
1.32 -
1.33 - ref = self.get_builtin_class(name)
1.34 -
1.35 # Obtain the details of the literal itself.
1.36 # An alias to the type is generated for sequences.
1.37
1.38 if name in ("dict", "list", "tuple"):
1.39 + ref = self.get_builtin_class(name)
1.40 self.set_special_literal(name, ref)
1.41 return self.process_literal_sequence_node(n, name, ref, LiteralSequenceRef)
1.42
1.43 # Constant values are independently recorded.
1.44
1.45 else:
1.46 - value = self.get_constant_value(n.value)
1.47 + value, typename = self.get_constant_value(n.value, n.literal)
1.48 + name = get_builtin_type(typename)
1.49 + ref = self.get_builtin_class(name)
1.50 return self.get_constant_reference(ref, value)
1.51
1.52 # Special names.