func DumpTypeInfo(info *C.GITypeInfo) { isPointer := C.g_type_info_is_pointer(info) p("is pointer %v\n", isPointer) tag := C.g_type_info_get_tag(info) p("tag %s\n", fromGStr(C.g_type_tag_to_string(tag))) if tag&C.GI_TYPE_TAG_INTERFACE > 0 { iface := C.g_type_info_get_interface(info) _ = iface } if tag&C.GI_TYPE_TAG_ARRAY > 0 { length := C.g_type_info_get_array_length(info) p("array length %d\n", length) fixedSize := C.g_type_info_get_array_fixed_size(info) p("array fixed size %d\n", fixedSize) isZeroTerminated := C.g_type_info_is_zero_terminated(info) p("is zero terminated %v\n", isZeroTerminated) arrayType := C.g_type_info_get_array_type(info) switch arrayType { case C.GI_ARRAY_TYPE_C: p("c array\n") case C.GI_ARRAY_TYPE_ARRAY: p("GArray\n") case C.GI_ARRAY_TYPE_PTR_ARRAY: p("GPtrArray\n") case C.GI_ARRAY_TYPE_BYTE_ARRAY: p("GByteArray\n") } } }
func (self *Generator) getGoTypeStr(typeInfo *C.GITypeInfo) (ret string) { argTypeTag := C.g_type_info_get_tag(typeInfo) // map to basic type ret = tagMapToGoType(argTypeTag) if ret != "" { if C.g_type_info_is_pointer(typeInfo) == True && ret != "string" { // is pointer ret = "*" + ret } return } // complex type if argTypeTag == C.GI_TYPE_TAG_INTERFACE { ifaceInfo := C.g_type_info_get_interface(typeInfo) //GIBaseInfo if ifaceInfo != nil { ifaceType := C.g_base_info_get_type(ifaceInfo) //GIInfoType ifaceName := fromGStr(C.g_base_info_get_name(ifaceInfo)) switch ifaceType { case C.GI_INFO_TYPE_STRUCT: /* ret = "*C." + strings.ToUpper(self.CPrefix) + ifaceName p("%s %s\n", self.currentFunctionName, ifaceName) return */ //TODO we need c:type here. girepository is not exposing. default: //p("INTERFACE %s %s\n", fromGStr(C.g_info_type_to_string(ifaceType)), ifaceName) } } } // fallback return "interface{}" }
// g_type_info_get_tag func (ti *TypeInfo) Tag() TypeTag { return TypeTag(C.g_type_info_get_tag((*C.GITypeInfo)(ti.c))) }
func (info *GiInfo) GetTag() TypeTag { return (TypeTag)(C.g_type_info_get_tag((*C.GITypeInfo)(info.ptr))) }