Skip to content

Commit 50e4793

Browse files
author
José Valim
committed
Allow operators to be captured, example: &+/2
1 parent 49c3770 commit 50e4793

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

lib/elixir/src/elixir_tokenizer.erl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -493,13 +493,19 @@ handle_unary_op([$:|Rest], Line, _Kind, Op, Scope, Tokens) when ?is_space(hd(Res
493493
tokenize(Rest, Line, Scope, [{ kw_identifier, Line, Op }|Tokens]);
494494

495495
handle_unary_op(Rest, Line, Kind, Op, Scope, Tokens) ->
496-
tokenize(Rest, Line, Scope, [{ Kind, Line, Op }|Tokens]).
496+
case strip_space(Rest, 0) of
497+
{ [$/|_], _ } -> tokenize(Rest, Line, Scope, [{ identifier, Line, Op }|Tokens]);
498+
_ -> tokenize(Rest, Line, Scope, [{ Kind, Line, Op }|Tokens])
499+
end.
497500

498501
handle_op([$:|Rest], Line, _Kind, Op, Scope, Tokens) when ?is_space(hd(Rest)) ->
499502
tokenize(Rest, Line, Scope, [{ kw_identifier, Line, Op }|Tokens]);
500503

501504
handle_op(Rest, Line, Kind, Op, Scope, Tokens) ->
502-
tokenize(Rest, Line, Scope, add_token_with_nl({ Kind, Line, Op }, Tokens)).
505+
case strip_space(Rest, 0) of
506+
{ [$/|_], _ } -> tokenize(Rest, Line, Scope, [{ identifier, Line, Op }|Tokens]);
507+
_ -> tokenize(Rest, Line, Scope, add_token_with_nl({ Kind, Line, Op }, Tokens))
508+
end.
503509

504510
% ## Three Token Operators
505511
handle_dot([$.,T1,T2,T3|Rest], Line, Scope, Tokens) when

lib/elixir/test/elixir/kernel/fn_test.exs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ defmodule Kernel.FnTest do
5252
assert (&Kernel.to_string(&1)).(:a) == "a"
5353
end
5454

55+
test "capture operator" do
56+
assert is_function &+/2
57+
assert is_function &(&&/2)
58+
end
59+
5560
test "local partial application" do
5661
assert (&atb(&1, :utf8)).(:a) == "a"
5762
assert (&atb(list_to_atom(&1), :utf8)).('a') == "a"

0 commit comments

Comments
 (0)