diff --git a/c/clang/clang.go b/c/clang/clang.go index 71bd5a7f..006d3857 100644 --- a/c/clang/clang.go +++ b/c/clang/clang.go @@ -1758,6 +1758,14 @@ func (t *TranslationUnit) Tokenize(ran SourceRange, tokens **Token, numTokens *c t.wrapTokenize(&ran, tokens, numTokens) } +// CINDEX_LINKAGE void clang_disposeTokens(CXTranslationUnit TU, CXToken *Tokens, unsigned NumTokens); + +/** + * Free the given set of tokens. + */ +// llgo:link (*TranslationUnit).DisposeTokens C.clang_disposeTokens +func (t *TranslationUnit) DisposeTokens(tokens *Token, numTokens c.Uint) {} + /** * Determine the spelling of the given token. * diff --git a/chore/_xtool/castdump/castdump.go b/chore/_xtool/castdump/castdump.go index 5b8ac793..7e8b8cb1 100644 --- a/chore/_xtool/castdump/castdump.go +++ b/chore/_xtool/castdump/castdump.go @@ -105,6 +105,8 @@ func printMacro(cursor clang.Cursor, unit *clang.TranslationUnit) { var numTokens c.Uint var tokens *clang.Token unit.Tokenize(ran, &tokens, &numTokens) + defer unit.DisposeTokens(tokens, numTokens) + tokensSlice := unsafe.Slice(tokens, int(numTokens)) for _, tok := range tokensSlice { tokStr := unit.Token(tok)