Skip to content

Commit 1bd3d29

Browse files
committed
Ruby: workaround issue with 'def self.method' in a block
1 parent 17a246b commit 1bd3d29

File tree

6 files changed

+63
-59
lines changed

6 files changed

+63
-59
lines changed

ruby/ql/test/library-tests/modules/ancestors.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,4 +229,4 @@ toplevel_self_singleton.rb:
229229
# 2| A::B
230230
#-----| super -> Object
231231

232-
# 23| Good
232+
# 24| Good

ruby/ql/test/library-tests/modules/callgraph.expected

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,8 @@ getTarget
265265
| private.rb:104:1:104:20 | call to new | calls.rb:117:5:117:16 | new |
266266
| private.rb:104:1:104:28 | call to call_m1 | private.rb:91:3:93:5 | call_m1 |
267267
| private.rb:105:1:105:20 | call to new | calls.rb:117:5:117:16 | new |
268-
| toplevel_self_singleton.rb:29:13:29:19 | call to call_me | toplevel_self_singleton.rb:25:9:26:11 | call_me |
269-
| toplevel_self_singleton.rb:30:13:30:20 | call to call_you | toplevel_self_singleton.rb:28:9:31:11 | call_you |
268+
| toplevel_self_singleton.rb:30:13:30:19 | call to call_me | toplevel_self_singleton.rb:26:9:27:11 | call_me |
269+
| toplevel_self_singleton.rb:31:13:31:20 | call to call_you | toplevel_self_singleton.rb:29:9:32:11 | call_you |
270270
unresolvedCall
271271
| calls.rb:23:9:23:19 | call to singleton_m |
272272
| calls.rb:26:9:26:18 | call to instance_m |
@@ -353,11 +353,11 @@ unresolvedCall
353353
| private.rb:57:1:57:14 | call to private4 |
354354
| private.rb:100:7:100:29 | call to m1 |
355355
| private.rb:105:1:105:23 | call to m1 |
356-
| toplevel_self_singleton.rb:8:1:15:3 | call to do_something |
356+
| toplevel_self_singleton.rb:8:1:16:3 | call to do_something |
357357
| toplevel_self_singleton.rb:10:9:10:27 | call to ab_singleton_method |
358-
| toplevel_self_singleton.rb:13:9:13:27 | call to ab_singleton_method |
359-
| toplevel_self_singleton.rb:17:12:21:1 | call to new |
360-
| toplevel_self_singleton.rb:19:9:19:27 | call to ab_singleton_method |
358+
| toplevel_self_singleton.rb:14:9:14:27 | call to ab_singleton_method |
359+
| toplevel_self_singleton.rb:18:12:22:1 | call to new |
360+
| toplevel_self_singleton.rb:20:9:20:27 | call to ab_singleton_method |
361361
privateMethod
362362
| calls.rb:1:1:3:3 | foo |
363363
| calls.rb:39:1:41:3 | call_instance_m |
@@ -472,10 +472,10 @@ publicMethod
472472
| private.rb:66:3:67:5 | public |
473473
| private.rb:91:3:93:5 | call_m1 |
474474
| toplevel_self_singleton.rb:3:9:4:11 | ab_singleton_method |
475-
| toplevel_self_singleton.rb:12:5:14:7 | method_in_block |
476-
| toplevel_self_singleton.rb:18:5:20:7 | method_in_struct |
477-
| toplevel_self_singleton.rb:25:9:26:11 | call_me |
478-
| toplevel_self_singleton.rb:28:9:31:11 | call_you |
475+
| toplevel_self_singleton.rb:13:5:15:7 | method_in_block |
476+
| toplevel_self_singleton.rb:19:5:21:7 | method_in_struct |
477+
| toplevel_self_singleton.rb:26:9:27:11 | call_me |
478+
| toplevel_self_singleton.rb:29:9:32:11 | call_you |
479479
protectedMethod
480480
| calls.rb:514:15:516:7 | foo |
481481
| calls.rb:522:15:524:7 | bar |

ruby/ql/test/library-tests/modules/methods.expected

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -945,11 +945,11 @@ enclosingMethod
945945
| private.rb:100:7:100:29 | call to m1 | private.rb:97:11:101:5 | m1 |
946946
| toplevel_self_singleton.rb:10:9:10:27 | call to ab_singleton_method | toplevel_self_singleton.rb:9:5:11:7 | method_in_block |
947947
| toplevel_self_singleton.rb:10:9:10:27 | self | toplevel_self_singleton.rb:9:5:11:7 | method_in_block |
948-
| toplevel_self_singleton.rb:13:9:13:27 | call to ab_singleton_method | toplevel_self_singleton.rb:12:5:14:7 | method_in_block |
949-
| toplevel_self_singleton.rb:13:9:13:27 | self | toplevel_self_singleton.rb:12:5:14:7 | method_in_block |
950-
| toplevel_self_singleton.rb:19:9:19:27 | call to ab_singleton_method | toplevel_self_singleton.rb:18:5:20:7 | method_in_struct |
951-
| toplevel_self_singleton.rb:19:9:19:27 | self | toplevel_self_singleton.rb:18:5:20:7 | method_in_struct |
952-
| toplevel_self_singleton.rb:29:13:29:19 | call to call_me | toplevel_self_singleton.rb:28:9:31:11 | call_you |
953-
| toplevel_self_singleton.rb:29:13:29:19 | self | toplevel_self_singleton.rb:28:9:31:11 | call_you |
954-
| toplevel_self_singleton.rb:30:13:30:20 | call to call_you | toplevel_self_singleton.rb:28:9:31:11 | call_you |
955-
| toplevel_self_singleton.rb:30:13:30:20 | self | toplevel_self_singleton.rb:28:9:31:11 | call_you |
948+
| toplevel_self_singleton.rb:14:9:14:27 | call to ab_singleton_method | toplevel_self_singleton.rb:13:5:15:7 | method_in_block |
949+
| toplevel_self_singleton.rb:14:9:14:27 | self | toplevel_self_singleton.rb:13:5:15:7 | method_in_block |
950+
| toplevel_self_singleton.rb:20:9:20:27 | call to ab_singleton_method | toplevel_self_singleton.rb:19:5:21:7 | method_in_struct |
951+
| toplevel_self_singleton.rb:20:9:20:27 | self | toplevel_self_singleton.rb:19:5:21:7 | method_in_struct |
952+
| toplevel_self_singleton.rb:30:13:30:19 | call to call_me | toplevel_self_singleton.rb:29:9:32:11 | call_you |
953+
| toplevel_self_singleton.rb:30:13:30:19 | self | toplevel_self_singleton.rb:29:9:32:11 | call_you |
954+
| toplevel_self_singleton.rb:31:13:31:20 | call to call_you | toplevel_self_singleton.rb:29:9:32:11 | call_you |
955+
| toplevel_self_singleton.rb:31:13:31:20 | self | toplevel_self_singleton.rb:29:9:32:11 | call_you |

ruby/ql/test/library-tests/modules/modules.expected

Lines changed: 41 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ getModule
8181
| private.rb:82:1:94:3 | PrivateOverride1 |
8282
| private.rb:96:1:102:3 | PrivateOverride2 |
8383
| toplevel_self_singleton.rb:2:5:5:7 | A::B |
84-
| toplevel_self_singleton.rb:23:1:33:3 | Good |
84+
| toplevel_self_singleton.rb:24:1:34:3 | Good |
8585
getADeclaration
8686
| calls.rb:21:1:34:3 | M | calls.rb:21:1:34:3 | M |
8787
| calls.rb:43:1:58:3 | C | calls.rb:43:1:58:3 | C |
@@ -97,7 +97,7 @@ getADeclaration
9797
| calls.rb:115:1:118:3 | Object | modules.rb:1:1:129:4 | modules.rb |
9898
| calls.rb:115:1:118:3 | Object | modules_rec.rb:1:1:11:26 | modules_rec.rb |
9999
| calls.rb:115:1:118:3 | Object | private.rb:1:1:105:40 | private.rb |
100-
| calls.rb:115:1:118:3 | Object | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
100+
| calls.rb:115:1:118:3 | Object | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
101101
| calls.rb:120:1:123:3 | Hash | calls.rb:120:1:123:3 | Hash |
102102
| calls.rb:125:1:138:3 | Array | calls.rb:125:1:138:3 | Array |
103103
| calls.rb:165:1:169:3 | S | calls.rb:165:1:169:3 | S |
@@ -169,7 +169,7 @@ getADeclaration
169169
| private.rb:96:1:102:3 | PrivateOverride2 | private.rb:96:1:102:3 | PrivateOverride2 |
170170
| toplevel_self_singleton.rb:2:5:5:7 | A::B | modules_rec.rb:4:1:5:3 | B |
171171
| toplevel_self_singleton.rb:2:5:5:7 | A::B | toplevel_self_singleton.rb:2:5:5:7 | B |
172-
| toplevel_self_singleton.rb:23:1:33:3 | Good | toplevel_self_singleton.rb:23:1:33:3 | Good |
172+
| toplevel_self_singleton.rb:24:1:34:3 | Good | toplevel_self_singleton.rb:24:1:34:3 | Good |
173173
getSuperClass
174174
| calls.rb:43:1:58:3 | C | calls.rb:115:1:118:3 | Object |
175175
| calls.rb:65:1:69:3 | D | calls.rb:43:1:58:3 | C |
@@ -450,8 +450,8 @@ resolveConstantWriteAccess
450450
| private.rb:96:1:102:3 | PrivateOverride2 | PrivateOverride2 |
451451
| toplevel_self_singleton.rb:1:1:6:3 | A | A |
452452
| toplevel_self_singleton.rb:2:5:5:7 | B | A::B |
453-
| toplevel_self_singleton.rb:17:1:17:8 | MyStruct | MyStruct |
454-
| toplevel_self_singleton.rb:23:1:33:3 | Good | Good |
453+
| toplevel_self_singleton.rb:18:1:18:8 | MyStruct | MyStruct |
454+
| toplevel_self_singleton.rb:24:1:34:3 | Good | Good |
455455
enclosingModule
456456
| calls.rb:1:1:3:3 | foo | calls.rb:1:1:569:4 | calls.rb |
457457
| calls.rb:2:5:2:14 | call to puts | calls.rb:1:1:569:4 | calls.rb |
@@ -1689,39 +1689,42 @@ enclosingModule
16891689
| private.rb:105:1:105:16 | PrivateOverride2 | private.rb:1:1:105:40 | private.rb |
16901690
| private.rb:105:1:105:20 | call to new | private.rb:1:1:105:40 | private.rb |
16911691
| private.rb:105:1:105:23 | call to m1 | private.rb:1:1:105:40 | private.rb |
1692-
| toplevel_self_singleton.rb:1:1:6:3 | A | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1692+
| toplevel_self_singleton.rb:1:1:6:3 | A | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
16931693
| toplevel_self_singleton.rb:2:5:5:7 | B | toplevel_self_singleton.rb:1:1:6:3 | A |
16941694
| toplevel_self_singleton.rb:3:9:4:11 | ab_singleton_method | toplevel_self_singleton.rb:2:5:5:7 | B |
16951695
| toplevel_self_singleton.rb:3:13:3:16 | self | toplevel_self_singleton.rb:2:5:5:7 | B |
1696-
| toplevel_self_singleton.rb:8:1:15:3 | call to do_something | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1697-
| toplevel_self_singleton.rb:8:1:15:3 | self | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1698-
| toplevel_self_singleton.rb:8:14:15:3 | do ... end | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1699-
| toplevel_self_singleton.rb:9:5:11:7 | method_in_block | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1700-
| toplevel_self_singleton.rb:10:9:10:27 | call to ab_singleton_method | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1701-
| toplevel_self_singleton.rb:10:9:10:27 | self | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1702-
| toplevel_self_singleton.rb:12:5:14:7 | method_in_block | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1703-
| toplevel_self_singleton.rb:12:9:12:12 | (no string representation) | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1704-
| toplevel_self_singleton.rb:13:9:13:27 | call to ab_singleton_method | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1705-
| toplevel_self_singleton.rb:13:9:13:27 | self | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1706-
| toplevel_self_singleton.rb:17:1:17:8 | MyStruct | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1707-
| toplevel_self_singleton.rb:17:1:21:1 | ... = ... | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1708-
| toplevel_self_singleton.rb:17:12:17:17 | Struct | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1709-
| toplevel_self_singleton.rb:17:12:21:1 | call to new | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1710-
| toplevel_self_singleton.rb:17:23:17:26 | :foo | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1711-
| toplevel_self_singleton.rb:17:23:17:26 | foo | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1712-
| toplevel_self_singleton.rb:17:29:17:32 | :bar | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1713-
| toplevel_self_singleton.rb:17:29:17:32 | bar | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1714-
| toplevel_self_singleton.rb:17:35:21:1 | { ... } | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1715-
| toplevel_self_singleton.rb:18:5:20:7 | method_in_struct | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1716-
| toplevel_self_singleton.rb:18:9:18:12 | (no string representation) | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1717-
| toplevel_self_singleton.rb:19:9:19:27 | call to ab_singleton_method | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1718-
| toplevel_self_singleton.rb:19:9:19:27 | self | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1719-
| toplevel_self_singleton.rb:23:1:33:3 | Good | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
1720-
| toplevel_self_singleton.rb:24:5:32:7 | class << ... | toplevel_self_singleton.rb:23:1:33:3 | Good |
1721-
| toplevel_self_singleton.rb:24:14:24:17 | self | toplevel_self_singleton.rb:23:1:33:3 | Good |
1722-
| toplevel_self_singleton.rb:25:9:26:11 | call_me | toplevel_self_singleton.rb:24:5:32:7 | class << ... |
1723-
| toplevel_self_singleton.rb:28:9:31:11 | call_you | toplevel_self_singleton.rb:24:5:32:7 | class << ... |
1724-
| toplevel_self_singleton.rb:29:13:29:19 | call to call_me | toplevel_self_singleton.rb:24:5:32:7 | class << ... |
1725-
| toplevel_self_singleton.rb:29:13:29:19 | self | toplevel_self_singleton.rb:24:5:32:7 | class << ... |
1726-
| toplevel_self_singleton.rb:30:13:30:20 | call to call_you | toplevel_self_singleton.rb:24:5:32:7 | class << ... |
1727-
| toplevel_self_singleton.rb:30:13:30:20 | self | toplevel_self_singleton.rb:24:5:32:7 | class << ... |
1696+
| toplevel_self_singleton.rb:8:1:16:3 | call to do_something | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1697+
| toplevel_self_singleton.rb:8:1:16:3 | self | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1698+
| toplevel_self_singleton.rb:8:14:16:3 | do ... end | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1699+
| toplevel_self_singleton.rb:9:5:11:7 | method_in_block | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1700+
| toplevel_self_singleton.rb:10:9:10:27 | call to ab_singleton_method | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1701+
| toplevel_self_singleton.rb:10:9:10:27 | self | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1702+
| toplevel_self_singleton.rb:12:5:12:7 | obj | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1703+
| toplevel_self_singleton.rb:12:5:12:12 | ... = ... | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1704+
| toplevel_self_singleton.rb:12:9:12:12 | (no string representation) | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1705+
| toplevel_self_singleton.rb:13:5:15:7 | method_in_block | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1706+
| toplevel_self_singleton.rb:13:9:13:11 | obj | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1707+
| toplevel_self_singleton.rb:14:9:14:27 | call to ab_singleton_method | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1708+
| toplevel_self_singleton.rb:14:9:14:27 | self | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1709+
| toplevel_self_singleton.rb:18:1:18:8 | MyStruct | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1710+
| toplevel_self_singleton.rb:18:1:22:1 | ... = ... | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1711+
| toplevel_self_singleton.rb:18:12:18:17 | Struct | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1712+
| toplevel_self_singleton.rb:18:12:22:1 | call to new | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1713+
| toplevel_self_singleton.rb:18:23:18:26 | :foo | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1714+
| toplevel_self_singleton.rb:18:23:18:26 | foo | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1715+
| toplevel_self_singleton.rb:18:29:18:32 | :bar | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1716+
| toplevel_self_singleton.rb:18:29:18:32 | bar | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1717+
| toplevel_self_singleton.rb:18:35:22:1 | { ... } | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1718+
| toplevel_self_singleton.rb:19:5:21:7 | method_in_struct | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1719+
| toplevel_self_singleton.rb:19:9:19:12 | (no string representation) | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1720+
| toplevel_self_singleton.rb:20:9:20:27 | call to ab_singleton_method | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1721+
| toplevel_self_singleton.rb:20:9:20:27 | self | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1722+
| toplevel_self_singleton.rb:24:1:34:3 | Good | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
1723+
| toplevel_self_singleton.rb:25:5:33:7 | class << ... | toplevel_self_singleton.rb:24:1:34:3 | Good |
1724+
| toplevel_self_singleton.rb:25:14:25:17 | self | toplevel_self_singleton.rb:24:1:34:3 | Good |
1725+
| toplevel_self_singleton.rb:26:9:27:11 | call_me | toplevel_self_singleton.rb:25:5:33:7 | class << ... |
1726+
| toplevel_self_singleton.rb:29:9:32:11 | call_you | toplevel_self_singleton.rb:25:5:33:7 | class << ... |
1727+
| toplevel_self_singleton.rb:30:13:30:19 | call to call_me | toplevel_self_singleton.rb:25:5:33:7 | class << ... |
1728+
| toplevel_self_singleton.rb:30:13:30:19 | self | toplevel_self_singleton.rb:25:5:33:7 | class << ... |
1729+
| toplevel_self_singleton.rb:31:13:31:20 | call to call_you | toplevel_self_singleton.rb:25:5:33:7 | class << ... |
1730+
| toplevel_self_singleton.rb:31:13:31:20 | self | toplevel_self_singleton.rb:25:5:33:7 | class << ... |

ruby/ql/test/library-tests/modules/superclasses.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,4 +220,4 @@ toplevel_self_singleton.rb:
220220
# 2| A::B
221221
#-----| -> Object
222222

223-
# 23| Good
223+
# 24| Good

ruby/ql/test/library-tests/modules/toplevel_self_singleton.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ def self.ab_singleton_method # should not be called
99
def method_in_block
1010
ab_singleton_method # should not resolve to anything
1111
end
12-
def self.method_in_block
12+
obj=self
13+
def obj.method_in_block
1314
ab_singleton_method # should not resolve to anything
1415
end
1516
end

0 commit comments

Comments
 (0)