mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:40:38 +00:00
[Go] Subtypes function
This patch adds LLVMGetSubtypes to Go API (as Type.Subtypes), tests included. Patch by Ekaterina Vaartis! Differential Revision: https://reviews.llvm.org/D33901 llvm-svn: 304968
This commit is contained in:
parent
450e450b48
commit
db2a769c11
@ -611,6 +611,12 @@ func (t Type) StructElementTypes() []Type {
|
||||
}
|
||||
|
||||
// Operations on array, pointer, and vector types (sequence types)
|
||||
func (t Type) Subtypes() (ret []Type) {
|
||||
ret = make([]Type, C.LLVMGetNumContainedTypes(t.C))
|
||||
C.LLVMGetSubtypes(t.C, llvmTypeRefPtr(&ret[0]))
|
||||
return
|
||||
}
|
||||
|
||||
func ArrayType(elementType Type, elementCount int) (t Type) {
|
||||
t.C = C.LLVMArrayType(elementType.C, C.unsigned(elementCount))
|
||||
return
|
||||
|
@ -134,3 +134,29 @@ func TestDebugLoc(t *testing.T) {
|
||||
t.Errorf("Got metadata %v as scope, though wanted %v", loc.Scope.C, scope.C)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSubtypes(t *testing.T) {
|
||||
cont := NewContext()
|
||||
defer cont.Dispose()
|
||||
|
||||
int_pointer := PointerType(cont.Int32Type(), 0)
|
||||
int_inner := int_pointer.Subtypes()
|
||||
if len(int_inner) != 1 {
|
||||
t.Errorf("Got size %d, though wanted 1")
|
||||
}
|
||||
if int_inner[0] != cont.Int32Type() {
|
||||
t.Errorf("Expected int32 type")
|
||||
}
|
||||
|
||||
st_pointer := cont.StructType([]Type{cont.Int32Type(), cont.Int8Type()}, false)
|
||||
st_inner := st_pointer.Subtypes()
|
||||
if len(st_inner) != 2 {
|
||||
t.Errorf("Got size %d, though wanted 2")
|
||||
}
|
||||
if st_inner[0] != cont.Int32Type() {
|
||||
t.Errorf("Expected first struct field to be int32")
|
||||
}
|
||||
if st_inner[1] != cont.Int8Type() {
|
||||
t.Errorf("Expected second struct field to be int8")
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user