Skip to content

Commit 02192ac

Browse files
committed
Ruby: Avoid computing full fastTC for AstNode::getParent
DIL before ``` /* AST::AstNode */ AST#87953007::Cached::TAstNode result) = fastTC(AST#a6718388::AstNode::getAChild#0#dispred#ff/2) . Synthesis#d9ff06b1::Desugared::getADescendant#0#dispred#ff(/* Synthesis::Desugared */ AST#87953007::Cached::TAstNode this, /* AST::AstNode */ AST#87953007::Cached::TAstNode result) :- ( exists(int arg1, /* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ | arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, this) ), result = this ); ( exists(int arg1, /* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ | arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, this) ), #AST#a6718388::AstNode::getAChild#0#dispredPlus#ff(this, result) ) . ``` DIL after ``` incremental Synthesis#d9ff06b1::Desugared::getADescendant#ff(/* Synthesis::Desugared */ AST#87953007::Cached::TAstNode this, /* AST::AstNode */ AST#87953007::Cached::TAstNode result) :- ( exists(int arg1, /* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ | arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, this) ), result = this ); exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode call_result#2 | exists(int arg1, /* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ | arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, this) ), rec Synthesis#d9ff06b1::Desugared::getADescendant#ff(this, call_result#2), exists(cached dontcare string _ | AST#a6718388::AstNode::getAChild#1#dispred(call_result#2, _, result) ) ) | [base_case] exists(int arg1, /* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ | arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, this) ), result = this | [delta_order] exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode call_result#2 | exists(int arg1, /* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ | arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, this) ), delta previous rec Synthesis#d9ff06b1::Desugared::getADescendant#ff(this, call_result#2), project#AST#a6718388::AstNode::getAChild#1#dispred(call_result#2, result) ), not( previous rec Synthesis#d9ff06b1::Desugared::getADescendant#ff(this, result) ) | [delta_order_up_to_500000] exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode call_result#2 | delta previous rec Synthesis#d9ff06b1::Desugared::getADescendant#ff(this, call_result#2), exists(int arg1, /* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ | arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, this) ), project#AST#a6718388::AstNode::getAChild#1#dispred(call_result#2, result) ), not( previous rec Synthesis#d9ff06b1::Desugared::getADescendant#ff(this, result) ) . ```
1 parent d39b0fd commit 02192ac

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

ruby/ql/lib/codeql/ruby/ast/internal/Synthesis.qll

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,11 @@ class Synthesis extends TSynthesis {
118118
private class Desugared extends AstNode {
119119
Desugared() { this = any(AstNode sugar).getDesugared() }
120120

121-
AstNode getADescendant() { result = this.getAChild*() }
121+
AstNode getADescendant() {
122+
result = this
123+
or
124+
result = this.getADescendant().getAChild()
125+
}
122126
}
123127

124128
/**

0 commit comments

Comments
 (0)