1.1 --- a/modules.py Tue Sep 06 17:18:11 2016 +0200
1.2 +++ b/modules.py Tue Sep 06 23:38:05 2016 +0200
1.3 @@ -37,6 +37,7 @@
1.4
1.5 self.imports = set()
1.6 self.required = set()
1.7 + self.deferred = []
1.8
1.9 # Global name information.
1.10
1.11 @@ -207,7 +208,17 @@
1.12
1.13 "Set an object with the given 'name' and the given 'value'."
1.14
1.15 + # Decode any string value, with a new reference being returned even
1.16 + # given a provided reference.
1.17 +
1.18 ref = decode_reference(value, name)
1.19 + self.add_deferred(ref)
1.20 + self._set_object(name, ref)
1.21 +
1.22 + def _set_object(self, name, ref):
1.23 +
1.24 + # Determine how the object properties will be defined.
1.25 +
1.26 multiple = self.objects.has_key(name) and self.objects[name].get_kind() != ref.get_kind()
1.27 self.importer.objects[name] = self.objects[name] = multiple and ref.as_var() or ref
1.28
1.29 @@ -266,7 +277,9 @@
1.30 "Return a reference to the built-in with the given 'name'."
1.31
1.32 self.queue_module("__builtins__")
1.33 - return Reference("<depends>", "__builtins__.%s" % name)
1.34 + ref = Reference("<depends>", "__builtins__.%s" % name)
1.35 + self.deferred.append(ref)
1.36 + return ref
1.37
1.38 def get_builtin_class(self, name):
1.39
1.40 @@ -289,7 +302,9 @@
1.41 if self.objects.has_key(path):
1.42 return self.objects[path]
1.43 else:
1.44 - return Reference("<depends>", path)
1.45 + ref = Reference("<depends>", path)
1.46 + self.deferred.append(ref)
1.47 + return ref
1.48
1.49 def import_name_from_module(self, name, module_name):
1.50
1.51 @@ -299,6 +314,13 @@
1.52 self.queue_module(module_name)
1.53 return Reference("<depends>", "%s.%s" % (module_name, name))
1.54
1.55 + def add_deferred(self, ref):
1.56 +
1.57 + "Record 'ref' as a deferred reference."
1.58 +
1.59 + if ref.has_kind("<depends>"):
1.60 + self.deferred.append(ref)
1.61 +
1.62 class CachedModule(BasicModule):
1.63
1.64 "A cached module."
1.65 @@ -306,6 +328,16 @@
1.66 def __repr__(self):
1.67 return "CachedModule(%r, %r)" % (self.name, self.importer)
1.68
1.69 + def set_object(self, name, value=None):
1.70 +
1.71 + "Set an object with the given 'name' and the given 'value'."
1.72 +
1.73 + # Decode any string value, with a new reference being returned even
1.74 + # given a provided reference.
1.75 +
1.76 + ref = decode_reference(value, name)
1.77 + self._set_object(name, ref)
1.78 +
1.79 def to_cache(self, filename):
1.80
1.81 "Not actually writing the module back to 'filename'."