mirror of
https://github.com/github/codeql.git
synced 2026-05-03 04:39:29 +02:00
Extract define directives
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
using System.IO;
|
||||
|
||||
namespace Semmle.Extraction.CSharp.Entities
|
||||
{
|
||||
internal class DefineDirective : PreprocessorDirective<DefineDirectiveTriviaSyntax>
|
||||
{
|
||||
public DefineDirective(Context cx, DefineDirectiveTriviaSyntax trivia)
|
||||
: base(cx, trivia)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void PopulatePreprocessor(TextWriter trapFile)
|
||||
{
|
||||
trapFile.directive_defines(this, trivia.Name.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,5 +22,10 @@ namespace Semmle.Extraction.CSharp.Populators
|
||||
{
|
||||
new Entities.PragmaChecksumDirective(cx, node);
|
||||
}
|
||||
|
||||
public override void VisitDefineDirectiveTrivia(DefineDirectiveTriviaSyntax node)
|
||||
{
|
||||
new Entities.DefineDirective(cx, node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -620,5 +620,10 @@ namespace Semmle.Extraction.CSharp
|
||||
{
|
||||
trapFile.WriteTuple("pragma_checksums", pragma, file, guid, bytes);
|
||||
}
|
||||
|
||||
internal static void directive_defines(this TextWriter trapFile, DefineDirective directive, string name)
|
||||
{
|
||||
trapFile.WriteTuple("directive_defines", directive, name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,3 +46,15 @@ class PragmaChecksumDirective extends PreprocessorDirective, @pragma_checksum {
|
||||
|
||||
override string getAPrimaryQlClass() { result = "PragmaChecksumDirective" }
|
||||
}
|
||||
|
||||
/**
|
||||
* An `#define` directive.
|
||||
*/
|
||||
class DefineDirective extends PreprocessorDirective, @directive_define {
|
||||
/** Gets the name of the preprocessor symbol that is being set by this directive. */
|
||||
string getName() { directive_defines(this, result) }
|
||||
|
||||
override string toString() { result = "#define ..." }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "DefineDirective" }
|
||||
}
|
||||
|
||||
@@ -331,7 +331,11 @@ using_directive_location(
|
||||
unique int id: @using_directive ref,
|
||||
int loc: @location ref);
|
||||
|
||||
@preprocessor_directive = @pragma_warning | @pragma_checksum;
|
||||
@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define;
|
||||
|
||||
directive_defines(
|
||||
unique int id: @directive_define,
|
||||
string name: string ref);
|
||||
|
||||
pragma_checksums(
|
||||
unique int id: @pragma_checksum,
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
| trivia.cs:4:1:4:13 | #define ... | DEBUG |
|
||||
@@ -0,0 +1,4 @@
|
||||
import csharp
|
||||
|
||||
from DefineDirective d
|
||||
select d, d.getName()
|
||||
Reference in New Issue
Block a user