From 319e746a55f6059247404607a022947f8c9d6287 Mon Sep 17 00:00:00 2001 From: luoliwoshang <2643523683@qq.com> Date: Thu, 22 Aug 2024 18:07:01 +0800 Subject: [PATCH] llcppsigfetch:qualified name refer --- chore/_xtool/llcppsigfetch/parse/cvt.go | 14 +++ .../cvt_test/decl_test/scope_test/llgo.expect | 95 +++++++++++++++++++ .../cvt_test/decl_test/scope_test/scope.go | 9 ++ 3 files changed, 118 insertions(+) diff --git a/chore/_xtool/llcppsigfetch/parse/cvt.go b/chore/_xtool/llcppsigfetch/parse/cvt.go index a10d4a50..003df96b 100644 --- a/chore/_xtool/llcppsigfetch/parse/cvt.go +++ b/chore/_xtool/llcppsigfetch/parse/cvt.go @@ -507,6 +507,20 @@ func (ct *Converter) ProcessElaboratedType(t clang.Type) ast.Expr { } } + // qualified name + // todo(zzy): qualified name with tag,like struct A::B + if strings.Contains(typeName, "::") { + scopeParts := strings.Split(typeName, "::") + var expr ast.Expr = &ast.Ident{Name: scopeParts[0]} + for _, part := range scopeParts[1:] { + expr = &ast.ScopingExpr{ + Parent: expr, + X: &ast.Ident{Name: part}, + } + } + return expr + } + return &ast.Ident{ Name: typeName, } diff --git a/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/scope_test/llgo.expect b/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/scope_test/llgo.expect index fd8ce82c..bba9d9b9 100644 --- a/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/scope_test/llgo.expect +++ b/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/scope_test/llgo.expect @@ -207,6 +207,101 @@ TestScope Case 5: } } +TestScope Case 6: +{ + "temp.h": { + "decls": [{ + "Loc": { + "File": "temp.h" + }, + "Doc": { + "List": [] + }, + "Parent": { + "X": { + "Name": "c" + }, + "Parent": { + "X": { + "Name": "b" + }, + "Parent": { + "Name": "a" + } + } + }, + "Name": { + "Name": "c" + }, + "Type": { + "Tag": 3, + "Fields": { + "List": [] + }, + "Methods": [{ + "Loc": { + "File": "temp.h" + }, + "Doc": { + "List": [] + }, + "Parent": { + "X": { + "Name": "c" + }, + "Parent": { + "X": { + "Name": "b" + }, + "Parent": { + "Name": "a" + } + } + }, + "Name": { + "Name": "foo" + }, + "Type": { + "Params": { + "List": [] + }, + "Ret": { + "Kind": 0, + "Flags": 0 + } + } + }] + } + }, { + "Loc": { + "File": "temp.h" + }, + "Doc": { + "List": [] + }, + "Parent": null, + "Name": { + "Name": "C" + }, + "Type": { + "X": { + "Name": "c" + }, + "Parent": { + "X": { + "Name": "b" + }, + "Parent": { + "Name": "a" + } + } + } + }], + "includes": [], + "macros": [] + } +} + #stderr diff --git a/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/scope_test/scope.go b/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/scope_test/scope.go index 4c6985ce..d039e7c2 100644 --- a/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/scope_test/scope.go +++ b/chore/_xtool/llcppsigfetch/parse/cvt_test/decl_test/scope_test/scope.go @@ -25,6 +25,15 @@ func TestScope() { void foo(); }; }`, + + `namespace a { + namespace b { + class c { + void foo(); + }; + } + } + typedef a::b::c C;`, } test.RunTest("TestScope", testCases) }