From 68b09e87b34b8fc86060a73f6f94db4ba867fa68 Mon Sep 17 00:00:00 2001 From: tsingbx Date: Fri, 29 Nov 2024 09:58:41 +0800 Subject: [PATCH 1/2] add clang.GoString, clang.File functions for helper of llcppsymg struct_methodname --- c/clang/_wrap/cursor.cpp | 2 ++ c/clang/basic.go | 8 ++++++++ c/clang/clang.go | 28 ++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/c/clang/_wrap/cursor.cpp b/c/clang/_wrap/cursor.cpp index 2952a0d2..db550aae 100644 --- a/c/clang/_wrap/cursor.cpp +++ b/c/clang/_wrap/cursor.cpp @@ -35,6 +35,8 @@ int wrap_clang_Cursor_isNull(CXCursor *cursor) { return clang_Cursor_isNull(*cur void wrap_clang_getCursorSemanticParent(CXCursor *C, CXCursor *parent) { *parent = clang_getCursorSemanticParent(*C); } +void wrap_clang_getCursorDefinition(CXCursor *C, CXCursor *def) { *def = clang_getCursorDefinition(*C); } + void wrap_clang_getCursorLexicalParent(CXCursor *C, CXCursor *parent) { *parent = clang_getCursorLexicalParent(*C); } void wrap_clang_getOverriddenCursors(CXCursor *cursor, CXCursor **overridden, unsigned *num_overridden) { diff --git a/c/clang/basic.go b/c/clang/basic.go index 078bb3f2..44d6665e 100644 --- a/c/clang/basic.go +++ b/c/clang/basic.go @@ -57,3 +57,11 @@ type StringSet struct { */ // llgo:link (*StringSet).Dispose C.clang_disposeStringSet func (*StringSet) Dispose() {} + +func GoString(clangStr String) (str string) { + defer clangStr.Dispose() + if clangStr.CStr() != nil { + str = c.GoString(clangStr.CStr()) + } + return +} diff --git a/c/clang/clang.go b/c/clang/clang.go index 8f2faf9b..0f3e25f0 100644 --- a/c/clang/clang.go +++ b/c/clang/clang.go @@ -1635,6 +1635,14 @@ func (c Cursor) SemanticParent() (parent Cursor) { return } +// llgo:link (*Cursor).wrapDefinition C.wrap_clang_getCursorDefinition +func (*Cursor) wrapDefinition(def *Cursor) {} + +func (c Cursor) Definition() (def Cursor) { + c.wrapDefinition(&def) + return +} + /** * Determine the lexical parent of the given cursor. * @@ -2795,6 +2803,26 @@ func (l SourceLocation) SpellingLocation(file *File, line, column, offset *c.Uin l.wrapSpellingLocation(file, line, column, offset) } +func (l SourceLocation) File() (ret File) { + l.wrapSpellingLocation(&ret, nil, nil, nil) + return +} + +func (l SourceLocation) Line() (ret c.Uint) { + l.wrapSpellingLocation(nil, &ret, nil, nil) + return +} + +func (l SourceLocation) Column() (ret c.Uint) { + l.wrapSpellingLocation(nil, nil, &ret, nil) + return +} + +func (l SourceLocation) Offset() (ret c.Uint) { + l.wrapSpellingLocation(nil, nil, nil, &ret) + return +} + /** * Retrieve a source location representing the first character within a * source range. From f106a0854ff68f80aaceb0f28bb778ae96b9e8d5 Mon Sep 17 00:00:00 2001 From: tsingbx Date: Mon, 2 Dec 2024 10:20:41 +0800 Subject: [PATCH 2/2] use temp to reduse clangStr.CStr call times --- c/clang/basic.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/c/clang/basic.go b/c/clang/basic.go index 44d6665e..5130803c 100644 --- a/c/clang/basic.go +++ b/c/clang/basic.go @@ -60,8 +60,9 @@ func (*StringSet) Dispose() {} func GoString(clangStr String) (str string) { defer clangStr.Dispose() - if clangStr.CStr() != nil { - str = c.GoString(clangStr.CStr()) + cstr := clangStr.CStr() + if cstr != nil { + str = c.GoString(cstr) } return }