Skip to content

Commit 4f8a103

Browse files
committed
C#: Add active preprocessor conditions as suffix in all TRAP .push instructions
1 parent 8aa9cd5 commit 4f8a103

38 files changed

+350
-109
lines changed

csharp/extractor/Semmle.Extraction.CSharp/Entities/CommentBlock.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,5 @@ private class CommentBlockFactory : CachedEntityFactory<Comments.CommentBlock, C
4242

4343
public override CommentBlock Create(Context cx, Comments.CommentBlock init) => new CommentBlock(cx, init);
4444
}
45-
46-
public override TrapStackBehaviour TrapStackBehaviour => TrapStackBehaviour.NoLabel;
4745
}
4846
}

csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,6 @@ public override void WriteId(EscapingTextWriter trapFile)
8787
trapFile.Write(";compilation");
8888
}
8989

90-
public override TrapStackBehaviour TrapStackBehaviour => TrapStackBehaviour.NoLabel;
91-
9290
public override Location ReportingLocation => throw new NotImplementedException();
9391

9492
public override bool NeedsPopulation => Context.IsAssemblyScope;

csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Diagnostic.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ namespace Semmle.Extraction.CSharp.Entities
44
{
55
internal class Diagnostic : FreshEntity
66
{
7-
public override TrapStackBehaviour TrapStackBehaviour => TrapStackBehaviour.NoLabel;
8-
97
private readonly Microsoft.CodeAnalysis.Diagnostic diagnostic;
108

119
public Diagnostic(Context cx, Microsoft.CodeAnalysis.Diagnostic diag) : base(cx)

csharp/extractor/Semmle.Extraction.CSharp/Entities/Event.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,5 @@ private class EventFactory : CachedEntityFactory<IEventSymbol, Event>
7171

7272
public override Event Create(Context cx, IEventSymbol init) => new Event(cx, init);
7373
}
74-
75-
public override TrapStackBehaviour TrapStackBehaviour => TrapStackBehaviour.NoLabel;
7674
}
7775
}

csharp/extractor/Semmle.Extraction.CSharp/Entities/Namespace.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@ private class NamespaceFactory : CachedEntityFactory<INamespaceSymbol, Namespace
4343
public override Namespace Create(Context cx, INamespaceSymbol init) => new Namespace(cx, init);
4444
}
4545

46-
public override TrapStackBehaviour TrapStackBehaviour => TrapStackBehaviour.NoLabel;
47-
4846
public override int GetHashCode() => QualifiedName.GetHashCode();
4947

5048
private string QualifiedName => Symbol.ToDisplayString();

csharp/extractor/Semmle.Extraction.CSharp/Entities/NamespaceDeclaration.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,6 @@ public override NamespaceDeclaration Create(Context cx, (NamespaceDeclarationSyn
6060
new NamespaceDeclaration(cx, init.decl, init.parent);
6161
}
6262

63-
public override TrapStackBehaviour TrapStackBehaviour => TrapStackBehaviour.NoLabel;
64-
6563
public override Microsoft.CodeAnalysis.Location ReportingLocation => node.Name.GetLocation();
6664

6765
public override bool NeedsPopulation => true;

csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/DefineDirective.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,24 @@ namespace Semmle.Extraction.CSharp.Entities
55
{
66
internal class DefineDirective : PreprocessorDirective<DefineDirectiveTriviaSyntax>
77
{
8-
public DefineDirective(Context cx, DefineDirectiveTriviaSyntax trivia)
8+
private DefineDirective(Context cx, DefineDirectiveTriviaSyntax trivia)
99
: base(cx, trivia)
1010
{
1111
}
1212

1313
protected override void PopulatePreprocessor(TextWriter trapFile)
1414
{
15-
trapFile.directive_defines(this, trivia.Name.ToString());
15+
trapFile.directive_defines(this, Symbol.Name.ToString());
16+
}
17+
18+
public static DefineDirective Create(Context cx, DefineDirectiveTriviaSyntax def) =>
19+
DefineDirectiveFactory.Instance.CreateEntity(cx, def, def);
20+
21+
private class DefineDirectiveFactory : CachedEntityFactory<DefineDirectiveTriviaSyntax, DefineDirective>
22+
{
23+
public static DefineDirectiveFactory Instance { get; } = new DefineDirectiveFactory();
24+
25+
public override DefineDirective Create(Context cx, DefineDirectiveTriviaSyntax init) => new(cx, init);
1626
}
1727
}
1828
}

csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/ElifDirective.cs

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,39 @@ internal class ElifDirective : PreprocessorDirective<ElifDirectiveTriviaSyntax>,
88
private readonly IfDirective start;
99
private readonly int index;
1010

11-
public ElifDirective(Context cx, ElifDirectiveTriviaSyntax trivia, IfDirective start, int index)
12-
: base(cx, trivia, populateFromBase: false)
11+
private ElifDirective(Context cx, ElifDirectiveTriviaSyntax trivia, IfDirective start, int index)
12+
: base(cx, trivia)
1313
{
1414
this.start = start;
1515
this.index = index;
16-
TryPopulate();
1716
}
1817

1918
public bool IsTopLevelParent => true;
2019

20+
public override void WriteId(EscapingTextWriter trapFile)
21+
{
22+
trapFile.WriteSubId(Context.CreateLocation(ReportingLocation));
23+
trapFile.Write(Symbol.IsActive);
24+
trapFile.Write(',');
25+
trapFile.Write(Symbol.ConditionValue);
26+
trapFile.Write(";trivia");
27+
}
28+
2129
protected override void PopulatePreprocessor(TextWriter trapFile)
2230
{
23-
trapFile.directive_elifs(this, trivia.BranchTaken, trivia.ConditionValue, start, index);
31+
trapFile.directive_elifs(this, Symbol.BranchTaken, Symbol.ConditionValue, start, index);
32+
33+
Expression.Create(Context, Symbol.Condition, this, 0);
34+
}
35+
36+
public static ElifDirective Create(Context cx, ElifDirectiveTriviaSyntax elif, IfDirective start, int index) =>
37+
ElifDirectiveFactory.Instance.CreateEntity(cx, elif, (elif, start, index));
38+
39+
private class ElifDirectiveFactory : CachedEntityFactory<(ElifDirectiveTriviaSyntax elif, IfDirective start, int index), ElifDirective>
40+
{
41+
public static ElifDirectiveFactory Instance { get; } = new ElifDirectiveFactory();
2442

25-
Expression.Create(Context, trivia.Condition, this, 0);
43+
public override ElifDirective Create(Context cx, (ElifDirectiveTriviaSyntax elif, IfDirective start, int index) init) => new(cx, init.elif, init.start, init.index);
2644
}
2745
}
2846
}

csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/ElseDirective.cs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,26 @@ internal class ElseDirective : PreprocessorDirective<ElseDirectiveTriviaSyntax>,
88
private readonly IfDirective start;
99
private readonly int index;
1010

11-
public ElseDirective(Context cx, ElseDirectiveTriviaSyntax trivia, IfDirective start, int index)
12-
: base(cx, trivia, populateFromBase: false)
11+
private ElseDirective(Context cx, ElseDirectiveTriviaSyntax trivia, IfDirective start, int index)
12+
: base(cx, trivia)
1313
{
1414
this.start = start;
1515
this.index = index;
16-
TryPopulate();
1716
}
1817

1918
protected override void PopulatePreprocessor(TextWriter trapFile)
2019
{
21-
trapFile.directive_elses(this, trivia.BranchTaken, start, index);
20+
trapFile.directive_elses(this, Symbol.BranchTaken, start, index);
21+
}
22+
23+
public static ElseDirective Create(Context cx, ElseDirectiveTriviaSyntax @else, IfDirective start, int index) =>
24+
ElseDirectiveFactory.Instance.CreateEntity(cx, @else, (@else, start, index));
25+
26+
private class ElseDirectiveFactory : CachedEntityFactory<(ElseDirectiveTriviaSyntax @else, IfDirective start, int index), ElseDirective>
27+
{
28+
public static ElseDirectiveFactory Instance { get; } = new ElseDirectiveFactory();
29+
30+
public override ElseDirective Create(Context cx, (ElseDirectiveTriviaSyntax @else, IfDirective start, int index) init) => new(cx, init.@else, init.start, init.index);
2231
}
2332
}
2433
}

csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/EndIfDirective.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,25 @@ internal class EndIfDirective : PreprocessorDirective<EndIfDirectiveTriviaSyntax
77
{
88
private readonly IfDirective start;
99

10-
public EndIfDirective(Context cx, EndIfDirectiveTriviaSyntax trivia, IfDirective start)
11-
: base(cx, trivia, populateFromBase: false)
10+
private EndIfDirective(Context cx, EndIfDirectiveTriviaSyntax trivia, IfDirective start)
11+
: base(cx, trivia)
1212
{
1313
this.start = start;
14-
TryPopulate();
1514
}
1615

1716
protected override void PopulatePreprocessor(TextWriter trapFile)
1817
{
1918
trapFile.directive_endifs(this, start);
2019
}
20+
21+
public static EndIfDirective Create(Context cx, EndIfDirectiveTriviaSyntax endif, IfDirective start) =>
22+
EndIfDirectiveFactory.Instance.CreateEntity(cx, endif, (endif, start));
23+
24+
private class EndIfDirectiveFactory : CachedEntityFactory<(EndIfDirectiveTriviaSyntax endif, IfDirective start), EndIfDirective>
25+
{
26+
public static EndIfDirectiveFactory Instance { get; } = new EndIfDirectiveFactory();
27+
28+
public override EndIfDirective Create(Context cx, (EndIfDirectiveTriviaSyntax endif, IfDirective start) init) => new(cx, init.endif, init.start);
29+
}
2130
}
2231
}

0 commit comments

Comments
 (0)