ssa: rtIface, rtSlice

This commit is contained in:
xushiwei
2024-04-27 18:13:16 +08:00
parent 6a02c3ac4c
commit 6a3eb2f2f9
2 changed files with 24 additions and 3 deletions

View File

@@ -110,6 +110,9 @@ type aProgram struct {
voidType llvm.Type
voidPtrTy llvm.Type
rtIfaceTy llvm.Type
rtSliceTy llvm.Type
anyTy Type
voidTy Type
boolTy Type
@@ -144,10 +147,28 @@ func (p Program) runtime() *types.Scope {
return p.rt
}
func (p Program) rtType(name string) *types.Named {
func (p Program) rtNamed(name string) *types.Named {
return p.runtime().Lookup(name).Type().(*types.Named)
}
func (p Program) rtType(name string) Type {
return p.Type(p.rtNamed(name))
}
func (p Program) rtIface() llvm.Type {
if p.rtIfaceTy.IsNil() {
p.rtIfaceTy = p.rtType("Interface").ll
}
return p.rtIfaceTy
}
func (p Program) rtSlice() llvm.Type {
if p.rtSliceTy.IsNil() {
p.rtSliceTy = p.rtType("Slice").ll
}
return p.rtSliceTy
}
// NewPackage creates a new package.
func (p Program) NewPackage(name, pkgPath string) Package {
mod := p.ctx.NewModule(pkgPath)