From 0cf3816c9419954317fd54da5a063615402bf1d1 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Thu, 22 Jul 2021 16:58:42 +0000 Subject: Actually load repl.pl with the prolog loader, and handle module directives --- builtins.c | 15 ++++++++++++++- loader.pl | 6 +++++- module.c | 1 - 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/builtins.c b/builtins.c index e403541..b238ad6 100644 --- a/builtins.c +++ b/builtins.c @@ -68,6 +68,7 @@ BuiltinProto(builtinstreamproperties); BuiltinProto(builtinsetstreamposition); BuiltinProto(builtinop); BuiltinProto(builtincurrentops); +BuiltinProto(builtinnewemptymodule); int compareterms(Term *, Term *); @@ -193,6 +194,8 @@ findbuiltin(Term *goal) return builtinop; if(Match(L"current_ops", 1)) return builtincurrentops; + if(Match(L"$new_empty_module", 1)) + return builtinnewemptymodule; return nil; } @@ -1164,7 +1167,7 @@ assertclause(Term *clause, Module *module, int after) p->builtin = 0; p->dynamic = 1; p->next = nil; - module->predicates = appendpredicate(module->predicates, p); + module->predicates = appendpredicate(p, module->predicates); return 1; } @@ -1631,4 +1634,14 @@ builtincurrentops(Term *goal, Binding **bindings, Module *module) Term *realops = mklist(oplist); return unify(ops, realops, bindings); +} + +int +builtinnewemptymodule(Term *goal, Binding **bindings, Module *module) +{ + USED(bindings); + USED(module); + Rune *name = goal->children->text; + addemptymodule(name); + return 1; } \ No newline at end of file diff --git a/loader.pl b/loader.pl index 7fa6734..3d94566 100644 --- a/loader.pl +++ b/loader.pl @@ -65,6 +65,10 @@ handle_directive(include(F), Module, NewModule) :- close(S). handle_directive(ensure_loaded(F), Module, Module) :- ensure_load(F). +handle_directive(module(NewModule, Exports), Module, NewModule) :- + is_atom(NewModule), + '$new_empty_module'(NewModule). + % Do something about the exports as well. handle_directive(D, Module, Module) :- write('Cannot handle directive: '), write(D), @@ -75,5 +79,5 @@ ensure_loads(_) :- fail. ensure_load(F) :- ( ensure_loads(F) -> true - ; asserta(ensure_loads(F)), load_module_from_file(F) + ; loader:asserta(ensure_loads(F)), load_module_from_file(F) ). diff --git a/module.c b/module.c index 31331c0..07786c2 100644 --- a/module.c +++ b/module.c @@ -21,7 +21,6 @@ initmodules(void) } usermodule = addemptymodule(L"user"); - parsemodule("/sys/lib/prolog/repl.pl"); parsemodule("/sys/lib/prolog/loader.pl"); } -- cgit v1.2.3