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

51 lines
1.6 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 - 生成器基座(状态容器)
# ============================================================
@t.NoVTable
class BaseGenMixin:
"""生成器状态容器(基座)"""
# 内存/IR 状态
Gen: Generator.Generator | t.CPtr
Pool: rowptr[memhub.MemBuddy] # 内存池
Module: llvmlite.LLVMModule | t.CPtr # 当前 LLVM 模块
Builder: llvmlite.IRBuilder | t.CPtr # 当前 IRBuilder
# 符号表/函数表
SymTab: GenTypes.SymbolTable | t.CPtr
Funcs: GenTypes.FuncEntry | t.CPtr
FuncCount: int
# 导入/模块信息
ImportedModules: str
FromImports: str
ModuleSha1: str
# 当前翻译上下文
CurFunc: llvmlite.Function | t.CPtr
CurBuilder: llvmlite.IRBuilder | t.CPtr
CurClassName: str
def InitBaseGen(self, pool: rowptr[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