Skip to content

Commit c634a5d

Browse files
committed
Add :elixir.scope_for_eval/2 convenience function
1 parent 9a6ac4f commit c634a5d

File tree

1 file changed

+31
-20
lines changed

1 file changed

+31
-20
lines changed

lib/elixir/src/elixir.erl

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
-module(elixir).
22
-behaviour(application).
33
-export([main/1, start_cli/0,
4-
scope_for_eval/1, eval/2, eval/3, eval/4,
4+
scope_for_eval/1, scope_for_eval/2,
5+
eval/2, eval/3, eval/4,
56
eval_quoted/2, eval_quoted/3, eval_quoted/4,
67
eval_forms/3, translate_forms/3]).
78
-include("elixir.hrl").
@@ -46,37 +47,47 @@ start_cli() ->
4647
%% EVAL HOOKS
4748

4849
scope_for_eval(Opts) ->
49-
case lists:keyfind(file, 1, Opts) of
50-
{ file, RawFile } -> File = to_binary(RawFile);
51-
false -> File = <<"nofile">>
50+
scope_for_eval(#elixir_scope{
51+
file = <<"nofile">>,
52+
local = nil,
53+
aliases = [],
54+
requires = elixir_dispatch:default_requires(),
55+
functions = elixir_dispatch:default_functions(),
56+
macros = elixir_dispatch:default_macros()
57+
}, Opts).
58+
59+
scope_for_eval(Scope, Opts) ->
60+
File = case lists:keyfind(file, 1, Opts) of
61+
{ file, RawFile } -> to_binary(RawFile);
62+
false -> Scope#elixir_scope.file
5263
end,
5364

54-
case lists:keyfind(delegate_locals_to, 1, Opts) of
55-
{ delegate_locals_to, Local } -> Local;
56-
false -> Local = nil
65+
Local = case lists:keyfind(delegate_locals_to, 1, Opts) of
66+
{ delegate_locals_to, LocalOpt } -> LocalOpt;
67+
false -> Scope#elixir_scope.local
5768
end,
5869

59-
case lists:keyfind(aliases, 1, Opts) of
60-
{ aliases, Aliases } -> Aliases;
61-
false -> Aliases = []
70+
Aliases = case lists:keyfind(aliases, 1, Opts) of
71+
{ aliases, AliasesOpt } -> AliasesOpt;
72+
false -> Scope#elixir_scope.aliases
6273
end,
6374

64-
case lists:keyfind(requires, 1, Opts) of
65-
{ requires, List } -> Requires = ordsets:from_list(List);
66-
false -> Requires = elixir_dispatch:default_requires()
75+
Requires = case lists:keyfind(requires, 1, Opts) of
76+
{ requires, List } -> ordsets:from_list(List);
77+
false -> Scope#elixir_scope.requires
6778
end,
6879

69-
case lists:keyfind(functions, 1, Opts) of
70-
{ functions, Functions } -> Functions;
71-
false -> Functions = elixir_dispatch:default_functions()
80+
Functions = case lists:keyfind(functions, 1, Opts) of
81+
{ functions, FunctionsOpt } -> FunctionsOpt;
82+
false -> Scope#elixir_scope.functions
7283
end,
7384

74-
case lists:keyfind(macros, 1, Opts) of
75-
{ macros, Macros } -> Macros;
76-
false -> Macros = elixir_dispatch:default_macros()
85+
Macros = case lists:keyfind(macros, 1, Opts) of
86+
{ macros, MacrosOpt } -> MacrosOpt;
87+
false -> Scope#elixir_scope.macros
7788
end,
7889

79-
#elixir_scope{
90+
Scope#elixir_scope{
8091
file=File, local=Local,
8192
macros=Macros, functions=Functions,
8293
requires=Requires, aliases=Aliases }.

0 commit comments

Comments
 (0)