CFG: improve handling of block and lambda

This commit is contained in:
Arthur Baars
2020-12-15 19:01:29 +01:00
parent 30895e634c
commit f2effce786
2 changed files with 21 additions and 3 deletions

View File

@@ -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)
}
}
}

View File

@@ -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