Skip to content

Commit facde14

Browse files
committed
Inline struct loading
1 parent 40e9306 commit facde14

1 file changed

Lines changed: 12 additions & 17 deletions

File tree

lib/elixir/src/elixir_map.erl

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -164,19 +164,6 @@ lookup_struct_info_from_data_tables(Module) ->
164164
end.
165165

166166
load_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

221216
assert_and_trace_struct_assocs(Meta, Name, Assocs, E) ->

0 commit comments

Comments
 (0)