Skip to content

Commit 85eebc8

Browse files
Merge pull request #680 from rolfbjarne/vardecl-isexternc
Implement CXCursor.IsExternC for VarDecls.
2 parents dedb818 + 5f413d1 commit 85eebc8

2 files changed

Lines changed: 39 additions & 0 deletions

File tree

sources/libClangSharp/ClangSharp.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2237,6 +2237,10 @@ unsigned clangsharp_Cursor_getIsExternC(CXCursor C) {
22372237
if (const FunctionDecl* FD = dyn_cast<FunctionDecl>(D)) {
22382238
return FD->isExternC();
22392239
}
2240+
2241+
if (const VarDecl* VD = dyn_cast<VarDecl>(D)) {
2242+
return VD->isExternC();
2243+
}
22402244
}
22412245

22422246
return 0;

tests/ClangSharp.UnitTests/CXCursor.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// Copyright (c) .NET Foundation and Contributors. All Rights Reserved. Licensed under the MIT License (MIT). See License.md in the repository root for more information.
22

3+
using System.Collections.Generic;
34
using System.Linq;
45
using NUnit.Framework;
56

@@ -25,4 +26,38 @@ public void AttrKindSpelling()
2526
Assert.That (functionDecl.Handle.AttrKindSpelling, Is.Not.Null.Or.Empty, "AttrKindSpelling");
2627
}
2728
}
29+
30+
[Test]
31+
public void IsExternC()
32+
{
33+
AssertNeedNewClangSharp();
34+
35+
var inputContents =
36+
$$"""
37+
extern "C" {
38+
int theUniverseAndEverything = 0;
39+
int hitchhike ();
40+
}
41+
""";
42+
43+
using var translationUnit = CreateTranslationUnit(inputContents);
44+
45+
var allDecls = new List<Decl>();
46+
allDecls.AddRange(translationUnit.TranslationUnitDecl.Decls);
47+
allDecls.AddRange(allDecls.OfType<LinkageSpecDecl>().SelectMany(v => v.Decls).ToList());
48+
49+
var functionDecls = allDecls.OfType<FunctionDecl>().ToList();
50+
Assert.That(functionDecls.Count, Is.GreaterThan(0), "Function");
51+
foreach (var decl in functionDecls)
52+
{
53+
Assert.That(decl.IsExternC, Is.True, "IsExternC function");
54+
}
55+
56+
var varDecls = allDecls.OfType<VarDecl>().ToList();
57+
Assert.That(varDecls.Count, Is.GreaterThan(0), "Var");
58+
foreach (var decl in varDecls)
59+
{
60+
Assert.That(decl.IsExternC, Is.True, "IsExternC var");
61+
}
62+
}
2863
}

0 commit comments

Comments
 (0)