|
1 | 1 | %% Implements Elixir quote.
|
2 | 2 | -module(elixir_quote).
|
3 | 3 | -export([escape/2, erl_escape/3, erl_quote/4,
|
4 |
| - linify/2, unquote/4, tail_join/3, join/2]). |
| 4 | + linify/2, linify/3, unquote/4, tail_join/3, join/2]). |
5 | 5 | -include("elixir.hrl").
|
6 | 6 |
|
7 | 7 | %% Apply the line from site call on quoted contents.
|
8 | 8 | linify(Line, Exprs) when is_integer(Line) ->
|
9 |
| - do_linify(Line, Exprs). |
| 9 | + do_linify(Line, nil, Exprs). |
10 | 10 |
|
11 |
| -do_linify(Line, { Left, Meta, Right }) when is_list(Meta) -> |
12 |
| - NewMeta = case ?line(Meta) of |
13 |
| - 0 -> keystore(line, Meta, Line); |
14 |
| - _ -> Meta |
| 11 | +linify(Line, Var, Exprs) when is_integer(Line) -> |
| 12 | + do_linify(Line, Var, Exprs). |
| 13 | + |
| 14 | +do_linify(Line, { Receiver, Counter } = Var, { Left, Meta, Receiver }) when is_atom(Left), is_list(Meta) -> |
| 15 | + NewMeta = case keyfind(counter, Meta) of |
| 16 | + { counter, _ } -> Meta; |
| 17 | + _ -> keystore(counter, Meta, Counter) |
15 | 18 | end,
|
16 |
| - { do_linify(Line, Left), NewMeta, do_linify(Line, Right) }; |
| 19 | + do_tuple_linify(Line, Var, NewMeta, Left, Receiver); |
| 20 | + |
| 21 | +do_linify(Line, Var, { Left, Meta, Right }) when is_list(Meta) -> |
| 22 | + do_tuple_linify(Line, Var, Meta, Left, Right); |
17 | 23 |
|
18 |
| -do_linify(Line, { Left, Right }) -> |
19 |
| - { do_linify(Line, Left), do_linify(Line, Right) }; |
| 24 | +do_linify(Line, Var, { Left, Right }) -> |
| 25 | + { do_linify(Line, Var, Left), do_linify(Line, Var, Right) }; |
20 | 26 |
|
21 |
| -do_linify(Line, List) when is_list(List) -> |
22 |
| - [do_linify(Line, X) || X <- List]; |
| 27 | +do_linify(Line, Var, List) when is_list(List) -> |
| 28 | + [do_linify(Line, Var, X) || X <- List]; |
23 | 29 |
|
24 |
| -do_linify(_, Else) -> Else. |
| 30 | +do_linify(_, _, Else) -> Else. |
| 31 | + |
| 32 | +do_tuple_linify(Line, Var, Meta, Left, Right) -> |
| 33 | + NewMeta = case ?line(Meta) of |
| 34 | + 0 -> keystore(line, Meta, Line); |
| 35 | + _ -> Meta |
| 36 | + end, |
| 37 | + { do_linify(Line, Var, Left), NewMeta, do_linify(Line, Var, Right) }. |
25 | 38 |
|
26 | 39 | %% Some expressions cannot be unquoted at compilation time.
|
27 | 40 | %% This function is responsible for doing runtime unquoting.
|
|
0 commit comments