import ast def process(node): #TODO: node.doc #print ast.diag(node) moduleName = ast.getModuleName() moduleInitSubName = "_" + moduleName + "__init__main" ast.pushContainer() ast.pushNamespace( moduleName ) ast.output( ".namespace [\"%s\"]" % ( ast.printNamespace() ) ) ast.push() ast.setIsNamespace( moduleName ) ast.setIsModuleScope( moduleName ) ast.output( ".sub %s" % ( moduleInitSubName ) ) ast.addSymbolIfNotPresent( moduleName ) namespaceReg = ast.nextPRegister() ast.outputInBlock( "new %s, \"PyModule\"" % ( namespaceReg ) ) ast.outputInBlock( "%s = %s" % ( moduleName, namespaceReg ) ) ast.outputInBlock( "store_global \"%s\", %s " % ( moduleName, namespaceReg ) ) ast.outputInBlock( "new_pad -1" ) ast.execute(node.node) ast.output( ".end" ) ast.pop() moduleStarImportFunction = "_" + moduleName + "_star_import" ast.push() ast.output( ".sub %s" % ( moduleStarImportFunction ) ) fromTempRegister = ast.nextPRegister() for importName in ast.getModuleMembers( 1 ): #ast.outputInBlock( "find_lex %s, \"%s\"" % ( fromTempRegister, ast.printNamespace() + "::" + importName ) ) #ast.outputInBlock( "find_name %s, \"%s\"" % ( fromTempRegister, ast.printNamespace() + "::" + importName ) ) ast.outputInBlock( "find_global %s, \"%s\", \"%s\"" % ( fromTempRegister, ast.printNamespace(), importName ) ) ast.outputInBlock( "store_lex -2, \"%s\", %s" % ( importName, fromTempRegister ) ) ast.output( ".end" ) ast.pop() ast.popNamespace() ast.output( ".namespace [\"%s\"]" % ( ast.printNamespace() ) ) ast.pop() return moduleInitSubName