@@ -692,23 +692,16 @@ module Crystal
692
692
693
693
column_number = @token .column_number
694
694
next_token_skip_space_or_newline
695
- args = [] of ASTNode
696
- while true
697
- args << parse_single_arg
698
- skip_space_or_newline
699
- case @token .type
700
- when :","
701
- next_token_skip_space_or_newline
702
- if @token .type == :"]"
703
- next_token
704
- break
705
- end
706
- when :"]"
707
- next_token
708
- break
709
- else
710
- unexpected_token
711
- end
695
+ call_args = preserve_stop_on_do { parse_call_args_space_consumed check_plus_and_minus: false , allow_curly: true , end_token: :"]" }
696
+ skip_space_or_newline
697
+ check :"]"
698
+ next_token
699
+
700
+ if call_args
701
+ args = call_args.args
702
+ block = call_args.block
703
+ block_arg = call_args.block_arg
704
+ named_args = call_args.named_args
712
705
end
713
706
714
707
if @token .type == :"?"
@@ -719,7 +712,7 @@ module Crystal
719
712
skip_space
720
713
end
721
714
722
- atomic = Call .new(atomic, method_name, args, name_column_number: column_number).at(location)
715
+ atomic = Call .new(atomic, method_name, args: (args || [] of ASTNode ), block: block, block_arg: block_arg, named_args: named_args , name_column_number: column_number).at(location)
723
716
atomic.name_size = 0 if atomic.is_a?(Call )
724
717
atomic
725
718
else
@@ -3890,7 +3883,7 @@ module Crystal
3890
3883
end
3891
3884
end
3892
3885
3893
- def parse_call_args_space_consumed (check_plus_and_minus = true , allow_curly = false , control = false )
3886
+ def parse_call_args_space_consumed (check_plus_and_minus = true , allow_curly = false , control = false , end_token = :")" )
3894
3887
if @token .keyword?(:end ) && ! next_comes_colon_space?
3895
3888
return nil
3896
3889
end
@@ -3942,7 +3935,7 @@ module Crystal
3942
3935
# never to `return`.
3943
3936
@stop_on_do = true unless control
3944
3937
3945
- while @token .type != :NEWLINE && @token .type != :";" && @token .type != :EOF && @token .type != :")" && @token .type != :":" && ! end_token?
3938
+ while @token .type != :NEWLINE && @token .type != :";" && @token .type != :EOF && @token .type != end_token && @token .type != :":" && ! end_token?
3946
3939
if call_block_arg_follows?
3947
3940
return parse_call_block_arg(args, false )
3948
3941
end
0 commit comments