summaryrefslogtreecommitdiff
path: root/builtins.c
diff options
context:
space:
mode:
Diffstat (limited to 'builtins.c')
-rw-r--r--builtins.c17
1 files changed, 17 insertions, 0 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;
+}