From b1225951f2ddb1abd5b0166de6b4f7b022fd26f1 Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Mon, 26 Aug 2024 10:56:36 +0800 Subject: [PATCH] llcppsigfetch:func inline & static --- chore/_xtool/llcppsigfetch/parse/cvt.go | 59 +++++++++-------- .../cvt_test/decl_test/class_test/class.go | 1 + .../cvt_test/decl_test/class_test/llgo.expect | 30 +++++++++ .../cvt_test/decl_test/func_test/func.go | 1 + .../cvt_test/decl_test/func_test/llgo.expect | 65 +++++++++++++++++++ 5 files changed, 130 insertions(+), 26 deletions(-) diff --git a/chore/_xtool/llcppsigfetch/parse/cvt.go b/chore/_xtool/llcppsigfetch/parse/cvt.go index 5bf9be0f..a4f38f99 100644 --- a/chore/_xtool/llcppsigfetch/parse/cvt.go +++ b/chore/_xtool/llcppsigfetch/parse/cvt.go @@ -296,37 +296,44 @@ func (ct *Converter) ProcessFuncDecl(cursor clang.Cursor) *ast.FuncDecl { Type: funcType, } - // other info of function&method - if cursor.Kind == clang.CursorDestructor { - fn.IsDestructor = true + if cursor.IsFunctionInlined() != 0 { + fn.IsInline = true } - if cursor.Kind == clang.CursorConstructor { - fn.IsConstructor = true - if cursor.IsExplicit() != 0 { - fn.IsExplicit = true + if cursor.Kind == clang.CursorCXXMethod || cursor.Kind == clang.CursorDestructor || cursor.Kind == clang.CursorConstructor { + if cursor.Kind == clang.CursorDestructor { + fn.IsDestructor = true + } + if cursor.Kind == clang.CursorConstructor { + fn.IsConstructor = true + if cursor.IsExplicit() != 0 { + fn.IsExplicit = true + } + } + if cursor.IsStatic() != 0 { + fn.IsStatic = true + } + // virtual & pure virtual + if cursor.IsVirtual() != 0 || cursor.IsPureVirtual() != 0 { + fn.IsVirtual = true + } + if cursor.IsConst() != 0 { + fn.IsConst = true + } + + var numOverridden c.Uint + var overridden *clang.Cursor + cursor.OverriddenCursors(&overridden, &numOverridden) + if numOverridden > 0 { + fn.IsOverride = true + } + overridden.DisposeOverriddenCursors() + } else { + if cursor.StorageClass() == clang.SCStatic { + fn.IsStatic = true } } - if cursor.IsStatic() != 0 { - fn.IsStatic = true - } - - // virtual & pure virtual - if cursor.IsVirtual() != 0 || cursor.IsPureVirtual() != 0 { - fn.IsVirtual = true - } - - // todo(zzy):inline & const - - var numOverridden c.Uint - var overridden *clang.Cursor - cursor.OverriddenCursors(&overridden, &numOverridden) - if numOverridden > 0 { - fn.IsOverride = true - } - overridden.DisposeOverriddenCursors() - return fn } diff --git a/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/class_test/class.go b/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/class_test/class.go index d3765433..5da535c8 100644 --- a/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/class_test/class.go +++ b/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/class_test/class.go @@ -21,6 +21,7 @@ func TestClassDecl() { A(); explicit A(); ~A(); + static inline void foo(); };`, `class Base { Base(); diff --git a/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/class_test/llgo.expect b/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/class_test/llgo.expect index 2b893eff..f116cbd2 100644 --- a/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/class_test/llgo.expect +++ b/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/class_test/llgo.expect @@ -276,6 +276,36 @@ TestClassDecl Case 3: "IsDestructor": true, "IsVirtual": false, "IsOverride": false + }, { + "Loc": { + "File": "temp.h" + }, + "Doc": { + "List": [] + }, + "Parent": { + "Name": "A" + }, + "Name": { + "Name": "foo" + }, + "Type": { + "Params": { + "List": [] + }, + "Ret": { + "Kind": 0, + "Flags": 0 + } + }, + "IsInline": true, + "IsStatic": true, + "IsConst": false, + "IsExplicit": false, + "IsConstructor": false, + "IsDestructor": false, + "IsVirtual": false, + "IsOverride": false }] } }], diff --git a/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/func_test/func.go b/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/func_test/func.go index 49eb4c23..55caff06 100644 --- a/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/func_test/func.go +++ b/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/func_test/func.go @@ -11,6 +11,7 @@ func TestFuncDecl() { `void foo();`, `void foo(int a);`, `float* foo(int a,double b);`, + `static inline int add(int a, int b);`, } test.RunTest("TestFuncDecl", testCases) } diff --git a/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/func_test/llgo.expect b/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/func_test/llgo.expect index 5b3ceb20..638976bb 100644 --- a/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/func_test/llgo.expect +++ b/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/func_test/llgo.expect @@ -154,6 +154,71 @@ TestFuncDecl Case 3: } } +TestFuncDecl Case 4: +{ + "temp.h": { + "decls": [{ + "Loc": { + "File": "temp.h" + }, + "Doc": { + "List": [] + }, + "Parent": null, + "Name": { + "Name": "add" + }, + "Type": { + "Params": { + "List": [{ + "Type": { + "Kind": 6, + "Flags": 0 + }, + "Doc": { + "List": [] + }, + "Comment": { + "List": [] + }, + "Names": [{ + "Name": "a" + }] + }, { + "Type": { + "Kind": 6, + "Flags": 0 + }, + "Doc": { + "List": [] + }, + "Comment": { + "List": [] + }, + "Names": [{ + "Name": "b" + }] + }] + }, + "Ret": { + "Kind": 6, + "Flags": 0 + } + }, + "IsInline": true, + "IsStatic": true, + "IsConst": false, + "IsExplicit": false, + "IsConstructor": false, + "IsDestructor": false, + "IsVirtual": false, + "IsOverride": false + }], + "includes": [], + "macros": [] + } +} + #stderr