@@ -65,15 +65,23 @@ expand_else(nil, E) ->
6565
6666translate (Meta , Args , S ) ->
6767 {Parts , [{do , Expr } | ExprList ]} = elixir_utils :split_last (Args ),
68- CaseExpr =
69- case ExprList of
70- [{else , ElseExpr }] ->
71- build_else (Meta , build_case (Parts , {ok , Expr }, fun (X ) -> {error , X } end ), ElseExpr );
72- [] ->
73- build_case (Parts , Expr , fun (X ) -> X end )
74- end ,
75- {TC , TS } = elixir_translator :translate (CaseExpr , S # elixir_scope {extra = nil }),
76- {TC , elixir_scope :mergec (S , TS )}.
68+ case ExprList of
69+ [{else , ElseExpr }] ->
70+ {TCases , TS } = translate_case (Parts , {ok , Expr }, fun (X ) -> {error , X } end , S ),
71+ translate_else (Meta , TCases , ElseExpr , TS );
72+ [] ->
73+ translate_case (Parts , Expr , fun (X ) -> X end , S )
74+ end .
75+
76+ translate_case (Parts , DoExpr , Wrapper , S ) ->
77+ Cases = build_case (Parts , DoExpr , Wrapper ),
78+ {TCases , TS } = elixir_translator :translate (Cases , S # elixir_scope {extra = nil }),
79+ {TCases , elixir_scope :mergec (S , TS )}.
80+
81+ translate_else (Meta , WithCases , ElseExpr , S ) ->
82+ ElseClauses = build_else (Meta , ElseExpr ),
83+ {TClauses , TS } = elixir_clauses :clauses (Meta , ElseClauses , S # elixir_scope {extra = nil }),
84+ {{'case' , ? ann (Meta ), WithCases , TClauses }, elixir_scope :mergec (S , TS )}.
7785
7886build_case ([{'<-' , Meta , [{Name , _ , Ctx }, _ ] = Args } | Rest ], DoExpr , Wrapper )
7987 when is_atom (Name ) andalso is_atom (Ctx ) ->
@@ -90,18 +98,15 @@ build_case([Expr | Rest], DoExpr, Wrapper) ->
9098build_case ([], DoExpr , _Wrapper ) ->
9199 DoExpr .
92100
93- build_else (Meta , WithCases , ElseClauses ) ->
101+ build_else (Meta , ElseClauses ) ->
94102 Result = {result , Meta , ? MODULE },
95- Clauses = [
96- {'->' , Meta , [[{ok , Result }], Result ]}
97- | else_to_error_clause (ElseClauses )
98- ] ++ [build_raise (Meta )],
99- {'case' , Meta , [WithCases , [{do , Clauses }]]}.
103+ [{match , Meta , [{ok , Result }], Result } |
104+ each_clause_to_error_match (ElseClauses )] ++ [build_raise (Meta )].
100105
101- else_to_error_clause (Clauses ) ->
102- [{'->' , Meta , [[ {error , Match }], Expr ] } ||
106+ each_clause_to_error_match (Clauses ) ->
107+ [{match , Meta , [{error , Match }], Expr } ||
103108 {'->' , Meta , [[Match ], Expr ]} <- Clauses ].
104109
105110build_raise (Meta ) ->
106- Other = {raise , Meta , ? MODULE },
107- {'->' , ? generated , [[ {error , Other }], {{'.' , Meta , [erlang , error ]}, Meta , [{with_clause , Other }]}] }.
111+ Other = {other , Meta , ? MODULE },
112+ {match , ? generated , [{error , Other }], {{'.' , Meta , [erlang , error ]}, Meta , [{with_clause , Other }]}}.
0 commit comments