Skip to content

Commit a39b61c

Browse files
author
Рощупкин Никита
committed
Fixed parse_transform pt_lazy_case
1 parent c05a0c6 commit a39b61c

2 files changed

Lines changed: 20 additions & 7 deletions

File tree

src/pt_lazy_case.erl

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ parse_clause(_, Acc, OtherAST, _, _) ->
164164
parse_tuple(HeadAstTuple, ListASTClause, [], V1, _) ->
165165
NewListASTClause = parse_clause(ListASTClause, [], []),
166166
OffRepeateASTClause = delete_repeate(NewListASTClause, []),
167-
case check_load_code(OffRepeateASTClause) of
167+
case check_load_code(OffRepeateASTClause, HeadAstTuple) of
168168
false ->
169169
{'case', V1, HeadAstTuple, OffRepeateASTClause};
170170
{true, Data} ->
@@ -179,7 +179,7 @@ parse_tuple(HeadAstTuple, ListASTClause, TailAstTuple, V1, File) ->
179179
OffRepeateASTClause = delete_repeate(create_new_case(NewListASTClause, CountElems, TailAstTuple, [], V1), []),
180180
NewCase = {'case', V1, HeadAstTuple, OffRepeateASTClause},
181181
ChangeCase = parser_case(NewCase, File),
182-
case check_load_code(ChangeCase) of
182+
case check_load_code(ChangeCase, HeadAstTuple) of
183183
false ->
184184
ChangeCase;
185185
{true, Data} ->
@@ -297,14 +297,17 @@ check_guard(Guard, [Guard | _], _) ->
297297
check_guard(Guard, [HeadGuard | TailGuard], Acc) ->
298298
check_guard(Guard, TailGuard, [HeadGuard | Acc]);
299299
check_guard(Guard, _, Acc) ->
300-
301300
{true, [Guard | Acc]}.
302301

303-
check_load_code({'case', _, _, [{clause, _, [{var, _, _}], _, D3} | _]}) ->
302+
check_load_code({'case', _, _, [{clause, _, [{var, _, '_'}], _, D3} | _]}, _HeadAstTuple) ->
304303
{true, D3};
305-
check_load_code([{clause, _, [{var, _, _}], _, D3} | _]) ->
304+
check_load_code([{clause, _, [{var, _, '_'}], _, D3} | _], _HeadAstTuple) ->
306305
{true, D3};
307-
check_load_code(_) ->
306+
check_load_code({'case', _, _, [{clause, _, [{var, Line, Var}], _, D3} | _]}, HeadAstTuple) ->
307+
{true, [{match, Line, {var, Line, Var}, HeadAstTuple} | D3]};
308+
check_load_code([{clause, _, [{var, Line, Var}], _, D3} | _], HeadAstTuple) ->
309+
{true, [{match, Line, {var, Line, Var}, HeadAstTuple} | D3]};
310+
check_load_code(_, _) ->
308311
false.
309312

310313
delete_repeate([{clause, _, Data1, Guard1, _} = HeadASTClause | TailASTClause], Acc) ->

test/pt_lazy_case_tests.erl

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ pt_lazy_case_test_() ->
1919
?_test(ok = lazy_case_test3()),
2020
?_test(ok = lazy_case_test4()),
2121
?_test(ok = lazy_case_test5()),
22-
?_test(ok = lazy_case_test6())
22+
?_test(ok = lazy_case_test6()),
23+
?_test(ok = lazy_case_test7())
2324
].
2425

2526
lazy_case_test1() ->
@@ -109,3 +110,12 @@ lazy_case_test6() ->
109110
{_V, _} -> ?assert(false)
110111
end,
111112
X.
113+
114+
lazy_case_test7() ->
115+
'@lazy_case',
116+
X =
117+
case {[], ok} of
118+
{[], _V} -> _V;
119+
{_V, _} -> ?assert(false)
120+
end,
121+
X.

0 commit comments

Comments
 (0)