summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtins.c15
-rw-r--r--loader.pl6
-rw-r--r--module.c1
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");
}