@@ -83,13 +83,36 @@ replace_line_ast(V1) ->
8383parser_case ([{atom , Line , '@lazy_case' } | TailAST ], File ) ->
8484 case TailAST of
8585 [{match , L , V , {'case' , _ , _ , _ } = CaseAST } | TailAST2 ] ->
86- [{match , L , V , replace_case (parser_case (CaseAST , File ), File )} | TailAST2 ];
86+ NewData = case replace_case (parser_case (CaseAST , File ), File ) of
87+ {'case' , _ , _ , _ } = Data ->
88+ Data ;
89+ Data ->
90+ {'case' , L , {nil , L }, [{clause , L , [{nil , L }], [], Data }]}
91+ end ,
92+ [{match , L , V , NewData } | TailAST2 ];
8793 {match , L , V , {'case' , _ , _ , _ } = CaseAST } ->
88- {match , L , V , replace_case (parser_case (CaseAST , File ), File )};
89- [{'case' , _ , _ , _ } | _ ] ->
90- replace_case (parser_case (TailAST , File ), File );
91- {'case' , _ , _ , _ } ->
92- replace_case (parser_case (TailAST , File ), File );
94+ NewData = case replace_case (parser_case (CaseAST , File ), File ) of
95+ {'case' , _ , _ , _ } = Data ->
96+ Data ;
97+ Data ->
98+ {'case' , L , {nil , L }, [{clause , L , [{nil , L }], [], Data }]}
99+ end ,
100+ {match , L , V , NewData };
101+ [{'case' , L , _ , _ } = CaseAST | TailAST2 ] ->
102+ NewData = case replace_case (parser_case (CaseAST , File ), File ) of
103+ {'case' , _ , _ , _ } = Data ->
104+ Data ;
105+ Data ->
106+ {'case' , L , {nil , L }, [{clause , L , [{nil , L }], [], Data }]}
107+ end ,
108+ [NewData | TailAST2 ];
109+ {'case' , L , _ , _ } = CaseAST ->
110+ case replace_case (parser_case (CaseAST , File ), File ) of
111+ {'case' , _ , _ , _ } = Data ->
112+ Data ;
113+ Data ->
114+ {'case' , L , {nil , L }, [{clause , L , [{nil , L }], [], Data }]}
115+ end ;
93116 _ ->
94117 {ok , Cwd } = file :get_cwd (),
95118 FullFile = filename :join (Cwd , File ),
@@ -164,7 +187,7 @@ parse_clause(_, Acc, OtherAST, _, _) ->
164187parse_tuple (HeadAstTuple , ListASTClause , [], V1 , _ ) ->
165188 NewListASTClause = parse_clause (ListASTClause , [], []),
166189 OffRepeateASTClause = delete_repeate (NewListASTClause , []),
167- case check_load_code (OffRepeateASTClause ) of
190+ case check_load_code (OffRepeateASTClause , HeadAstTuple ) of
168191 false ->
169192 {'case' , V1 , HeadAstTuple , OffRepeateASTClause };
170193 {true , Data } ->
@@ -179,7 +202,7 @@ parse_tuple(HeadAstTuple, ListASTClause, TailAstTuple, V1, File) ->
179202 OffRepeateASTClause = delete_repeate (create_new_case (NewListASTClause , CountElems , TailAstTuple , [], V1 ), []),
180203 NewCase = {'case' , V1 , HeadAstTuple , OffRepeateASTClause },
181204 ChangeCase = parser_case (NewCase , File ),
182- case check_load_code (ChangeCase ) of
205+ case check_load_code (ChangeCase , HeadAstTuple ) of
183206 false ->
184207 ChangeCase ;
185208 {true , Data } ->
@@ -297,14 +320,17 @@ check_guard(Guard, [Guard | _], _) ->
297320check_guard (Guard , [HeadGuard | TailGuard ], Acc ) ->
298321 check_guard (Guard , TailGuard , [HeadGuard | Acc ]);
299322check_guard (Guard , _ , Acc ) ->
300-
301323 {true , [Guard | Acc ]}.
302324
303- check_load_code ({'case' , _ , _ , [{clause , _ , [{var , _ , _ }], _ , D3 } | _ ]}) ->
325+ check_load_code ({'case' , _ , _ , [{clause , _ , [{var , _ , '_' }], _ , D3 } | _ ]}, _HeadAstTuple ) ->
304326 {true , D3 };
305- check_load_code ([{clause , _ , [{var , _ , _ }], _ , D3 } | _ ]) ->
327+ check_load_code ([{clause , _ , [{var , _ , '_' }], _ , D3 } | _ ], _HeadAstTuple ) ->
306328 {true , D3 };
307- check_load_code (_ ) ->
329+ check_load_code ({'case' , _ , _ , [{clause , _ , [{var , Line , Var }], _ , D3 } | _ ]}, HeadAstTuple ) ->
330+ {true , [{match , Line , {var , Line , Var }, HeadAstTuple } | D3 ]};
331+ check_load_code ([{clause , _ , [{var , Line , Var }], _ , D3 } | _ ], HeadAstTuple ) ->
332+ {true , [{match , Line , {var , Line , Var }, HeadAstTuple } | D3 ]};
333+ check_load_code (_ , _ ) ->
308334 false .
309335
310336delete_repeate ([{clause , _ , Data1 , Guard1 , _ } = HeadASTClause | TailASTClause ], Acc ) ->
0 commit comments