From 33cdb7a5415c90eb0f435637932b1bdde56627b4 Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Thu, 22 Aug 2024 12:18:38 +0800 Subject: [PATCH] c/clang:noref type --- c/clang/_wrap/cursor.cpp | 2 ++ c/clang/clang.go | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) 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. *