@@ -8,6 +8,7 @@ Nonterminals
8
8
decl
9
9
expr _expr
10
10
np_call_exprs _np_call_exprs
11
+ brackets_call _brackets_call
11
12
np_method_call_expr _np_method_call_expr
12
13
without_args_method_call_expr _without_args_method_call_expr
13
14
np_erlang_call_expr
@@ -78,7 +79,7 @@ Nonterminals
78
79
.
79
80
80
81
Terminals
81
- punctuated_identifier identifier float integer constant
82
+ bracket_identifier punctuated_identifier identifier float integer constant
82
83
atom interpolated_atom string interpolated_string regexp interpolated_regexp
83
84
char_list interpolated_char_list
84
85
div rem module object do end def eol Erlang true false
@@ -167,16 +168,21 @@ expr -> np_call_exprs : '$1'.
167
168
np_call_exprs -> np_method_call_expr : '$1' .
168
169
np_call_exprs -> np_erlang_call_expr : '$1' .
169
170
np_call_exprs -> base_identifier : '$1' .
171
+ np_call_exprs -> brackets_call : '$1' .
170
172
np_call_exprs -> brackets_expr : '$1' .
171
173
174
+ % Brackets call
175
+ brackets_call -> np_call_exprs dot_eol bracket_identifier open_bracket comma_expr close_bracket : build_bracket_call (build_method_call ('$1' , '$3' , []), '$4' , '$5' ).
176
+ brackets_call -> bracket_identifier open_bracket comma_expr close_bracket : build_bracket_call (build_identifier ('$1' ), '$2' , '$3' ).
177
+
172
178
% Method call
173
179
np_method_call_expr -> np_call_exprs dot_eol method_name call_args_no_parens : build_method_call ('$1' , '$3' , '$4' ).
174
180
np_method_call_expr -> implicit_method_name call_args_no_parens : build_local_call ('$1' , '$2' ).
175
181
np_method_call_expr -> without_args_method_call_expr : '$1' .
176
182
without_args_method_call_expr -> np_call_exprs dot_eol method_name : build_method_call ('$1' , '$3' , []).
177
183
178
- % Brackets call
179
- brackets_expr -> call_exprs open_bracket comma_expr close_bracket : build_method_call ('$1' , { identifier , ? line ( '$2' ), '[]' } , '$3' ).
184
+ % Brackets expression
185
+ brackets_expr -> call_exprs open_bracket comma_expr close_bracket : build_bracket_call ('$1' , '$2' , '$3' ).
180
186
brackets_expr -> call_exprs : '$1' .
181
187
182
188
% Calls with parens
@@ -220,16 +226,21 @@ _expr -> _np_call_exprs : '$1'.
220
226
_np_call_exprs -> _np_method_call_expr : '$1' .
221
227
_np_call_exprs -> np_erlang_call_expr : '$1' .
222
228
_np_call_exprs -> base_identifier : '$1' .
229
+ _np_call_exprs -> _brackets_call : '$1' .
223
230
_np_call_exprs -> _brackets_expr : '$1' .
224
231
232
+ % Brackets call
233
+ _brackets_call -> _np_call_exprs dot_eol bracket_identifier open_bracket comma_expr close_bracket : build_bracket_call (build_method_call ('$1' , '$3' , []), '$4' , '$5' ).
234
+ _brackets_call -> bracket_identifier open_bracket comma_expr close_bracket : build_bracket_call (build_identifier ('$1' ), '$2' , '$3' ).
235
+
225
236
% Method call
226
237
_np_method_call_expr -> _np_call_exprs dot_eol method_name call_args_no_parens : build_method_call ('$1' , '$3' , '$4' ).
227
238
_np_method_call_expr -> implicit_method_name call_args_no_parens : build_local_call ('$1' , '$2' ).
228
239
_np_method_call_expr -> _without_args_method_call_expr : '$1' .
229
240
_without_args_method_call_expr -> _np_call_exprs dot_eol method_name : build_method_call ('$1' , '$3' , []).
230
241
231
- % Brackets call
232
- _brackets_expr -> _call_exprs open_bracket comma_expr close_bracket : build_method_call ('$1' , { identifier , ? line ( '$2' ), '[]' } , '$3' ).
242
+ % Brackets expression
243
+ _brackets_expr -> _call_exprs open_bracket comma_expr close_bracket : build_bracket_call ('$1' , '$2' , '$3' ).
233
244
_brackets_expr -> _call_exprs : '$1' .
234
245
235
246
% Calls with parens
@@ -548,6 +559,11 @@ Erlang code.
548
559
% The following directive is needed for (significantly) faster compilation
549
560
% of the generated .erl file by the HiPE compiler. Please do not remove.
550
561
% -compile([{hipe,[{regalloc,linear_scan}]}]).
562
+ build_identifier (Thing ) ->
563
+ { identifier , ? line (Thing ), ? chars (Thing ) }.
564
+
565
+ build_bracket_call (Expr , Bracket , Args ) ->
566
+ build_method_call (Expr , { identifier , ? line (Bracket ), '[]' }, Args ).
551
567
552
568
build_fun_call (Target , Args ) ->
553
569
{ fun_call , ? line (Target ), Target , Args }.
0 commit comments