mirror of
https://github.com/github/codeql.git
synced 2025-12-20 10:46:30 +01:00
- 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.
9 lines
258 B
Plaintext
9 lines
258 B
Plaintext
import csharp
|
|
import semmle.code.csharp.controlflow.Guards
|
|
|
|
from GuardedExpr ge, Expr e, AbstractValues::MatchValue v, boolean match
|
|
where
|
|
e = ge.getAGuard(e, v) and
|
|
if v.isMatch() then match = true else match = false
|
|
select ge, e, v.getCase(), v, match
|