@@ -164,19 +164,6 @@ lookup_struct_info_from_data_tables(Module) ->
164164 end .
165165
166166load_struct (Meta , Name , Assocs , E ) ->
167- try
168- maybe_load_struct (Meta , Name , Assocs , E )
169- of
170- {ok , Struct } -> Struct ;
171- {error , Desc } -> file_error (Meta , E , ? MODULE , Desc )
172- catch
173- Kind :Reason ->
174- Info = [{Name , '__struct__' , 1 , [{file , " expanding struct" }]},
175- elixir_utils :caller (? line (Meta ), ? key (E , file ), ? key (E , module ), ? key (E , function ))],
176- erlang :raise (Kind , Reason , Info )
177- end .
178-
179- maybe_load_struct (Meta , Name , Assocs , E ) ->
180167 try
181168 case is_open (Name , Meta , E ) andalso elixir_def :external_for (Meta , Name , '__struct__' , 1 , [def ]) of
182169 % % If I am accessing myself and there is no __struct__ function,
@@ -207,15 +194,23 @@ maybe_load_struct(Meta, Name, Assocs, E) ->
207194 [maps :is_key (Key , Struct ) orelse
208195 function_error (Meta , E , ? MODULE , {unknown_key_for_struct , Name , Key })
209196 || {Key , _ } <- Assocs ],
210- { ok , Struct } ;
197+ Struct ;
211198
212199 #{'__struct__' := StructName } when is_atom (StructName ) ->
213- {error , {struct_name_mismatch , Name , StructName }};
200+ Desc = {struct_name_mismatch , Name , StructName },
201+ file_error (Meta , E , ? MODULE , Desc );
214202
215203 Other ->
216- {error , {invalid_struct_return_value , Name , Other }}
204+ Desc = {invalid_struct_return_value , Name , Other },
205+ file_error (Meta , E , ? MODULE , Desc )
217206 catch
218- error :undef -> {error , struct_undef (Name , E )}
207+ error :undef ->
208+ file_error (Meta , E , ? MODULE , struct_undef (Name , E ));
209+
210+ Kind :Reason ->
211+ Info = [{Name , '__struct__' , 1 , [{file , " expanding struct" }]},
212+ elixir_utils :caller (? line (Meta ), ? key (E , file ), ? key (E , module ), ? key (E , function ))],
213+ erlang :raise (Kind , Reason , Info )
219214 end .
220215
221216assert_and_trace_struct_assocs (Meta , Name , Assocs , E ) ->
0 commit comments