|
29 | 29 | all_loaded/0,
|
30 | 30 | load_abs/1,
|
31 | 31 | load_binary/3,
|
32 |
| - ensure_loaded/1 |
| 32 | + ensure_loaded/1, |
| 33 | + which/1, |
| 34 | + is_loaded/1 |
33 | 35 | ]).
|
34 | 36 |
|
35 | 37 | %%-----------------------------------------------------------------------------
|
@@ -58,7 +60,7 @@ all_loaded() ->
|
58 | 60 | erlang:nif_error(undefined).
|
59 | 61 |
|
60 | 62 | %%-----------------------------------------------------------------------------
|
61 |
| -%% @param Filename path to the beam to open, without .beams suffix |
| 63 | +%% @param Filename path to the beam to open, without .beam suffix |
62 | 64 | %% @returns A tuple with the name of the module
|
63 | 65 | %% @doc Load a module from a path.
|
64 | 66 | %% Error return result type is different from Erlang/OTP.
|
@@ -98,3 +100,35 @@ load_binary(_Module, _Filename, _Binary) ->
|
98 | 100 | Module :: atom().
|
99 | 101 | ensure_loaded(_Module) ->
|
100 | 102 | erlang:nif_error(undefined).
|
| 103 | + |
| 104 | +%%----------------------------------------------------------------------------- |
| 105 | +%% @param Module module to test |
| 106 | +%% @returns Tuple `{file, preloaded}' if module is loaded or `false' |
| 107 | +%% @doc Determine if a module is loaded. AtomVM works in |
| 108 | +%% an embedded-like mode where modules are loaded at start-up but modules |
| 109 | +%% can be loaded explicitely as well (especially from a binary with `load_binary/3'). |
| 110 | +%% @end |
| 111 | +%%----------------------------------------------------------------------------- |
| 112 | +is_loaded(Module) -> |
| 113 | + case ?MODULE:ensure_loaded(Module) of |
| 114 | + {module, _Module} -> |
| 115 | + {file, preloaded}; |
| 116 | + {error, _} -> |
| 117 | + false |
| 118 | + end. |
| 119 | + |
| 120 | +%%----------------------------------------------------------------------------- |
| 121 | +%% @param Module module to test |
| 122 | +%% @returns `preloaded' if module is loaded or `false' |
| 123 | +%% @doc Determine if a module is loaded. There currently is no way to |
| 124 | +%% distinguish a module that was loaded with `load_binary/3' or that was |
| 125 | +%% preloaded at startup. |
| 126 | +%% @end |
| 127 | +%%----------------------------------------------------------------------------- |
| 128 | +which(Module) -> |
| 129 | + case ?MODULE:ensure_loaded(Module) of |
| 130 | + {module, _Module} -> |
| 131 | + preloaded; |
| 132 | + {error, _} -> |
| 133 | + non_existing |
| 134 | + end. |
0 commit comments