def METHOD_NAME(t: binaryninja.types.Type, depth=0):
	indent = '  ' * depth
	result = 'unimplemented'
	assert isinstance(t, binaryninja.types.Type)
	tc = t.type_class
	if tc == TypeClass.VoidTypeClass:
		result = '%sType class=Void\n' % indent
	elif tc == TypeClass.BoolTypeClass:
		result = '%sType class=Bool\n' % indent
	elif tc == TypeClass.IntegerTypeClass:
		result = '%sType class=Integer width=%d\n' % (indent, t.width)
	elif tc == TypeClass.FloatTypeClass:
		result = '%sType class=Float\n' % indent
	elif tc == TypeClass.StructureTypeClass:
		result = '%sType class=Structure\n' % indent
		result += obj2str(t.structure, depth + 1)
	elif tc == TypeClass.EnumerationTypeClass:
		result = '%sType class=Enumeration\n' % indent
		result += obj2str(t.enumeration, depth + 1)
	elif tc == TypeClass.PointerTypeClass:
		result = '%sType class=Pointer\n' % indent
		result += METHOD_NAME(t.target, depth + 1)
	elif tc == TypeClass.ArrayTypeClass:
		result = '%sType class=Array\n' % indent
	elif tc == TypeClass.FunctionTypeClass:
		result = '%sType class=Function\n' % indent
		result += METHOD_NAME(t.return_value, depth + 1)
		for param in t.parameters:
			result += obj2str(param, depth + 1)
	elif tc == TypeClass.VarArgsTypeClass:
		result = '%sType class=VarArgs\n' % indent
	elif tc == TypeClass.ValueTypeClass:
		result = '%sType class=Value\n' % indent
	elif tc == TypeClass.NamedTypeReferenceClass:
		result = '%sType class=NamedTypeReference\n' % indent
		result += obj2str(t.named_type_reference, depth + 1)
	elif tc == TypeClass.WideCharTypeClass:
		result = '%sType class=WideChar\n' % indent
	return result