50 lines
1.5 KiB
Plaintext
50 lines
1.5 KiB
Plaintext
import lib.core.Gen.GenTypes as GenTypes
|
|
import lib.core.Gen.Generator as Generator
|
|
import t, c
|
|
from stdint import *
|
|
import memhub
|
|
import llvmlite
|
|
|
|
|
|
# ============================================================
|
|
# BaseGenMixin - 生成器基座(状态容器)
|
|
# ============================================================
|
|
novirtual class BaseGenMixin:
|
|
"""生成器状态容器(基座)"""
|
|
|
|
# 内存/IR 状态
|
|
Gen: Generator.Generator*
|
|
Pool: memhub.MemBuddy* # 内存池
|
|
Module: llvmlite.LLVMModule* # 当前 LLVM 模块
|
|
Builder: llvmlite.IRBuilder* # 当前 IRBuilder
|
|
# 符号表/函数表
|
|
SymTab: rawptr[GenTypes.SymbolTable]
|
|
Funcs: GenTypes.FuncEntry*
|
|
FuncCount: int
|
|
# 导入/模块信息
|
|
ImportedModules: str
|
|
FromImports: str
|
|
ModuleSha1: str
|
|
# 当前翻译上下文
|
|
CurFunc: llvmlite.Function*
|
|
CurBuilder: llvmlite.IRBuilder*
|
|
CurClassName: str
|
|
|
|
def InitBaseGen(self, pool: memhub.MemBuddy*) -> int:
|
|
"""初始化生成器状态(默认值;子类构造时调用)"""
|
|
if self is None:
|
|
return 1
|
|
self.Pool = pool
|
|
self.Module = None
|
|
self.Builder = None
|
|
self.SymTab = None
|
|
self.Funcs = None
|
|
self.FuncCount = 0
|
|
self.ImportedModules = None
|
|
self.FromImports = None
|
|
self.ModuleSha1 = None
|
|
self.CurFunc = None
|
|
self.CurBuilder = None
|
|
self.CurClassName = None
|
|
return 0
|