mirror of
https://github.com/github/codeql.git
synced 2026-04-29 18:55:14 +02:00
C#: Refactor recursive patterns implementation
- Extract names of properties in a propery match, using the `exprorstmt_name` relation. - Simplify extraction of properties by not distinguishing between top-level patterns and nested patterns. - Introduce `PatternExpr` to capture patterns in `is` expressions, `case` statements, and `switch` expression arms. - Generalize `IsTypeExpr`, `IsPatternExpr`, `IsRecursivePatternExpr`, and `IsConstantExpr` to just `IsExpr` with a member predicate `PatternExpr getPattern()`. - Generalize `TypeCase`, `RecursivePatternCase`, and `ConstCase` to just `CaseStmt` with a member predicate `PatternExpr getPattern()`. - Introduce classes `Switch` and `Case` as base classes of switch statements/expressions and case statements/switch expression arms, respectively. - Simplify CFG logic using the generalized classes. - Generalize guards library to cover `switch` expressions tests. - Generalize data flow library to cover `switch` expression assignments.
This commit is contained in:
@@ -87,9 +87,7 @@ class RelevantDefinition extends AssignableDefinition {
|
||||
lvde = any(ForeachStmt fs).getVariableDeclExpr()
|
||||
)
|
||||
or
|
||||
this instanceof AssignableDefinitions::IsPatternDefinition
|
||||
or
|
||||
this instanceof AssignableDefinitions::TypeCasePatternDefinition
|
||||
this instanceof AssignableDefinitions::PatternDefinition
|
||||
}
|
||||
|
||||
/** Holds if this assignment may be live. */
|
||||
|
||||
Reference in New Issue
Block a user