Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions lib/typeprof/core/ast/call.rb
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,13 @@ def install0(genv)
end

if @forwarding_arguments
forward_a_args = (@lenv.forward_args || raise).to_actual_arguments(
forward_args = @lenv.forward_args
# `...` needs a method definition, so only a bare `super` can reach here
@changes.add_diagnostic(:code_range, "implicit argument passing of super is not supported here") unless forward_args
end

if forward_args
forward_a_args = forward_args.to_actual_arguments(
genv,
@changes,
self,
Expand Down Expand Up @@ -211,11 +217,11 @@ def install0(genv)
blk_ty = @block_pass.install(genv)
elsif @anonymous_block_forwarding
blk_ty = @lenv.get_var(:"*anonymous_block")
elsif @forwarding_arguments
elsif forward_args
blk_ty = forward_a_args.block
end

if @forwarding_arguments
if forward_args
a_args = a_args.with_block(blk_ty, omittable: !@block_body && !@block_pass && !@anonymous_block_forwarding)
else
a_args = a_args.with_block(blk_ty)
Expand Down
9 changes: 9 additions & 0 deletions scenario/diagnostics/super-outside-method.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
## update
define_method(:foo) do |x|
super
end

## diagnostics
(1,0)-(1,13): undefined method: Object#define_method
(2,2)-(2,7): implicit argument passing of super is not supported here
(2,2)-(2,7): undefined method: Object#define_method
Loading