C++: Add LeaveStmt class

This commit is contained in:
idrissrio
2025-06-11 14:37:17 +02:00
parent 7a4de55ac2
commit f6fa707770

View File

@@ -841,6 +841,41 @@ private Stmt getEnclosingBreakable(Stmt s) {
else result = getEnclosingBreakable(s.getParent().getEnclosingStmt())
}
/**
* A Microsoft C/C++ `__leave` statement.
*
* For example, the `__leave` statement in the following code:
* ```
* __try {
* if (err) __leave;
* ...
* }
* __finally {
*
* }
* ```
*/
class LeaveStmt extends JumpStmt, @stmt_leave {
override string getAPrimaryQlClass() { result = "LeaveStmt" }
override string toString() { result = "__leave;" }
override predicate mayBeImpure() { none() }
override predicate mayBeGloballyImpure() { none() }
/**
* Gets the `__try` statement that this `__leave` exits.
*/
MicrosoftTryStmt getEnclosingTry() { result = getEnclosingTry(this) }
}
private MicrosoftTryStmt getEnclosingTry(Stmt s) {
if s.getParent().getEnclosingStmt() instanceof MicrosoftTryStmt
then result = s.getParent().getEnclosingStmt()
else result = getEnclosingTry(s.getParent().getEnclosingStmt())
}
/**
* A C/C++ 'label' statement.
*