summaryrefslogtreecommitdiff
path: root/lib/elixir/src/elixir_parser.yrl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/elixir/src/elixir_parser.yrl')
-rw-r--r--lib/elixir/src/elixir_parser.yrl19
1 files changed, 13 insertions, 6 deletions
diff --git a/lib/elixir/src/elixir_parser.yrl b/lib/elixir/src/elixir_parser.yrl
index 151668299..9aa7b9d5f 100644
--- a/lib/elixir/src/elixir_parser.yrl
+++ b/lib/elixir/src/elixir_parser.yrl
@@ -40,7 +40,7 @@ Terminals
capture_op rel_op
'true' 'false' 'nil' 'do' eol ';' ',' '.'
'(' ')' '[' ']' '{' '}' '<<' '>>' '%{}' '%'
- binary octal decimal float hex
+ base_integer decimal float
.
Rootsymbol grammar.
@@ -237,7 +237,7 @@ no_parens_zero_expr -> dot_identifier : build_identifier('$1', nil).
%% marks identifiers followed by brackets as bracket_identifier.
access_expr -> bracket_at_expr : '$1'.
access_expr -> bracket_expr : '$1'.
-access_expr -> capture_op_eol decimal : build_unary_op('$1', ?exprs('$2')).
+access_expr -> capture_op_eol decimal : build_unary_op('$1', parse_integer_literal(?exprs('$2'))).
access_expr -> fn_eoe stab end_eoe : build_fn('$1', reverse('$2')).
access_expr -> open_paren stab close_paren : build_stab(reverse('$2')).
access_expr -> open_paren stab ';' close_paren : build_stab(reverse('$2')).
@@ -262,10 +262,8 @@ access_expr -> max_expr : '$1'.
%% Augment integer literals with representation format if wrap_literals_in_blocks option is true
number -> char : handle_literal(?exprs('$1'), '$1', [{format, char}]).
-number -> binary : handle_literal(?exprs('$1'), '$1', [{format, binary}]).
-number -> octal : handle_literal(?exprs('$1'), '$1', [{format, octal}]).
-number -> decimal : handle_literal(?exprs('$1'), '$1', [{format, decimal}]).
-number -> hex : handle_literal(?exprs('$1'), '$1', [{format, hex}]).
+number -> decimal : handle_literal(parse_integer_literal(?exprs('$1')), '$1', [{original, ?exprs('$1')}]).
+number -> base_integer : handle_literal(parse_integer_literal(?exprs('$1')), '$1', [{original, ?exprs('$1')}]).
number -> float : handle_literal(?exprs('$1'), '$1').
%% Aliases and properly formed calls. Used by map_expr.
@@ -637,6 +635,15 @@ handle_literal(Literal, Token, ExtraMeta) ->
false -> Literal
end.
+parse_integer_literal([$0, $x | Rest]) ->
+ list_to_integer(Rest, 16);
+parse_integer_literal([$0, $o | Rest]) ->
+ list_to_integer(Rest, 8);
+parse_integer_literal([$0, $b | Rest]) ->
+ list_to_integer(Rest, 2);
+parse_integer_literal(Decimal) ->
+ list_to_integer(Decimal, 10).
+
%% Operators
build_op({_Kind, Location, 'in'}, {UOp, _, [Left]}, Right) when ?rearrange_uop(UOp) ->