ssa: sliceOf arrayOf

This commit is contained in:
visualfc
2024-05-26 21:57:07 +08:00
parent 4a6f072361
commit 3328847e27
9 changed files with 547 additions and 1 deletions

View File

@@ -59,6 +59,10 @@ func (b Builder) abiTypeOf(t types.Type) Expr {
return b.abiInterfaceOf(t)
case *types.Signature:
return b.abiFuncOf(t)
case *types.Slice:
return b.abiSliceOf(t)
case *types.Array:
return b.abiArrayOf(t)
}
panic("todo")
}
@@ -156,6 +160,16 @@ func (b Builder) abiPointerOf(t *types.Pointer) Expr {
return b.Call(b.Pkg.rtFunc("PointerTo"), elem)
}
func (b Builder) abiSliceOf(t *types.Slice) Expr {
elem := b.abiTypeOf(t.Elem())
return b.Call(b.Pkg.rtFunc("SliceOf"), elem)
}
func (b Builder) abiArrayOf(t *types.Array) Expr {
elem := b.abiTypeOf(t.Elem())
return b.Call(b.Pkg.rtFunc("ArrayOf"), b.Prog.IntVal(uint64(t.Len()), b.Prog.Uintptr()), elem)
}
// func Struct(pkgPath string, size uintptr, fields []abi.StructField)
func (b Builder) abiStructOf(t *types.Struct) Expr {
pkg := b.Pkg