Beispiel #1
0
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")
		}
	}
}
Beispiel #2
0
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{}"
}
Beispiel #3
0
// g_type_info_is_pointer
func (ti *TypeInfo) IsPointer() bool {
	return C.g_type_info_is_pointer((*C.GITypeInfo)(ti.c)) != 0
}
Beispiel #4
0
func (info *GiInfo) IsPointer() bool {
	return GoBool(C.g_type_info_is_pointer((*C.GITypeInfo)(info.ptr)))
}