MCPcopy Create free account
hub / github.com/GDRETools/gdsdecomp / generate_bytecode_versions_cpp

Function generate_bytecode_versions_cpp

bytecode_generator.py:708–768  ·  view source on GitHub ↗
(dir: Path, bytecode_classes: list[BytecodeClass])

Source from the content-addressed store, hash-verified

706
707
708def generate_bytecode_versions_cpp(dir: Path, bytecode_classes: list[BytecodeClass]) -> None:
709 new_dir = dir
710 # ensure the directory exists
711 code = ""
712 with open(our_dir / "misc" / "bytecode_versions.cpp.inc", "r") as f:
713 code = f.read()
714 if not code:
715 raise Exception("Failed to read bytecode_versions.cpp.inc")
716 if not new_dir.exists():
717 new_dir.mkdir()
718 new_file_cpp = new_dir / ("bytecode_versions.cpp")
719 code = code.replace(PRELUDE_REPLACE, PRELUDE)
720
721 header_str = ""
722 for bytecode_class in bytecode_classes:
723 header_str += f'#include "bytecode/{bytecode_class.file_stem}.h"\n'
724
725 code = code.replace(BYTECODE_HEADERS, header_str)
726
727 bytecode_classdb_register = ""
728 for bytecode_class in bytecode_classes:
729 bytecode_classdb_register += "\tClassDB::register_class<" + bytecode_class.class_name + ">();\n"
730 code = code.replace(BYTECODE_CLASSDB_REGISTER, bytecode_classdb_register)
731
732 bytecode_case_statements = ""
733 for bytecode_class in bytecode_classes:
734 bytecode_case_statements += (
735 "\t\tcase 0x" + bytecode_class.bytecode_rev + ": return memnew(" + bytecode_class.class_name + ");\n"
736 )
737 code = code.replace(BYTECODE_CASE_STATEMENTS, bytecode_case_statements)
738
739 version_section = ""
740 # "4.3.0 release (77af6ca / 2024-02-09 / Bytecode version: 100) - initial version"
741 ver_format = '\t{{ 0x{commit}, "{name}", {bytecode_version}, {is_dev}, "{ver}", "{max_ver}", 0x{parent} }},\n'
742 name_format = "{ver} ({commit} / {date} / Bytecode version: {bytecode_version}) - {description}"
743 for bytecode_class in bytecode_classes:
744 name_tab = "\t" if bytecode_class.is_dev else ""
745 line = ver_format.format(
746 commit=bytecode_class.bytecode_rev,
747 name=(
748 name_tab
749 + name_format.format(
750 ver=bytecode_class.engine_version,
751 commit=bytecode_class.bytecode_rev,
752 date=bytecode_class.date,
753 bytecode_version=bytecode_class.bytecode_version,
754 description=generate_bytecode_description_string(bytecode_class),
755 )
756 ),
757 bytecode_version=bytecode_class.bytecode_version,
758 is_dev=str(bytecode_class.is_dev).lower(),
759 ver=bytecode_class.engine_version,
760 max_ver=bytecode_class.max_engine_version if bytecode_class.max_engine_version else "",
761 parent=bytecode_class.parent if bytecode_class.parent else 0,
762 )
763 version_section += line
764 version_section += ""
765 code = code.replace(BYTECODE_DECOMP_VERSIONS, version_section)

Callers 1

Tested by

no test coverage detected