diff --git a/c/clang/_wrap/cursor.cpp b/c/clang/_wrap/cursor.cpp index fb13f933..7107efdc 100644 --- a/c/clang/_wrap/cursor.cpp +++ b/c/clang/_wrap/cursor.cpp @@ -45,6 +45,8 @@ void wrap_clang_getPointeeType(CXType *pointerTyp, CXType *pointeeTyp) { *pointeeTyp = clang_getPointeeType(*pointerTyp); } +void wrap_clang_getNonReferenceType(CXType *typ, CXType *nonRefTyp) { *nonRefTyp = clang_getNonReferenceType(*typ); } + void wrap_clang_getArrayElementType(CXType *arrayTyp, CXType *elemTyp) { *elemTyp = clang_getArrayElementType(*arrayTyp); } diff --git a/c/clang/clang.go b/c/clang/clang.go index b637d0ff..a80152db 100644 --- a/c/clang/clang.go +++ b/c/clang/clang.go @@ -1942,6 +1942,23 @@ func (t Type) ArrayElementType() (ret Type) { return } +/** + * For reference types (e.g., "const int&"), returns the type that the + * reference refers to (e.g "const int"). + * + * Otherwise, returns the type itself. + * + * A type that has kind \c CXType_LValueReference or + * \c CXType_RValueReference is a reference type. + */ +// llgo:link (*Type).wrapNonReferenceType C.wrap_clang_getNonReferenceType +func (t *Type) wrapNonReferenceType(ret *Type) { return } + +func (t Type) NonReferenceType() (ret Type) { + t.wrapNonReferenceType(&ret) + return +} + /** * Return the element type of an array, complex, or vector type. *