1.1 --- a/micropython/__init__.py Wed Oct 17 01:00:30 2007 +0200
1.2 +++ b/micropython/__init__.py Wed Oct 17 01:31:33 2007 +0200
1.3 @@ -52,7 +52,7 @@
1.4
1.5 self.path = path or [os.getcwd()]
1.6 self.modules = {}
1.7 - self.loaded = set()
1.8 + self.loading = set()
1.9
1.10 def get_modules(self):
1.11
1.12 @@ -143,7 +143,8 @@
1.13 """
1.14
1.15 print "Loading", name
1.16 - if self.modules.has_key(name) and self.modules[name] in self.loaded:
1.17 + if self.modules.has_key(name) and self.modules[name].loaded:
1.18 + print "Cached", name
1.19 return self.modules[name]
1.20
1.21 # Split the name into path components, and try to find the uppermost in
1.22 @@ -152,21 +153,20 @@
1.23 path = name.split(".")
1.24 m = self.find_in_path(path[0])
1.25 if not m:
1.26 + print "Not found", path[0]
1.27 return None # NOTE: Import error.
1.28 d, filename = m
1.29
1.30 # Either acquire a reference to an already-imported module, or load the
1.31 # module from a file.
1.32
1.33 - if self.modules.has_key(path[0]):
1.34 - top = module = self.modules[path[0]]
1.35 - else:
1.36 - top = module = self.load_from_file(filename, path[0])
1.37 + top = module = self.load_from_file(filename, path[0])
1.38
1.39 # For hierarchical names, traverse each path component...
1.40
1.41 if len(path) > 1:
1.42 if not d:
1.43 + print "No package", filename
1.44 return None # NOTE: Import error (package not found).
1.45 else:
1.46 self.add_submodules(d, module)
1.47 @@ -179,16 +179,14 @@
1.48
1.49 m = self.find(d, p)
1.50 if not m:
1.51 + print "Not found", p
1.52 return None # NOTE: Import error.
1.53 d, filename = m
1.54 module_name = ".".join(path_so_far)
1.55
1.56 # Either reference an imported module or load one from a file.
1.57
1.58 - if self.modules.has_key(module_name):
1.59 - submodule = self.modules[module_name]
1.60 - else:
1.61 - submodule = self.load_from_file(filename, module_name)
1.62 + submodule = self.load_from_file(filename, module_name)
1.63
1.64 if d:
1.65 self.add_submodules(d, module)
1.66 @@ -215,15 +213,17 @@
1.67 module_name = "__main__"
1.68
1.69 module = self.add_module(module_name)
1.70 -
1.71 - print "Parsing", name
1.72 - module.parse(name)
1.73 - print "Done", name
1.74 + if not module.loaded and module not in self.loading:
1.75 + self.loading.add(module)
1.76 + print "Parsing", name
1.77 + module.parse(name)
1.78 + print "Done", name
1.79 + self.loading.remove(module)
1.80 + module.loaded = 1
1.81
1.82 # Record the module.
1.83
1.84 - self.loaded.add(module)
1.85 - #print "Loaded", module_name, "with namespace", module.namespace.keys()
1.86 + print "Loaded", module_name #, "with namespace", module.namespace.keys()
1.87 return module
1.88
1.89 def add_module(self, module_name):