Skip to content

Commit f337459

Browse files
committed
Ruby: Cache capturedEntryWrite
1 parent b041bc0 commit f337459

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,6 @@ private predicate hasCapturedVariableRead(BasicBlock bb, LocalVariable v) {
2020
)
2121
}
2222

23-
/**
24-
* Holds if an entry definition is needed for captured variable `v` at index
25-
* `i` in entry block `bb`.
26-
*/
27-
predicate capturedEntryWrite(EntryBasicBlock bb, int i, LocalVariable v) {
28-
hasCapturedVariableRead(bb.getASuccessor*(), v) and
29-
i = -1
30-
}
31-
3223
/** Holds if `bb` contains a caputured write to variable `v`. */
3324
pragma[noinline]
3425
private predicate writesCapturedVariable(BasicBlock bb, LocalVariable v) {
@@ -132,6 +123,16 @@ private predicate hasVariableReadWithCapturedWrite(BasicBlock bb, LocalVariable
132123

133124
cached
134125
private module Cached {
126+
/**
127+
* Holds if an entry definition is needed for captured variable `v` at index
128+
* `i` in entry block `bb`.
129+
*/
130+
cached
131+
predicate capturedEntryWrite(EntryBasicBlock bb, int i, LocalVariable v) {
132+
hasCapturedVariableRead(bb.getASuccessor*(), v) and
133+
i = -1
134+
}
135+
135136
/**
136137
* Holds if the call at index `i` in basic block `bb` may reach a callable
137138
* that writes captured variable `v`.

0 commit comments

Comments
 (0)