|
1 | 1 | -module(elixir).
|
2 | 2 | -behaviour(application).
|
3 | 3 | -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, |
5 | 6 | eval_quoted/2, eval_quoted/3, eval_quoted/4,
|
6 | 7 | eval_forms/3, translate_forms/3]).
|
7 | 8 | -include("elixir.hrl").
|
@@ -46,37 +47,47 @@ start_cli() ->
|
46 | 47 | %% EVAL HOOKS
|
47 | 48 |
|
48 | 49 | 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 |
52 | 63 | end,
|
53 | 64 |
|
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 |
57 | 68 | end,
|
58 | 69 |
|
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 |
62 | 73 | end,
|
63 | 74 |
|
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 |
67 | 78 | end,
|
68 | 79 |
|
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 |
72 | 83 | end,
|
73 | 84 |
|
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 |
77 | 88 | end,
|
78 | 89 |
|
79 |
| - #elixir_scope{ |
| 90 | + Scope#elixir_scope{ |
80 | 91 | file=File, local=Local,
|
81 | 92 | macros=Macros, functions=Functions,
|
82 | 93 | requires=Requires, aliases=Aliases }.
|
|
0 commit comments