CFG: fix BEGIN and END blocks

This commit is contained in:
Arthur Baars
2020-12-16 09:49:19 +01:00
parent f2fd1c7931
commit 81c907a87a
3 changed files with 22 additions and 8 deletions

View File

@@ -23,10 +23,26 @@ private module CfgScope {
private class BeginBlockScope extends Range, Generated::BeginBlock {
final override string getName() { result = "BEGIN block" }
final override predicate entry(Generated::AstNode first) {
first(this.(Trees::BeginBlockTree).getFirstChildNode(), first)
}
final override predicate exit(Generated::AstNode last, Completion c) {
last(this.(Trees::BeginBlockTree).getLastChildNode(), last, c)
}
}
private class EndBlockScope extends Range, Generated::EndBlock {
final override string getName() { result = "END block" }
final override predicate entry(Generated::AstNode first) {
first(this.(Trees::EndBlockTree).getFirstChildNode(), first)
}
final override predicate exit(Generated::AstNode last, Completion c) {
last(this.(Trees::EndBlockTree).getLastChildNode(), last, c)
}
}
private class MethodScope extends Range, Generated::AstNode {

View File

@@ -274,7 +274,7 @@ module Trees {
override predicate isHidden() { any() }
}
private class BeginBlockTree extends StandardPreOrderTree, BeginBlock {
class BeginBlockTree extends PreOrderTree, PostOrderTree, StandardNode, BeginBlock {
final override AstNode getChildNode(int i) { result = this.getChild(i) }
}
@@ -456,7 +456,7 @@ module Trees {
private class EmptyStatementTree extends LeafTree, EmptyStatement { }
private class EndBlockTree extends StandardPreOrderTree, EndBlock {
class EndBlockTree extends StandardNode, PreOrderTree, PostOrderTree, EndBlock {
final override AstNode getChildNode(int i) { result = this.getChild(i) }
}

View File

@@ -26,10 +26,10 @@ cfg.rb:
#-----| -> bar
# 15| enter BEGIN block
#-----| -> BeginBlock
#-----| -> String
# 19| enter END block
#-----| -> EndBlock
#-----| -> String
# 25| enter block
#-----| -> x
@@ -608,10 +608,9 @@ cfg.rb:
#-----| -> puts
# 15| BeginBlock
#-----| -> String
#-----| -> EndBlock
# 16| Call
#-----| -> EndBlock
#-----| -> exit BEGIN block (normal)
# 16| puts
@@ -621,10 +620,9 @@ cfg.rb:
#-----| -> puts
# 19| EndBlock
#-----| -> String
#-----| -> 41
# 20| Call
#-----| -> 41
#-----| -> exit END block (normal)
# 20| puts