diff options
author | Peter Mikkelsen <peter@pmikkelsen.com> | 2021-07-22 18:48:15 +0000 |
---|---|---|
committer | Peter Mikkelsen <peter@pmikkelsen.com> | 2021-07-22 18:48:15 +0000 |
commit | d7a4ae651e8334955ad39c4adf02e36b6c99ec2f (patch) | |
tree | 88f2504b303e40e3dfa52fed96ef465c6cfcd69d /loader.pl | |
parent | 5fe8b9865cfbd7388b8f6355a73b1436d40cfb1e (diff) |
Understand initialization/1 directives
Diffstat (limited to 'loader.pl')
-rw-r--r-- | loader.pl | 23 |
1 files changed, 21 insertions, 2 deletions
@@ -15,8 +15,25 @@ load_module_from_file(File) :- ; atom_concat(File, '.pl', File1), open(File1, read, Stream) ), - read_and_handle_terms(Stream, user, _), - close(Stream). + read_and_handle_terms(Stream, user, Module), + close(Stream), + run_initialization_goals(Module). + +run_initialization_goals(Module) :- + ( retract(initialization_goals(Module, Goal)), + Module:catch(Goal, E, loader:print_initialization_goal_error(Module, Goal, E)), + fail % Backtrack to find more goals + ; true + ). + +print_initialization_goal_error(Module, Goal, Exception) :- + write('Initialization goal threw exception:'), + nl, + write(' Module: '), write(Module), nl, + write(' Goal: '), write(Goal), nl, + write(' Exception: '), write(Exception), nl, + nl. + read_and_handle_terms(Stream, Module0, Module) :- ( read_one_term(Stream, Term, Singles) @@ -86,6 +103,8 @@ handle_directive(dynamic(PI), Module, Module) :- ). handle_directive(op(Priority, Specifier, Operator), Module, Module) :- Module:op(Priority, Specifier, Operator). +handle_directive(initialization(T), Module, Module) :- + loader:assertz(initialization_goals(Module, T)). handle_directive(include(F), Module, NewModule) :- open(F, read, S), read_and_handle_terms(S, Module, NewModule), |