Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9b40514

Browse files
committed
Extract define directives
1 parent 94bf346 commit 9b40514

7 files changed

Lines changed: 50 additions & 1 deletion

File tree

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using Microsoft.CodeAnalysis.CSharp.Syntax;
2+
using System.IO;
3+
4+
namespace Semmle.Extraction.CSharp.Entities
5+
{
6+
internal class DefineDirective : PreprocessorDirective<DefineDirectiveTriviaSyntax>
7+
{
8+
public DefineDirective(Context cx, DefineDirectiveTriviaSyntax trivia)
9+
: base(cx, trivia)
10+
{
11+
}
12+
13+
protected override void PopulatePreprocessor(TextWriter trapFile)
14+
{
15+
trapFile.directive_defines(this, trivia.Name.ToString());
16+
}
17+
}
18+
}

csharp/extractor/Semmle.Extraction.CSharp/Populators/DirectiveVisitor.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,10 @@ public override void VisitPragmaChecksumDirectiveTrivia(PragmaChecksumDirectiveT
2222
{
2323
new Entities.PragmaChecksumDirective(cx, node);
2424
}
25+
26+
public override void VisitDefineDirectiveTrivia(DefineDirectiveTriviaSyntax node)
27+
{
28+
new Entities.DefineDirective(cx, node);
29+
}
2530
}
2631
}

csharp/extractor/Semmle.Extraction.CSharp/Tuples.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,5 +620,10 @@ internal static void pragma_checksums(this TextWriter trapFile, PragmaChecksumDi
620620
{
621621
trapFile.WriteTuple("pragma_checksums", pragma, file, guid, bytes);
622622
}
623+
624+
internal static void directive_defines(this TextWriter trapFile, DefineDirective directive, string name)
625+
{
626+
trapFile.WriteTuple("directive_defines", directive, name);
627+
}
623628
}
624629
}

csharp/ql/src/semmle/code/csharp/Preprocessor.qll

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,15 @@ class PragmaChecksumDirective extends PreprocessorDirective, @pragma_checksum {
4646

4747
override string getAPrimaryQlClass() { result = "PragmaChecksumDirective" }
4848
}
49+
50+
/**
51+
* An `#define` directive.
52+
*/
53+
class DefineDirective extends PreprocessorDirective, @directive_define {
54+
/** Gets the name of the preprocessor symbol that is being set by this directive. */
55+
string getName() { directive_defines(this, result) }
56+
57+
override string toString() { result = "#define ..." }
58+
59+
override string getAPrimaryQlClass() { result = "DefineDirective" }
60+
}

csharp/ql/src/semmlecode.csharp.dbscheme

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,11 @@ using_directive_location(
331331
unique int id: @using_directive ref,
332332
int loc: @location ref);
333333

334-
@preprocessor_directive = @pragma_warning | @pragma_checksum;
334+
@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define;
335+
336+
directive_defines(
337+
unique int id: @directive_define,
338+
string name: string ref);
335339

336340
pragma_checksums(
337341
unique int id: @pragma_checksum,
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
| trivia.cs:4:1:4:13 | #define ... | DEBUG |
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import csharp
2+
3+
from DefineDirective d
4+
select d, d.getName()

0 commit comments

Comments
 (0)