mirror of
https://github.com/github/codeql.git
synced 2026-05-03 20:58:03 +02:00
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::isInDesugaredContext#1#f(/* AST::AstNode */ unique AST#87953007::Cached::TAstNode n)
:-
exists(int arg1, /* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ |
arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, n)
);
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, call_result#2)
),
#AST#a6718388::AstNode::getAChild#0#dispredPlus#ff(call_result#2, n)
)
.
```
DIL after
```
incremental
Synthesis#d9ff06b1::isInDesugaredContext#1#f(/* AST::AstNode */ unique AST#87953007::Cached::TAstNode n)
:-
exists(int arg1, /* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ |
arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, n)
);
exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode any#expr##2 |
rec Synthesis#d9ff06b1::isInDesugaredContext#1#f(any#expr##2),
exists(cached dontcare string _ |
AST#a6718388::AstNode::getAChild#1#dispred(any#expr##2, _, n)
)
)
| [base_case]
exists(int arg1, /* AST::AstNode */ dontcare AST#87953007::Cached::TAstNode _ |
arg1 = -1, AST#87953007::Cached::getSynthChild#2(_, arg1, n)
)
| [delta_order]
exists(/* AST::AstNode */ AST#87953007::Cached::TAstNode any#expr##2 |
delta previous rec Synthesis#d9ff06b1::isInDesugaredContext#1#f(any#expr##2),
project#AST#a6718388::AstNode::getAChild#1#dispred(any#expr##2, n)
),
not(previous rec Synthesis#d9ff06b1::isInDesugaredContext#1#f(n))
.
``
This commit is contained in:
@@ -132,7 +132,10 @@ int desugarLevel(AstNode n) { result = count(Desugared desugared | n = desugared
|
||||
* Holds if `n` appears in a context that is desugared. That is, a
|
||||
* transitive, reflexive parent of `n` is a desugared node.
|
||||
*/
|
||||
predicate isInDesugaredContext(AstNode n) { n = any(AstNode sugar).getDesugared().getAChild*() }
|
||||
predicate isInDesugaredContext(AstNode n) {
|
||||
n = any(AstNode sugar).getDesugared() or
|
||||
n = any(AstNode mid | isInDesugaredContext(mid)).getAChild()
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if `n` is a node that only exists as a result of desugaring some
|
||||
|
||||
Reference in New Issue
Block a user