File tree Expand file tree Collapse file tree 1 file changed +17
-9
lines changed
ruby/ql/lib/codeql/ruby/ast/internal Expand file tree Collapse file tree 1 file changed +17
-9
lines changed Original file line number Diff line number Diff line change @@ -211,21 +211,29 @@ private module ImplicitSelfSynthesis {
211
211
}
212
212
}
213
213
214
- /**
215
- * Gets the "owner" of a node. For real nodes this is the node itself, for synthetic nodes
216
- * this is the closest parent that is a real node.
217
- */
218
- private TAstNodeReal owner ( AstNode node ) { result = synthParent * ( node ) }
214
+ pragma [ nomagic]
215
+ private AstNode instanceVarAccessSynthParentStar ( InstanceVariableAccess var ) {
216
+ result = var
217
+ or
218
+ instanceVarAccessSynthParentStar ( var ) = getSynthChild ( result , _)
219
+ }
219
220
220
221
/**
221
- * Gets the parent of a synthetic node
222
+ * Gets the `SelfKind` for instance variable access `var`. This is based on the
223
+ * "owner" of `var`; for real nodes this is the node itself, for synthetic nodes
224
+ * this is the closest parent that is a real node.
222
225
*/
223
- private AstNode synthParent ( AstNode node ) { node = getSynthChild ( result , _) }
226
+ pragma [ nomagic]
227
+ private SelfKind getSelfKind ( InstanceVariableAccess var ) {
228
+ exists ( Ruby:: AstNode owner |
229
+ owner = toGenerated ( instanceVarAccessSynthParentStar ( var ) ) and
230
+ result = SelfKind ( TSelfVariable ( scopeOf ( owner ) .getEnclosingSelfScope ( ) ) )
231
+ )
232
+ }
224
233
225
234
pragma [ nomagic]
226
235
private predicate instanceVariableSelfSynthesis ( InstanceVariableAccess var , int i , Child child ) {
227
- child =
228
- SynthChild ( SelfKind ( TSelfVariable ( scopeOf ( toGenerated ( owner ( var ) ) ) .getEnclosingSelfScope ( ) ) ) ) and
236
+ child = SynthChild ( getSelfKind ( var ) ) and
229
237
i = 0
230
238
}
231
239
You can’t perform that action at this time.
0 commit comments