Ejemplo n.º 1
0
    def generate_code(analyser: Analyser) -> bytes:
        """
        Generates the Neo VM bytecode using of the analysed Python code

        :param analyser: semantic analyser it tge Python code
        :return: the Neo VM bytecode
        """
        VMCodeMapping.reset()
        from boa3.compiler.codegeneratorvisitor import VisitorCodeGenerator

        generator = CodeGenerator(analyser.symbol_table)
        visitor = VisitorCodeGenerator(generator)
        visitor.visit(analyser.ast_tree)

        analyser.symbol_table.update(generator.symbol_table)
        generator.initialized_static_fields = True

        for symbol in [
                symbol for symbol in analyser.symbol_table.values()
                if isinstance(symbol, Import)
        ]:
            generator.symbol_table.update(symbol.all_symbols)
            visitor.visit(symbol.ast)
        return generator.bytecode
Ejemplo n.º 2
0
 def build_code_generator(self) -> CodeGenerator:
     from boa3.compiler.vmcodemapping import VMCodeMapping
     VMCodeMapping.reset()
     return CodeGenerator({})