Ruby: workaround issue with 'def self.method' in a block

This commit is contained in:
Asger F
2022-10-14 15:07:13 +02:00
parent 17a246b321
commit 1bd3d29409
6 changed files with 63 additions and 59 deletions

View File

@@ -229,4 +229,4 @@ toplevel_self_singleton.rb:
# 2| A::B
#-----| super -> Object
# 23| Good
# 24| Good

View File

@@ -265,8 +265,8 @@ getTarget
| private.rb:104:1:104:20 | call to new | calls.rb:117:5:117:16 | new |
| private.rb:104:1:104:28 | call to call_m1 | private.rb:91:3:93:5 | call_m1 |
| private.rb:105:1:105:20 | call to new | calls.rb:117:5:117:16 | new |
| toplevel_self_singleton.rb:29:13:29:19 | call to call_me | toplevel_self_singleton.rb:25:9:26:11 | call_me |
| toplevel_self_singleton.rb:30:13:30:20 | call to call_you | toplevel_self_singleton.rb:28:9:31:11 | call_you |
| toplevel_self_singleton.rb:30:13:30:19 | call to call_me | toplevel_self_singleton.rb:26:9:27:11 | call_me |
| toplevel_self_singleton.rb:31:13:31:20 | call to call_you | toplevel_self_singleton.rb:29:9:32:11 | call_you |
unresolvedCall
| calls.rb:23:9:23:19 | call to singleton_m |
| calls.rb:26:9:26:18 | call to instance_m |
@@ -353,11 +353,11 @@ unresolvedCall
| private.rb:57:1:57:14 | call to private4 |
| private.rb:100:7:100:29 | call to m1 |
| private.rb:105:1:105:23 | call to m1 |
| toplevel_self_singleton.rb:8:1:15:3 | call to do_something |
| toplevel_self_singleton.rb:8:1:16:3 | call to do_something |
| toplevel_self_singleton.rb:10:9:10:27 | call to ab_singleton_method |
| toplevel_self_singleton.rb:13:9:13:27 | call to ab_singleton_method |
| toplevel_self_singleton.rb:17:12:21:1 | call to new |
| toplevel_self_singleton.rb:19:9:19:27 | call to ab_singleton_method |
| toplevel_self_singleton.rb:14:9:14:27 | call to ab_singleton_method |
| toplevel_self_singleton.rb:18:12:22:1 | call to new |
| toplevel_self_singleton.rb:20:9:20:27 | call to ab_singleton_method |
privateMethod
| calls.rb:1:1:3:3 | foo |
| calls.rb:39:1:41:3 | call_instance_m |
@@ -472,10 +472,10 @@ publicMethod
| private.rb:66:3:67:5 | public |
| private.rb:91:3:93:5 | call_m1 |
| toplevel_self_singleton.rb:3:9:4:11 | ab_singleton_method |
| toplevel_self_singleton.rb:12:5:14:7 | method_in_block |
| toplevel_self_singleton.rb:18:5:20:7 | method_in_struct |
| toplevel_self_singleton.rb:25:9:26:11 | call_me |
| toplevel_self_singleton.rb:28:9:31:11 | call_you |
| toplevel_self_singleton.rb:13:5:15:7 | method_in_block |
| toplevel_self_singleton.rb:19:5:21:7 | method_in_struct |
| toplevel_self_singleton.rb:26:9:27:11 | call_me |
| toplevel_self_singleton.rb:29:9:32:11 | call_you |
protectedMethod
| calls.rb:514:15:516:7 | foo |
| calls.rb:522:15:524:7 | bar |

View File

@@ -945,11 +945,11 @@ enclosingMethod
| private.rb:100:7:100:29 | call to m1 | private.rb:97:11:101:5 | m1 |
| toplevel_self_singleton.rb:10:9:10:27 | call to ab_singleton_method | toplevel_self_singleton.rb:9:5:11:7 | method_in_block |
| toplevel_self_singleton.rb:10:9:10:27 | self | toplevel_self_singleton.rb:9:5:11:7 | method_in_block |
| toplevel_self_singleton.rb:13:9:13:27 | call to ab_singleton_method | toplevel_self_singleton.rb:12:5:14:7 | method_in_block |
| toplevel_self_singleton.rb:13:9:13:27 | self | toplevel_self_singleton.rb:12:5:14:7 | method_in_block |
| toplevel_self_singleton.rb:19:9:19:27 | call to ab_singleton_method | toplevel_self_singleton.rb:18:5:20:7 | method_in_struct |
| toplevel_self_singleton.rb:19:9:19:27 | self | toplevel_self_singleton.rb:18:5:20:7 | method_in_struct |
| toplevel_self_singleton.rb:29:13:29:19 | call to call_me | toplevel_self_singleton.rb:28:9:31:11 | call_you |
| toplevel_self_singleton.rb:29:13:29:19 | self | toplevel_self_singleton.rb:28:9:31:11 | call_you |
| toplevel_self_singleton.rb:30:13:30:20 | call to call_you | toplevel_self_singleton.rb:28:9:31:11 | call_you |
| toplevel_self_singleton.rb:30:13:30:20 | self | toplevel_self_singleton.rb:28:9:31:11 | call_you |
| toplevel_self_singleton.rb:14:9:14:27 | call to ab_singleton_method | toplevel_self_singleton.rb:13:5:15:7 | method_in_block |
| toplevel_self_singleton.rb:14:9:14:27 | self | toplevel_self_singleton.rb:13:5:15:7 | method_in_block |
| toplevel_self_singleton.rb:20:9:20:27 | call to ab_singleton_method | toplevel_self_singleton.rb:19:5:21:7 | method_in_struct |
| toplevel_self_singleton.rb:20:9:20:27 | self | toplevel_self_singleton.rb:19:5:21:7 | method_in_struct |
| toplevel_self_singleton.rb:30:13:30:19 | call to call_me | toplevel_self_singleton.rb:29:9:32:11 | call_you |
| toplevel_self_singleton.rb:30:13:30:19 | self | toplevel_self_singleton.rb:29:9:32:11 | call_you |
| toplevel_self_singleton.rb:31:13:31:20 | call to call_you | toplevel_self_singleton.rb:29:9:32:11 | call_you |
| toplevel_self_singleton.rb:31:13:31:20 | self | toplevel_self_singleton.rb:29:9:32:11 | call_you |

View File

@@ -81,7 +81,7 @@ getModule
| private.rb:82:1:94:3 | PrivateOverride1 |
| private.rb:96:1:102:3 | PrivateOverride2 |
| toplevel_self_singleton.rb:2:5:5:7 | A::B |
| toplevel_self_singleton.rb:23:1:33:3 | Good |
| toplevel_self_singleton.rb:24:1:34:3 | Good |
getADeclaration
| calls.rb:21:1:34:3 | M | calls.rb:21:1:34:3 | M |
| calls.rb:43:1:58:3 | C | calls.rb:43:1:58:3 | C |
@@ -97,7 +97,7 @@ getADeclaration
| calls.rb:115:1:118:3 | Object | modules.rb:1:1:129:4 | modules.rb |
| calls.rb:115:1:118:3 | Object | modules_rec.rb:1:1:11:26 | modules_rec.rb |
| calls.rb:115:1:118:3 | Object | private.rb:1:1:105:40 | private.rb |
| calls.rb:115:1:118:3 | Object | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| calls.rb:115:1:118:3 | Object | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| calls.rb:120:1:123:3 | Hash | calls.rb:120:1:123:3 | Hash |
| calls.rb:125:1:138:3 | Array | calls.rb:125:1:138:3 | Array |
| calls.rb:165:1:169:3 | S | calls.rb:165:1:169:3 | S |
@@ -169,7 +169,7 @@ getADeclaration
| private.rb:96:1:102:3 | PrivateOverride2 | private.rb:96:1:102:3 | PrivateOverride2 |
| toplevel_self_singleton.rb:2:5:5:7 | A::B | modules_rec.rb:4:1:5:3 | B |
| toplevel_self_singleton.rb:2:5:5:7 | A::B | toplevel_self_singleton.rb:2:5:5:7 | B |
| toplevel_self_singleton.rb:23:1:33:3 | Good | toplevel_self_singleton.rb:23:1:33:3 | Good |
| toplevel_self_singleton.rb:24:1:34:3 | Good | toplevel_self_singleton.rb:24:1:34:3 | Good |
getSuperClass
| calls.rb:43:1:58:3 | C | calls.rb:115:1:118:3 | Object |
| calls.rb:65:1:69:3 | D | calls.rb:43:1:58:3 | C |
@@ -450,8 +450,8 @@ resolveConstantWriteAccess
| private.rb:96:1:102:3 | PrivateOverride2 | PrivateOverride2 |
| toplevel_self_singleton.rb:1:1:6:3 | A | A |
| toplevel_self_singleton.rb:2:5:5:7 | B | A::B |
| toplevel_self_singleton.rb:17:1:17:8 | MyStruct | MyStruct |
| toplevel_self_singleton.rb:23:1:33:3 | Good | Good |
| toplevel_self_singleton.rb:18:1:18:8 | MyStruct | MyStruct |
| toplevel_self_singleton.rb:24:1:34:3 | Good | Good |
enclosingModule
| calls.rb:1:1:3:3 | foo | calls.rb:1:1:569:4 | calls.rb |
| calls.rb:2:5:2:14 | call to puts | calls.rb:1:1:569:4 | calls.rb |
@@ -1689,39 +1689,42 @@ enclosingModule
| private.rb:105:1:105:16 | PrivateOverride2 | private.rb:1:1:105:40 | private.rb |
| private.rb:105:1:105:20 | call to new | private.rb:1:1:105:40 | private.rb |
| private.rb:105:1:105:23 | call to m1 | private.rb:1:1:105:40 | private.rb |
| toplevel_self_singleton.rb:1:1:6:3 | A | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:1:1:6:3 | A | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:2:5:5:7 | B | toplevel_self_singleton.rb:1:1:6:3 | A |
| toplevel_self_singleton.rb:3:9:4:11 | ab_singleton_method | toplevel_self_singleton.rb:2:5:5:7 | B |
| toplevel_self_singleton.rb:3:13:3:16 | self | toplevel_self_singleton.rb:2:5:5:7 | B |
| toplevel_self_singleton.rb:8:1:15:3 | call to do_something | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:8:1:15:3 | self | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:8:14:15:3 | do ... end | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:9:5:11:7 | method_in_block | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| 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 |
| toplevel_self_singleton.rb:10:9:10:27 | self | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:12:5:14:7 | method_in_block | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:12:9:12:12 | (no string representation) | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| 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 |
| toplevel_self_singleton.rb:13:9:13:27 | self | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:17:1:17:8 | MyStruct | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:17:1:21:1 | ... = ... | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:17:12:17:17 | Struct | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:17:12:21:1 | call to new | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:17:23:17:26 | :foo | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:17:23:17:26 | foo | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:17:29:17:32 | :bar | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:17:29:17:32 | bar | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:17:35:21:1 | { ... } | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:18:5:20:7 | method_in_struct | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:18:9:18:12 | (no string representation) | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| 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 |
| toplevel_self_singleton.rb:19:9:19:27 | self | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:23:1:33:3 | Good | toplevel_self_singleton.rb:1:1:33:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:24:5:32:7 | class << ... | toplevel_self_singleton.rb:23:1:33:3 | Good |
| toplevel_self_singleton.rb:24:14:24:17 | self | toplevel_self_singleton.rb:23:1:33:3 | Good |
| toplevel_self_singleton.rb:25:9:26:11 | call_me | toplevel_self_singleton.rb:24:5:32:7 | class << ... |
| toplevel_self_singleton.rb:28:9:31:11 | call_you | toplevel_self_singleton.rb:24:5:32:7 | class << ... |
| toplevel_self_singleton.rb:29:13:29:19 | call to call_me | toplevel_self_singleton.rb:24:5:32:7 | class << ... |
| toplevel_self_singleton.rb:29:13:29:19 | self | toplevel_self_singleton.rb:24:5:32:7 | class << ... |
| toplevel_self_singleton.rb:30:13:30:20 | call to call_you | toplevel_self_singleton.rb:24:5:32:7 | class << ... |
| toplevel_self_singleton.rb:30:13:30:20 | self | toplevel_self_singleton.rb:24:5:32:7 | class << ... |
| toplevel_self_singleton.rb:8:1:16:3 | call to do_something | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:8:1:16:3 | self | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:8:14:16:3 | do ... end | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:9:5:11:7 | method_in_block | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| 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 |
| toplevel_self_singleton.rb:10:9:10:27 | self | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:12:5:12:7 | obj | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:12:5:12:12 | ... = ... | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:12:9:12:12 | (no string representation) | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:13:5:15:7 | method_in_block | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:13:9:13:11 | obj | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| 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 |
| toplevel_self_singleton.rb:14:9:14:27 | self | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:18:1:18:8 | MyStruct | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:18:1:22:1 | ... = ... | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:18:12:18:17 | Struct | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:18:12:22:1 | call to new | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:18:23:18:26 | :foo | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:18:23:18:26 | foo | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:18:29:18:32 | :bar | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:18:29:18:32 | bar | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:18:35:22:1 | { ... } | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:19:5:21:7 | method_in_struct | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:19:9:19:12 | (no string representation) | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| 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 |
| toplevel_self_singleton.rb:20:9:20:27 | self | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:24:1:34:3 | Good | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:25:5:33:7 | class << ... | toplevel_self_singleton.rb:24:1:34:3 | Good |
| toplevel_self_singleton.rb:25:14:25:17 | self | toplevel_self_singleton.rb:24:1:34:3 | Good |
| toplevel_self_singleton.rb:26:9:27:11 | call_me | toplevel_self_singleton.rb:25:5:33:7 | class << ... |
| toplevel_self_singleton.rb:29:9:32:11 | call_you | toplevel_self_singleton.rb:25:5:33:7 | class << ... |
| toplevel_self_singleton.rb:30:13:30:19 | call to call_me | toplevel_self_singleton.rb:25:5:33:7 | class << ... |
| toplevel_self_singleton.rb:30:13:30:19 | self | toplevel_self_singleton.rb:25:5:33:7 | class << ... |
| toplevel_self_singleton.rb:31:13:31:20 | call to call_you | toplevel_self_singleton.rb:25:5:33:7 | class << ... |
| toplevel_self_singleton.rb:31:13:31:20 | self | toplevel_self_singleton.rb:25:5:33:7 | class << ... |

View File

@@ -220,4 +220,4 @@ toplevel_self_singleton.rb:
# 2| A::B
#-----| -> Object
# 23| Good
# 24| Good

View File

@@ -9,7 +9,8 @@ do_something do
def method_in_block
ab_singleton_method # should not resolve to anything
end
def self.method_in_block
obj=self
def obj.method_in_block
ab_singleton_method # should not resolve to anything
end
end