Files
ViperC/App/lib/core/Gen/GenApi.vp
T

588 lines
27 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import t, c
from stdint import *
import ast
import llvmlite
import memhub
import lib.core.Gen.GenTypes as GenTypes
import lib.core.Gen.Generator as Generator
import lib.core.Gen.Translator as HT
import lib.core.Gen.Generator as Generator
# ============================================================
# GenApi - 管线/保留文件访问 Gen 的模块级委托入口(去除 Handles 层)
#
# 由脚本从 Gen 子对象同名方法自动生成:签名取真源方法(含参数类型注解),
# 函数体经 _g_gen 单例调用 gen 子对象。main/BuildPipeline 注入 _g_gen。
# ============================================================
# 全局 gen 单例(main/BuildPipeline 创建 gen 后注入)
_g_gen: rowptr[Generator.Generator] = None
# ---------------- set_temp_dir(委托 TypeGenBase.set_temp_dir) ----------------
def set_temp_dir(temp_dir: str) -> None:
"""委托到 gen.set_temp_dir(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.TypeGenBase.set_temp_dir(temp_dir)
# ---------------- set_current_file_imports(委托 ImportsGenMixin.set_current_file) ----------------
def set_current_file_imports(file_path: str) -> None:
"""委托到 gen.set_current_file(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.ImportsGen.set_current_file(file_path)
# ---------------- set_current_file_type(委托 TypeGenResolve.set_current_file) ----------------
def set_current_file_type(file_path: str) -> None:
"""委托到 gen.set_current_file(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.TypeGenResolve.set_current_file(file_path)
# ---------------- set_current_module_sha1(委托 TypeGenBase.set_current_module_sha1) ----------------
def set_current_module_sha1(sha1: str) -> None:
"""委托到 gen.set_current_module_sha1(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.TypeGenBase.set_current_module_sha1(sha1)
# ---------------- clear_trace(委托 TypeGenBase.clear_trace) ----------------
def clear_trace() -> None:
"""委托到 gen.clear_trace(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.TypeGenBase.clear_trace()
# ---------------- clear_cdefine_constants(委托 TypeGenCDef.clear_cdefine_constants) ----------------
def clear_cdefine_constants() -> None:
"""委托到 gen.clear_cdefine_constants(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.TypeGenCDef.clear_cdefine_constants()
# ---------------- clear_ctypedefs(委托 TypeGenCType.clear_ctypedefs) ----------------
def clear_ctypedefs() -> None:
"""委托到 gen.clear_ctypedefs(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.TypeGenCType.clear_ctypedefs()
# ---------------- RegisterCTypedefFromSource(委托 TypeGenCType.register_ctypedef_from_source) ----------------
def RegisterCTypedefFromSource(pool: memhub.MemBuddy | t.CPtr, src: str) -> int:
"""委托到 gen.register_ctypedef_from_source(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.TypeGenCType.register_ctypedef_from_source(pool, src)
return 0
# ---------------- dump_parse_traceback(委托 TypeGenErr.dump_parse_traceback) ----------------
def dump_parse_traceback(file_path: str) -> None:
"""委托到 gen.dump_parse_traceback(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.TypeGenErr.dump_parse_traceback(file_path)
# ---------------- map_t_type(委托 TypeGenResolve.map_t_type) ----------------
def map_t_type(pool: memhub.MemBuddy | t.CPtr, type_name: str) -> llvmlite.LLVMType | t.CPtr:
"""委托到 gen.map_t_type(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.TypeGenResolve.map_t_type(pool, type_name)
return None
# ---------------- resolve_typedef_or_map(委托 TypeGenResolve.resolve_typedef_or_map) ----------------
def resolve_typedef_or_map(pool: memhub.MemBuddy | t.CPtr,
name: str,
imported_modules: str,
from_imports: str,
trans: HT.Translator | t.CPtr = None) -> llvmlite.LLVMType | t.CPtr:
"""委托到 gen.resolve_typedef_or_map(CTypedef 动态表优先,miss 回退 map_t_type)"""
if _g_gen is not None:
return _g_gen.TypeGenResolve.resolve_typedef_or_map(pool, name, imported_modules, from_imports, trans)
return None
# ---------------- infer_external_func_ret_ty(委托 CallGenLib._infer_external_func_ret_ty) ----------------
def infer_external_func_ret_ty(pool: memhub.MemBuddy | t.CPtr,
func_name: str) -> llvmlite.LLVMType | t.CPtr:
"""委托到 gen.CallGenLib._infer_external_func_ret_ty(外部函数返回类型白名单)
vpi 注入 extern declare 时返回类型解析 miss 的兜底:FindFirstFileA/
GetStdHandle 等 Win32 HANDLE 返回函数 → i8*,避免默认 i32/void 导致
声明签名错误(运行期 FindFirstFileA 句柄丢失 → 文件存在性判断失效根因)。
fatal_if_unknown=0:白名单未命中返回默认 i32(不 fail-fast,注入上下文
无法收敛判断交给调用侧)。
"""
if _g_gen is not None:
return _g_gen.CallGenLib._infer_external_func_ret_ty(pool, func_name, None, 0)
return None
# ---------------- get_current_file(委托 TypeGenResolve.get_current_file) ----------------
def get_current_file() -> str:
"""委托到 gen.get_current_file(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.TypeGenResolve.get_current_file()
return None
# ---------------- _is_ctypedef_annotation(委托 TypeGenCType._is_ctypedef_annotation) ----------------
def _is_ctypedef_annotation(annotation: ast.AST | t.CPtr) -> int:
"""委托到 gen._is_ctypedef_annotation(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.TypeGenCType._is_ctypedef_annotation(annotation)
return 0
# ---------------- resolve_annotation_type(委托 TypeGenResolve.resolve_annotation_type) ----------------
def resolve_annotation_type(pool: memhub.MemBuddy | t.CPtr, node: ast.AST | t.CPtr, imported_modules: str, from_imports: str, trans: HT.Translator | t.CPtr = None, depth: int = 0) -> llvmlite.LLVMType | t.CPtr:
"""委托到 gen.resolve_annotation_type(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.TypeGenResolve.resolve_annotation_type(pool, node, imported_modules, from_imports, trans, depth)
return None
# ---------------- has_decorator_marker(委托 TypeGenErr.has_decorator_marker) ----------------
def has_decorator_marker(node: ast.AST | t.CPtr, marker_name: str,
depth: int = 0) -> int:
"""委托到 gen.has_decorator_marker(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.TypeGenErr.has_decorator_marker(node, marker_name, depth)
return 0
# ---------------- _get_type_name_from_annotation(委托 TypeGenResolve._get_type_name_from_annotation) ----------------
def _get_type_name_from_annotation(pool: memhub.MemBuddy | t.CPtr, node: ast.AST | t.CPtr) -> str:
"""委托到 gen._get_type_name_from_annotation(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.TypeGenResolve._get_type_name_from_annotation(pool, node)
return None
# ---------------- register_ctypedef(委托 TypeGenCType.register_ctypedef) ----------------
def register_ctypedef(pool: memhub.MemBuddy | t.CPtr, name: str, type_str: str):
"""委托到 gen.register_ctypedef(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.TypeGenCType.register_ctypedef(pool, name, type_str)
# ---------------- lookup_cdefine_constant(委托 TypeGenCDef.lookup_cdefine_constant) ----------------
def lookup_cdefine_constant(name: str) -> int64:
"""委托到 gen.lookup_cdefine_constant(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.TypeGenCDef.lookup_cdefine_constant(name)
return 0
# ---------------- is_cdefine_found(委托 TypeGenCDef.is_cdefine_found) ----------------
def is_cdefine_found() -> int:
"""委托到 gen.is_cdefine_found(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.TypeGenCDef.is_cdefine_found()
return 0
# ---------------- register_cdefine_constant(委托 TypeGenCDef.register_cdefine_constant) ----------------
def register_cdefine_constant(pool: memhub.MemBuddy | t.CPtr,
name: str, value: int64):
"""委托到 gen.register_cdefine_constant(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.TypeGenCDef.register_cdefine_constant(pool, name, value)
# ---------------- register_cdefine_double(委托 TypeGenCDef.register_cdefine_double) ----------------
def register_cdefine_double(pool: memhub.MemBuddy | t.CPtr,
name: str, value: double):
"""委托到 gen.register_cdefine_double(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.TypeGenCDef.register_cdefine_double(pool, name, value)
# ---------------- is_cdefine_annotation(委托 AssignGenMixin.is_cdefine_annotation) ----------------
def is_cdefine_annotation(annot: ast.AST | t.CPtr) -> int:
"""委托到 gen.is_cdefine_annotation(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.AssignGen.is_cdefine_annotation(annot)
return 0
# ---------------- extract_cdefine_int_value(委托 AssignGenMixin.extract_cdefine_int_value) ----------------
def extract_cdefine_int_value(val_node: ast.AST | t.CPtr) -> int64:
"""委托到 gen.extract_cdefine_int_value(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.AssignGen.extract_cdefine_int_value(val_node)
return 0
# ---------------- push_trace(委托 TypeGenBase.push_trace) ----------------
def push_trace(file_name: str, lineno: int, col_start: int = 0, col_end: int = 0):
"""委托到 gen.push_trace(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.TypeGenBase.push_trace(file_name, lineno, col_start, col_end)
# ---------------- pop_trace(委托 TypeGenBase.pop_trace) ----------------
def pop_trace():
"""委托到 gen.pop_trace(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.TypeGenBase.pop_trace()
# ---------------- get_temp_dir(委托 TypeGenBase.get_temp_dir) ----------------
def get_temp_dir() -> str:
"""委托到 gen.get_temp_dir(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.TypeGenBase.get_temp_dir()
return None
# ---------------- reset_visible_structs(委托 StructGenMixin.reset_visible_structs) ----------------
def reset_visible_structs(pool: memhub.MemBuddy | t.CPtr, strict: int):
"""委托到 gen.reset_visible_structs(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.StructGen.reset_visible_structs(pool, strict)
# ---------------- set_stdlib_alloc(委托 StructGenMixin.set_stdlib_alloc) ----------------
def set_stdlib_alloc(flag: int):
"""委托到 gen.set_stdlib_alloc(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.StructGen.set_stdlib_alloc(flag)
# ---------------- get_struct_count(委托 StructGenMixin.get_struct_count) ----------------
def get_struct_count() -> int:
"""委托到 gen.get_struct_count(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.StructGen.get_struct_count()
return 0
# ---------------- reset_module_methods_emitted(委托 StructGenMixin.reset_module_methods_emitted) ----------------
def reset_module_methods_emitted(sha1: str) -> int:
"""委托到 gen.reset_module_methods_emitted(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.StructGen.reset_module_methods_emitted(sha1)
return 0
# ---------------- get_struct_type(委托 StructGenMixin.get_struct_type) ----------------
def get_struct_type(class_name: str) -> llvmlite.LLVMType | t.CPtr:
"""委托到 gen.get_struct_type(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.StructGen.get_struct_type(class_name)
return None
# ---------------- get_enum_base_type(委托 StmtGenDeclMixin.get_enum_base_type) ----------------
def get_enum_base_type(enum_name: str) -> llvmlite.LLVMType | t.CPtr:
"""委托到 gen.get_enum_base_type(原 Handles 壳)
枚举(t.CEnum)注册在独立的 EnumTable(EnumEntry),不进 StructTable,
get_struct_type 查不到。vpi 返回注解如 "types.FRESULT" 解析时 struct
落空必须回退枚举表取 BaseTy(通常 i32),否则跨模块函数返回类型
无法精确获取 → text.ll 缺失(依赖环)时永久 pending(Phase A 死锁根因)。
"""
if _g_gen is not None:
return _g_gen.StmtGenDecl.get_enum_base_type(enum_name)
return None
# ---------------- add_visible_struct(委托 StructGenMixin.add_visible_struct) ----------------
def add_visible_struct(pool: memhub.MemBuddy | t.CPtr, name: str):
"""委托到 gen.add_visible_struct(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.StructGen.add_visible_struct(pool, name)
# ---------------- find_struct_by_module(委托 StructGenMixin.find_struct_by_module) ----------------
def find_struct_by_module(name: str, sha1: str) -> GenTypes.StructEntry | t.CPtr:
"""委托到 gen.find_struct_by_module(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.StructGen.find_struct_by_module(name, sha1)
return None
# ---------------- find_struct_by_type(委托 StructGenMixin.find_struct_by_type) ----------------
def find_struct_by_type(struct_ty: llvmlite.LLVMType | t.CPtr) -> GenTypes.StructEntry | t.CPtr:
"""委托到 gen.find_struct_by_type(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.StructGen.find_struct_by_type(struct_ty)
return None
# ---------------- register_struct(委托 StructGenMixin.register_struct) ----------------
def register_struct(pool: memhub.MemBuddy | t.CPtr,
name: str,
struct_ty: llvmlite.LLVMType | t.CPtr,
sha1: str = None) -> GenTypes.StructEntry | t.CPtr:
"""委托到 gen.register_struct(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.StructGen.register_struct(pool, name, struct_ty, sha1)
return None
# ---------------- add_field(委托 StructGenMixin.add_field) ----------------
def add_field(pool: memhub.MemBuddy | t.CPtr,
struct_entry: GenTypes.StructEntry | t.CPtr,
field_name: str,
field_ty: llvmlite.LLVMType | t.CPtr) -> int:
"""委托到 gen.add_field(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.StructGen.add_field(pool, struct_entry, field_name, field_ty)
return -1
# ---------------- register_struct_alias(委托 StructGenMixin.register_struct_alias) ----------------
def register_struct_alias(pool: memhub.MemBuddy | t.CPtr,
name: str,
sha1: str,
src_entry: GenTypes.StructEntry | t.CPtr) -> GenTypes.StructEntry | t.CPtr:
"""委托到 gen.StructGen.register_struct_alias(包重导出类别名注册,原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.StructGen.register_struct_alias(pool, name, sha1, src_entry)
return None
# ---------------- get_stdlib_alloc(委托 StructGenMixin.get_stdlib_alloc) ----------------
def get_stdlib_alloc() -> int:
"""委托到 gen.get_stdlib_alloc(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.StructGen.get_stdlib_alloc()
return 0
# ---------------- compute_package_from_relpath(委托 ImportsGenMixin.compute_package_from_relpath) ----------------
def compute_package_from_relpath(pool: memhub.MemBuddy | t.CPtr, rel_path: str) -> str:
"""委托到 gen.compute_package_from_relpath(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.ImportsGen.compute_package_from_relpath(pool, rel_path)
return None
# ---------------- is_module_imported(委托 ImportsGenMixin.is_module_imported) ----------------
def is_module_imported(imported_modules: str, name: str) -> int:
"""委托到 gen.is_module_imported(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.ImportsGen.is_module_imported(imported_modules, name)
return 0
# ---------------- add_imported_module(委托 ImportsGenMixin.add_imported_module) ----------------
def add_imported_module(pool: memhub.MemBuddy | t.CPtr, imported_modules: str, name: str) -> str:
"""委托到 gen.add_imported_module(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.ImportsGen.add_imported_module(pool, imported_modules, name)
return None
# ---------------- translate_import(委托 ImportsGenMixin.translate_import) ----------------
def translate_import(trans: HT.Translator | t.CPtr, node: ast.AST | t.CPtr) -> int:
"""委托到 gen.translate_import(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.ImportsGen.translate_import(trans, node)
return 0
# ---------------- translate_import_from_module(委托 ImportsGenMixin.translate_import_from_module) ----------------
def translate_import_from_module(trans: HT.Translator | t.CPtr, node: ast.AST | t.CPtr) -> int:
"""委托到 gen.translate_import_from_module(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.ImportsGen.translate_import_from_module(trans, node)
return 0
# ---------------- translate_import_from_names(委托 ImportsGenMixin.translate_import_from_names) ----------------
def translate_import_from_names(trans: HT.Translator | t.CPtr, node: ast.AST | t.CPtr) -> int:
"""委托到 gen.translate_import_from_names(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.ImportsGen.translate_import_from_names(trans, node)
return 0
# ---------------- _get_parent_class(委托 ClassGenBase._get_parent_class) ----------------
def _get_parent_class(cd: ast.ClassDef | t.CPtr, trans: HT.Translator | t.CPtr = None) -> str:
"""委托到 gen._get_parent_class(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.ClassGenBase._get_parent_class(cd, trans)
return None
# ---------------- _register_generic_template(委托 ClassGenGeneric._register_generic_template) ----------------
def _register_generic_template(pool: memhub.MemBuddy | t.CPtr, cd: ast.ClassDef | t.CPtr, module_sha1: str):
"""委托到 gen._register_generic_template(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.ClassGenGeneric._register_generic_template(pool, cd, module_sha1)
# ---------------- _mangle_name_with_sha1(委托 FuncGenBase._mangle_name_with_sha1) ----------------
def _mangle_name_with_sha1(sha1: str, name: str) -> str:
"""委托到 gen._mangle_name_with_sha1(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.FuncGenBase._mangle_name_with_sha1(sha1, name)
return None
# ---------------- forward_declare_functions(委托 FuncGenDef.forward_declare_functions) ----------------
def forward_declare_functions(trans: HT.Translator | t.CPtr, tree: ast.AST | t.CPtr) -> int:
"""委托到 gen.forward_declare_functions(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.FuncGenDef.forward_declare_functions(trans, tree)
return 0
# ---------------- create_wrapper_main(委托 TranslatorGenMixin.create_wrapper_main) ----------------
def create_wrapper_main(trans: HT.Translator | t.CPtr, tree: ast.AST | t.CPtr, i32_ty: llvmlite.LLVMType | t.CPtr) -> int:
"""委托到 gen.create_wrapper_main(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.TranslatorGen.create_wrapper_main(trans, tree, i32_ty)
return 0
# ---------------- handle_module_level_var(委托 TranslatorGenMixin.handle_module_level_var) ----------------
def handle_module_level_var(trans: HT.Translator | t.CPtr, node: ast.AST | t.CPtr) -> int:
"""委托到 gen.handle_module_level_var(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.TranslatorGen.handle_module_level_var(trans, node)
return 0
# ---------------- translate_children(委托 TranslatorGenMixin.translate_children) ----------------
def translate_children(trans: HT.Translator | t.CPtr, tree: ast.AST | t.CPtr) -> int:
"""委托到 gen.translate_children(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.TranslatorGen.translate_children(trans, tree)
return 0
# ---------------- init_symbol_table(委托 VarGenMixin.init_symbol_table) ----------------
def init_symbol_table(pool: memhub.MemBuddy | t.CPtr) -> GenTypes.SymbolTable | t.CPtr:
"""委托到 gen.init_symbol_table(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.VarGen.init_symbol_table(pool)
return None
# ---------------- SetTempDir(委托 CallGenBase.SetTempDir) ----------------
def SetTempDir(temp_dir: str):
"""委托到 gen.SetTempDir(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.CallGenBase.SetTempDir(temp_dir)
# ---------------- find_func_in_module(委托 CallGenBase.find_func_in_module) ----------------
def find_func_in_module(mod: llvmlite.LLVMModule | t.CPtr, name: str) -> llvmlite.Function | t.CPtr:
"""委托到 gen.find_func_in_module(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.CallGenBase.find_func_in_module(mod, name)
return None
# ---------------- add_func_to_table(委托 CallGenLeafKit.add_func_to_table) ----------------
def add_func_to_table(funcs: GenTypes.FuncEntry | t.CPtr, func_count: int, name: str, func: llvmlite.Function | t.CPtr, max_count: int, defaults: t.CPtr = None, default_count: int = 0, param_count: int = 0, pool: memhub.MemBuddy | t.CPtr = None, def_sha1: str = None) -> int:
"""委托到 gen.add_func_to_table(原 Handles 壳)
def_sha1:定义该函数的模块 SHA1(依赖注入路径必须传,避免默认值被挂到导入方名下)
"""
if _g_gen is not None:
return _g_gen.CallGenLeafKit.add_func_to_table(funcs, func_count, name, func, max_count, defaults, default_count, param_count, pool, def_sha1)
return 0
# ---------------- init_func_table(委托 CallGenLeafKit.init_func_table) ----------------
def init_func_table(pool: memhub.MemBuddy | t.CPtr, max_count: int) -> GenTypes.FuncEntry | t.CPtr:
"""委托到 gen.init_func_table(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.CallGenLeafKit.init_func_table(pool, max_count)
return None
# ---------------- translate_call(委托 CallGenMixin.translate_call) ----------------
def translate_call(pool: memhub.MemBuddy | t.CPtr, builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, node: ast.AST | t.CPtr, funcs_ptr: t.CPtr, func_count: int, trans: HT.Translator | t.CPtr = None) -> llvmlite.Value | t.CPtr:
"""委托到 gen.translate_call(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.CallGen.translate_call(pool, builder, mod, node, funcs_ptr, func_count, trans)
return None
# ---------------- translate_printf_call(委托 CallGenLeafKit.translate_printf_call) ----------------
def translate_printf_call(pool: memhub.MemBuddy | t.CPtr, builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, trans: HT.Translator | t.CPtr = None):
"""委托到 gen.translate_printf_call(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.CallGenLeafKit.translate_printf_call(pool, builder, mod, cl, trans)
# ---------------- translate_print_call(委托 CallGenLeafKit.translate_print_call) ----------------
def translate_print_call(pool: memhub.MemBuddy | t.CPtr, builder: llvmlite.IRBuilder | t.CPtr, mod: llvmlite.LLVMModule | t.CPtr, cl: ast.Call | t.CPtr, trans: HT.Translator | t.CPtr = None):
"""委托到 gen.translate_print_call(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.CallGenLeafKit.translate_print_call(pool, builder, mod, cl, trans)
# ---------------- add_global_name(委托 TranslatorGenMixin.add_global_name) ----------------
def add_global_name(trans: HT.Translator | t.CPtr, name: str):
"""委托到 gen.TranslatorGen.add_global_name(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.TranslatorGen.add_global_name(trans, name)
# ---------------- is_global_name(委托 TranslatorGenMixin.is_global_name) ----------------
def is_global_name(trans: HT.Translator | t.CPtr, name: str) -> int:
"""委托到 gen.TranslatorGen.is_global_name(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.TranslatorGen.is_global_name(trans, name)
return 0
# ---------------- add_nonlocal_name(委托 TranslatorGenMixin.add_nonlocal_name) ----------------
def add_nonlocal_name(trans: HT.Translator | t.CPtr, name: str,
var_ty: llvmlite.LLVMType | t.CPtr = None):
"""委托到 gen.TranslatorGen.add_nonlocal_name(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.TranslatorGen.add_nonlocal_name(trans, name, var_ty)
# ---------------- get_nonlocal_type(委托 TranslatorGenMixin.get_nonlocal_type) ----------------
def get_nonlocal_type(trans: HT.Translator | t.CPtr,
name: str) -> llvmlite.LLVMType | t.CPtr:
"""委托到 gen.TranslatorGen.get_nonlocal_type(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.TranslatorGen.get_nonlocal_type(trans, name)
return None
# ---------------- is_nonlocal_name(委托 TranslatorGenMixin.is_nonlocal_name) ----------------
def is_nonlocal_name(trans: HT.Translator | t.CPtr, name: str) -> int:
"""委托到 gen.TranslatorGen.is_nonlocal_name(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.TranslatorGen.is_nonlocal_name(trans, name)
return 0
# ---------------- get_nonlocal_index(委托 TranslatorGenMixin.get_nonlocal_index) ----------------
def get_nonlocal_index(trans: HT.Translator | t.CPtr, name: str) -> int:
"""委托到 gen.TranslatorGen.get_nonlocal_index(原 Handles 壳)"""
if _g_gen is not None:
return _g_gen.TranslatorGen.get_nonlocal_index(trans, name)
return 0
# ---------------- clear_scope_names(委托 TranslatorGenMixin.clear_scope_names) ----------------
def clear_scope_names(trans: HT.Translator | t.CPtr):
"""委托到 gen.TranslatorGen.clear_scope_names(原 Handles 壳)"""
if _g_gen is not None:
_g_gen.TranslatorGen.clear_scope_names(trans)
# ---------------- update_global_func_typestr(委托 CallGenLeafKit.update_global_func_typestr) ----------------
def update_global_func_typestr(pool: memhub.MemBuddy | t.CPtr,
name: str,
func: llvmlite.Function | t.CPtr) -> int:
"""委托到 gen.CallGenLeafKit.update_global_func_typestr(原 ExprCallTable 壳)"""
if _g_gen is not None:
return _g_gen.CallGenLeafKit.update_global_func_typestr(pool, name, func)
return 0