Skip to content

Commit 55cb2aa

Browse files
committed
C#: Use modifier to decide, if a type is a record like type and implement support for record struct types.
1 parent dc76775 commit 55cb2aa

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

csharp/ql/lib/semmle/code/cil/Types.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class Class extends ValueOrRefType {
6161
}
6262

6363
/** A `record`. */
64-
class Record extends Class {
64+
deprecated class Record extends Class {
6565
Record() { this.isRecord() }
6666
}
6767

csharp/ql/lib/semmle/code/csharp/Type.qll

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,8 @@ class ValueOrRefType extends DotNet::ValueOrRefType, Type, Attributable, @value_
372372
nested_types(this, _, result)
373373
}
374374

375+
override predicate isRecord() { this.hasModifier("record") }
376+
375377
override string toString() { result = Type.super.toString() }
376378
}
377379

@@ -711,6 +713,20 @@ class Struct extends ValueType, @struct_type {
711713
override string getAPrimaryQlClass() { result = "Struct" }
712714
}
713715

716+
/**
717+
* A `record struct`, for example
718+
* ```csharp
719+
* record struct RS {
720+
* ...
721+
* }
722+
* ```
723+
*/
724+
class RecordStruct extends Struct {
725+
RecordStruct() { this.isRecord() }
726+
727+
override string getAPrimaryQlClass() { result = "RecordStruct" }
728+
}
729+
714730
/**
715731
* A reference type.
716732
*

0 commit comments

Comments
 (0)