@@ -65,15 +65,23 @@ expand_else(nil, E) ->
65
65
66
66
translate (Meta , Args , S ) ->
67
67
{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 )}.
77
85
78
86
build_case ([{'<-' , Meta , [{Name , _ , Ctx }, _ ] = Args } | Rest ], DoExpr , Wrapper )
79
87
when is_atom (Name ) andalso is_atom (Ctx ) ->
@@ -90,18 +98,15 @@ build_case([Expr | Rest], DoExpr, Wrapper) ->
90
98
build_case ([], DoExpr , _Wrapper ) ->
91
99
DoExpr .
92
100
93
- build_else (Meta , WithCases , ElseClauses ) ->
101
+ build_else (Meta , ElseClauses ) ->
94
102
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 )].
100
105
101
- else_to_error_clause (Clauses ) ->
102
- [{'->' , Meta , [[ {error , Match }], Expr ] } ||
106
+ each_clause_to_error_match (Clauses ) ->
107
+ [{match , Meta , [{error , Match }], Expr } ||
103
108
{'->' , Meta , [[Match ], Expr ]} <- Clauses ].
104
109
105
110
build_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