|
39 | 39 | atom_resolver/2, |
40 | 40 | literal_resolver/2, |
41 | 41 | type_resolver/2, |
| 42 | + import_resolver/2, |
42 | 43 | set_native_code/3 |
43 | 44 | ]). |
44 | 45 |
|
@@ -135,6 +136,15 @@ literal_resolver(_Module, _Index) -> |
135 | 136 | type_resolver(_Module, _Index) -> |
136 | 137 | erlang:nif_error(undefined). |
137 | 138 |
|
| 139 | +%% @doc Get an imported function triplet from its index |
| 140 | +%% @return The imported function as {Module, Function, Arity} |
| 141 | +%% @param Module module to get the imported function from |
| 142 | +%% @param Index imported function index in the module |
| 143 | +-spec import_resolver(Module :: module(), Index :: non_neg_integer()) -> |
| 144 | + {atom(), atom(), non_neg_integer()}. |
| 145 | +import_resolver(_Module, _Index) -> |
| 146 | + erlang:nif_error(undefined). |
| 147 | + |
138 | 148 | %% @doc Associate a native code stream with a module |
139 | 149 | %% @return ok |
140 | 150 | %% @param Module module to set the native code of |
@@ -164,13 +174,17 @@ load(Module) -> |
164 | 174 | code_server:literal_resolver(Module, Index) |
165 | 175 | end, |
166 | 176 | TypeResolver = fun(Index) -> code_server:type_resolver(Module, Index) end, |
| 177 | + ImportResolver = fun(Index) -> |
| 178 | + code_server:import_resolver(Module, Index) |
| 179 | + end, |
167 | 180 | {StreamModule, Stream0} = jit:stream(jit_mmap_size(byte_size(Code))), |
168 | 181 | {BackendModule, BackendState0} = jit:backend(StreamModule, Stream0), |
169 | 182 | {LabelsCount, BackendState1} = jit:compile( |
170 | 183 | Code, |
171 | 184 | AtomResolver, |
172 | 185 | LiteralResolver, |
173 | 186 | TypeResolver, |
| 187 | + ImportResolver, |
174 | 188 | BackendModule, |
175 | 189 | BackendState0 |
176 | 190 | ), |
|
0 commit comments