@@ -8,6 +8,7 @@ Nonterminals
88 decl
99 expr _expr
1010 np_call_exprs _np_call_exprs
11+ brackets_call _brackets_call
1112 np_method_call_expr _np_method_call_expr
1213 without_args_method_call_expr _without_args_method_call_expr
1314 np_erlang_call_expr
@@ -78,7 +79,7 @@ Nonterminals
7879 .
7980
8081Terminals
81- punctuated_identifier identifier float integer constant
82+ bracket_identifier punctuated_identifier identifier float integer constant
8283 atom interpolated_atom string interpolated_string regexp interpolated_regexp
8384 char_list interpolated_char_list
8485 div rem module object do end def eol Erlang true false
@@ -167,16 +168,21 @@ expr -> np_call_exprs : '$1'.
167168np_call_exprs -> np_method_call_expr : '$1' .
168169np_call_exprs -> np_erlang_call_expr : '$1' .
169170np_call_exprs -> base_identifier : '$1' .
171+ np_call_exprs -> brackets_call : '$1' .
170172np_call_exprs -> brackets_expr : '$1' .
171173
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+
172178% Method call
173179np_method_call_expr -> np_call_exprs dot_eol method_name call_args_no_parens : build_method_call ('$1' , '$3' , '$4' ).
174180np_method_call_expr -> implicit_method_name call_args_no_parens : build_local_call ('$1' , '$2' ).
175181np_method_call_expr -> without_args_method_call_expr : '$1' .
176182without_args_method_call_expr -> np_call_exprs dot_eol method_name : build_method_call ('$1' , '$3' , []).
177183
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' ).
180186brackets_expr -> call_exprs : '$1' .
181187
182188% Calls with parens
@@ -220,16 +226,21 @@ _expr -> _np_call_exprs : '$1'.
220226_np_call_exprs -> _np_method_call_expr : '$1' .
221227_np_call_exprs -> np_erlang_call_expr : '$1' .
222228_np_call_exprs -> base_identifier : '$1' .
229+ _np_call_exprs -> _brackets_call : '$1' .
223230_np_call_exprs -> _brackets_expr : '$1' .
224231
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+
225236% Method call
226237_np_method_call_expr -> _np_call_exprs dot_eol method_name call_args_no_parens : build_method_call ('$1' , '$3' , '$4' ).
227238_np_method_call_expr -> implicit_method_name call_args_no_parens : build_local_call ('$1' , '$2' ).
228239_np_method_call_expr -> _without_args_method_call_expr : '$1' .
229240_without_args_method_call_expr -> _np_call_exprs dot_eol method_name : build_method_call ('$1' , '$3' , []).
230241
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' ).
233244_brackets_expr -> _call_exprs : '$1' .
234245
235246% Calls with parens
@@ -548,6 +559,11 @@ Erlang code.
548559% The following directive is needed for (significantly) faster compilation
549560% of the generated .erl file by the HiPE compiler. Please do not remove.
550561% -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 ).
551567
552568build_fun_call (Target , Args ) ->
553569 { fun_call , ? line (Target ), Target , Args }.
0 commit comments