mirror of
https://github.com/github/codeql.git
synced 2026-02-20 00:43:44 +01:00
CFG: improve handling of block and lambda
This commit is contained in:
@@ -73,10 +73,26 @@ private module CfgScope {
|
||||
|
||||
private class BlockScope extends Range, Generated::Block {
|
||||
final override string getName() { result = "block" }
|
||||
|
||||
final override predicate entry(Generated::AstNode first) {
|
||||
first(this.(Trees::BlockTree).getFirstChildNode(), first)
|
||||
}
|
||||
|
||||
final override predicate exit(Generated::AstNode last, Completion c) {
|
||||
last(this.(Trees::BlockTree).getLastChildNode(), last, c)
|
||||
}
|
||||
}
|
||||
|
||||
private class LambdaScope extends Range, Generated::Lambda {
|
||||
final override string getName() { result = "lambda" }
|
||||
|
||||
final override predicate entry(Generated::AstNode first) {
|
||||
first(this.(Trees::LambdaTree).getFirstChildNode(), first)
|
||||
}
|
||||
|
||||
final override predicate exit(Generated::AstNode last, Completion c) {
|
||||
last(this.(Trees::LambdaTree).getLastChildNode(), last, c)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -295,7 +295,7 @@ module Trees {
|
||||
}
|
||||
}
|
||||
|
||||
private class BlockTree extends StandardPreOrderTree, Block {
|
||||
class BlockTree extends StandardNode, PreOrderTree, PostOrderTree, Block {
|
||||
final override AstNode getChildNode(int i) {
|
||||
result = this.getParameters() and i = 0
|
||||
or
|
||||
@@ -439,7 +439,9 @@ module Trees {
|
||||
override predicate isHidden() { any() }
|
||||
}
|
||||
|
||||
private class DoBlockTree extends RescueEnsureBlockTree, PreOrderTree, PostOrderTree, DoBlock {
|
||||
private class DoBlockTree extends RescueEnsureBlockTree, PostOrderTree, DoBlock {
|
||||
final override predicate first(AstNode first) { first = this }
|
||||
|
||||
final override AstNode getChildNode(int i, boolean rescuable) {
|
||||
result = this.getParameters() and i = 0 and rescuable = false
|
||||
or
|
||||
@@ -687,7 +689,7 @@ module Trees {
|
||||
final override AstNode getDefaultValue() { result = this.getValue() }
|
||||
}
|
||||
|
||||
private class LambdaTree extends StandardPreOrderTree, Lambda {
|
||||
class LambdaTree extends StandardNode, PreOrderTree, PostOrderTree, Lambda {
|
||||
final override AstNode getChildNode(int i) {
|
||||
result = this.getParameters() and i = 0
|
||||
or
|
||||
|
||||
Reference in New Issue
Block a user