summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtins.c17
-rw-r--r--loader.pl5
-rw-r--r--repl.pl12
-rw-r--r--stdlib.pl10
4 files changed, 36 insertions, 8 deletions
diff --git a/builtins.c b/builtins.c
index d1f70b9..79c71f0 100644
--- a/builtins.c
+++ b/builtins.c
@@ -70,6 +70,7 @@ BuiltinProto(builtinsetstreamposition);
BuiltinProto(builtinop);
BuiltinProto(builtincurrentops);
BuiltinProto(builtinnewemptymodule);
+BuiltinProto(builtinhalt);
int compareterms(Term *, Term *);
@@ -199,6 +200,8 @@ findbuiltin(Term *goal)
return builtincurrentops;
if(Match(L"$new_empty_module", 1))
return builtinnewemptymodule;
+ if(Match(L"$halt", 1))
+ return builtinhalt;
return nil;
}
@@ -1649,3 +1652,17 @@ builtinnewemptymodule(Term *goal, Binding **bindings, Module *module)
addemptymodule(name);
return 1;
}
+
+int
+builtinhalt(Term *goal, Binding **bindings, Module *module)
+{
+ USED(bindings);
+ USED(module);
+ vlong exitcode = goal->children->ival;
+ char *msg = nil;
+ if(exitcode != 0)
+ msg = smprint("pprolog exit code: %lld\n", exitcode);
+
+ exits(msg);
+ return 1;
+}
diff --git a/loader.pl b/loader.pl
index 0a9f8df..99478d0 100644
--- a/loader.pl
+++ b/loader.pl
@@ -2,7 +2,10 @@
start(Args) :-
catch((load_module_from_file('/sys/lib/prolog/repl.pl'), ReplLoaded = true), E, (print_exception(E), ReplLoaded = false)),
- ( ReplLoaded = true-> repl:repl(Args) ).
+ !,
+ ( ReplLoaded = true
+ -> repl:repl(Args)
+ ).
print_exception(E) :-
write('Caught exception while loading /sys/lib/prolog/repl.pl: '),
diff --git a/repl.pl b/repl.pl
index 0bb279f..8f68551 100644
--- a/repl.pl
+++ b/repl.pl
@@ -1,17 +1,15 @@
:- module(repl, []).
repl([_ProgName|Args]) :-
- write('Welcome to p-prolog version 1.'),
- nl,
- write('Started with args: '),
- write(Args),
- nl,
- flush_output,
handle_args(Args),
- repl_loop.
+ ( member('--no-repl', Args)
+ -> halt
+ ; repl_loop
+ ).
handle_arg('-d') :-
set_prolog_flag(debug, on).
+handle_arg('--no-repl').
handle_arg(Arg) :-
loader:load_module_from_file(Arg).
diff --git a/stdlib.pl b/stdlib.pl
index bca7e31..19b20d0 100644
--- a/stdlib.pl
+++ b/stdlib.pl
@@ -683,6 +683,16 @@ current_op(Priority, Op_specifier, Operator) :-
current_ops(Operators),
member(op(Priority, Op_specifier, Operator), Operators).
+% Halting
+
+halt(X) :-
+ is_nonvar(X),
+ is_integer(X),
+ '$halt'(X).
+
+halt :-
+ halt(0).
+
% Loading prolog text
consult(File) :-