@@ -18,6 +18,7 @@ def initialize(raw_node, recv, mid, mid_code_range, raw_args, last_arg, raw_bloc
1818 @block_f_args = nil
1919 @block_body = nil
2020 @safe_navigation = raw_node . respond_to? ( :safe_navigation? ) && raw_node . safe_navigation?
21+ @anonymous_block_forwarding = false
2122
2223 if raw_args
2324 args = [ ]
@@ -45,8 +46,11 @@ def initialize(raw_node, recv, mid, mid_code_range, raw_args, last_arg, raw_bloc
4546
4647 if raw_block
4748 if raw_block . type == :block_argument_node
48- # TODO: Support anonymous block forwarding
49- @block_pass = AST . create_node ( raw_block . expression , lenv ) if raw_block . expression
49+ if raw_block . expression
50+ @block_pass = AST . create_node ( raw_block . expression , lenv )
51+ else
52+ @anonymous_block_forwarding = true
53+ end
5054 else
5155 @block_pass = nil
5256 @block_tbl = raw_block . locals
@@ -74,11 +78,11 @@ def initialize(raw_node, recv, mid, mid_code_range, raw_args, last_arg, raw_bloc
7478
7579 attr_reader :recv , :mid , :mid_code_range , :yield
7680 attr_reader :positional_args , :splat_flags , :keyword_args
77- attr_reader :block_tbl , :block_f_args , :block_body , :block_pass
81+ attr_reader :block_tbl , :block_f_args , :block_body , :block_pass , :anonymous_block_forwarding
7882 attr_reader :safe_navigation
7983
8084 def subnodes = { recv :, positional_args :, keyword_args :, block_body :, block_pass : }
81- def attrs = { mid :, splat_flags :, block_tbl :, block_f_args :, yield :, safe_navigation : }
85+ def attrs = { mid :, splat_flags :, block_tbl :, block_f_args :, yield :, safe_navigation :, anonymous_block_forwarding : }
8286
8387 def install0 ( genv )
8488 recv = @recv ? @recv . install ( genv ) : @yield ? @lenv . get_var ( :"*given_block" ) : @lenv . get_var ( :"*self" )
@@ -133,6 +137,8 @@ def install0(genv)
133137 blk_ty = Source . new ( Type ::Proc . new ( genv , block ) )
134138 elsif @block_pass
135139 blk_ty = @block_pass . install ( genv )
140+ elsif @anonymous_block_forwarding
141+ blk_ty = @lenv . get_var ( :"*anonymous_block" )
136142 end
137143
138144 a_args = ActualArguments . new ( positional_args , @splat_flags , keyword_args , blk_ty )
0 commit comments