@@ -18,34 +18,20 @@ module Kernel {
18
18
* providing a specific receiver as in `Kernel.exit`.
19
19
*/
20
20
class KernelMethodCall extends DataFlow:: CallNode {
21
- string methodName ;
22
-
23
21
KernelMethodCall ( ) {
24
- this = API:: getTopLevelMember ( "Kernel" ) .getAMethodCall ( methodName )
22
+ this = API:: getTopLevelMember ( "Kernel" ) .getAMethodCall ( _ )
25
23
or
26
24
this .asExpr ( ) .getExpr ( ) instanceof UnknownMethodCall and
27
- (
28
- methodName = super .getMethodName ( )
29
- or
30
- this .asExpr ( ) .getExpr ( ) instanceof SuperCall and
31
- methodName = this .asExpr ( ) .getExpr ( ) .getEnclosingCallable ( ) .( MethodBase ) .getName ( )
32
- ) and
33
25
(
34
26
this .getReceiver ( ) .asExpr ( ) .getExpr ( ) instanceof SelfVariableAccess and
35
- isPrivateKernelMethod ( methodName )
27
+ isPrivateKernelMethod ( super . getMethodName ( ) )
36
28
or
37
29
this .asExpr ( ) .getExpr ( ) instanceof SuperCall and
38
- isPrivateKernelMethod ( methodName )
30
+ isPrivateKernelMethod ( super . getMethodName ( ) )
39
31
or
40
- isPublicKernelMethod ( methodName )
32
+ isPublicKernelMethod ( super . getMethodName ( ) )
41
33
)
42
34
}
43
-
44
- /**
45
- * Gets which method of `Kernel` is called.
46
- * Works even when the call is a `super(...)` call.
47
- */
48
- string getKernelMethod ( ) { result = methodName }
49
35
}
50
36
51
37
/**
@@ -110,7 +96,7 @@ module Kernel {
110
96
* Ruby documentation: https://docs.ruby-lang.org/en/3.0.0/Kernel.html#method-i-system
111
97
*/
112
98
class KernelSystemCall extends SystemCommandExecution:: Range instanceof KernelMethodCall {
113
- KernelSystemCall ( ) { this .getKernelMethod ( ) = "system" }
99
+ KernelSystemCall ( ) { this .getMethodName ( ) = "system" }
114
100
115
101
override DataFlow:: Node getAnArgument ( ) { result = super .getArgument ( _) }
116
102
@@ -126,7 +112,7 @@ module Kernel {
126
112
* Ruby documentation: https://docs.ruby-lang.org/en/3.0.0/Kernel.html#method-i-exec
127
113
*/
128
114
class KernelExecCall extends SystemCommandExecution:: Range instanceof KernelMethodCall {
129
- KernelExecCall ( ) { this .getKernelMethod ( ) = "exec" }
115
+ KernelExecCall ( ) { this .getMethodName ( ) = "exec" }
130
116
131
117
override DataFlow:: Node getAnArgument ( ) { result = super .getArgument ( _) }
132
118
@@ -147,7 +133,7 @@ module Kernel {
147
133
* ```
148
134
*/
149
135
class KernelSpawnCall extends SystemCommandExecution:: Range instanceof KernelMethodCall {
150
- KernelSpawnCall ( ) { this .getKernelMethod ( ) = "spawn" }
136
+ KernelSpawnCall ( ) { this .getMethodName ( ) = "spawn" }
151
137
152
138
override DataFlow:: Node getAnArgument ( ) { result = super .getArgument ( _) }
153
139
@@ -166,7 +152,7 @@ module Kernel {
166
152
* ```
167
153
*/
168
154
class EvalCallCodeExecution extends CodeExecution:: Range , KernelMethodCall {
169
- EvalCallCodeExecution ( ) { this .getKernelMethod ( ) = "eval" }
155
+ EvalCallCodeExecution ( ) { this .getMethodName ( ) = "eval" }
170
156
171
157
override DataFlow:: Node getCode ( ) { result = this .getArgument ( 0 ) }
172
158
}
@@ -180,7 +166,7 @@ module Kernel {
180
166
* ```
181
167
*/
182
168
class SendCallCodeExecution extends CodeExecution:: Range , KernelMethodCall {
183
- SendCallCodeExecution ( ) { this .getKernelMethod ( ) = "send" }
169
+ SendCallCodeExecution ( ) { this .getMethodName ( ) = "send" }
184
170
185
171
override DataFlow:: Node getCode ( ) { result = this .getArgument ( 0 ) }
186
172
@@ -200,15 +186,15 @@ module Kernel {
200
186
/** A call to e.g. `Kernel.load` that accesses a file. */
201
187
private class KernelFileAccess extends FileSystemAccess:: Range instanceof KernelMethodCall {
202
188
KernelFileAccess ( ) {
203
- super .getKernelMethod ( ) = [ "load" , "require" , "require_relative" , "autoload" , "autoload?" ]
189
+ super .getMethodName ( ) = [ "load" , "require" , "require_relative" , "autoload" , "autoload?" ]
204
190
}
205
191
206
192
override DataFlow:: Node getAPathArgument ( ) {
207
193
result = super .getArgument ( 0 ) and
208
- super .getKernelMethod ( ) = [ "load" , "require" , "require_relative" ]
194
+ super .getMethodName ( ) = [ "load" , "require" , "require_relative" ]
209
195
or
210
196
result = super .getArgument ( 1 ) and
211
- super .getKernelMethod ( ) = [ "autoload" , "autoload?" ]
197
+ super .getMethodName ( ) = [ "autoload" , "autoload?" ]
212
198
}
213
199
}
214
200
}
0 commit comments