javaclass

Changeset

70:c086884f142c
2004-11-21 Paul Boddie raw files shortlog changelog graph Added importing of external names. Changed the invocation of class initialisation functions to occur within the current global namespace.
classhook.py (file)
     1.1 --- a/classhook.py	Sun Nov 21 23:21:30 2004 +0100
     1.2 +++ b/classhook.py	Sun Nov 21 23:22:28 2004 +0100
     1.3 @@ -151,15 +151,26 @@
     1.4  
     1.5          for class_file in class_files:
     1.6              translator = bytecode.ClassTranslator(class_file)
     1.7 -            cls = translator.process(global_names)
     1.8 +            cls, external_names = translator.process(global_names)
     1.9              module.__dict__[cls.__name__] = cls
    1.10              classes.append((cls, class_file))
    1.11  
    1.12 +            # Import the local names.
    1.13 +
    1.14 +            for external_name in external_names:
    1.15 +                external_name_parts = external_name.split(".")
    1.16 +                if len(external_name_parts) > 1:
    1.17 +                    external_module_name = ".".join(external_name_parts[:-1])
    1.18 +                    print "* Importing", external_module_name
    1.19 +                    obj = __import__(external_module_name, global_names, {}, [])
    1.20 +                    global_names[external_name_parts[0]] = obj
    1.21 +
    1.22          # Finally, call __clinit__ methods for all relevant classes.
    1.23  
    1.24          for cls, class_file in classes:
    1.25 +            print "**", cls, class_file
    1.26              if hasattr(cls, "__clinit__"):
    1.27 -                cls.__clinit__()
    1.28 +                eval(cls.__clinit__.func_code, global_names)
    1.29  
    1.30          return module
    1.31