summaryrefslogtreecommitdiff
path: root/builtins.c
diff options
context:
space:
mode:
Diffstat (limited to 'builtins.c')
-rw-r--r--builtins.c107
1 files changed, 41 insertions, 66 deletions
diff --git a/builtins.c b/builtins.c
index df5bc33..b0fb447 100644
--- a/builtins.c
+++ b/builtins.c
@@ -5,14 +5,14 @@
#include "dat.h"
#include "fns.h"
-#define BuiltinProto(name) int name(Term *, Term *, Goal **, Binding **)
+#define BuiltinProto(name) int name(Term *, Term *, Binding **)
#define Match(X, Y) (runestrcmp(name, X) == 0 && arity == Y)
#define Throw(What) do{\
Goal *g = malloc(sizeof(Goal)); \
g->goal = What; \
g->catcher = nil; \
- g->next = *goals; \
- *goals = g; \
+ g->next = goalstack; \
+ goalstack = g; \
return 1; \
}while(0)
@@ -128,17 +128,16 @@ findbuiltin(Term *goal)
}
int
-builtinfail(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinfail(Term *database, Term *goal, Binding **bindings)
{
USED(database);
USED(goal);
- USED(goals);
USED(bindings);
return 0;
}
int
-builtincall(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtincall(Term *database, Term *goal, Binding **bindings)
{
USED(database);
USED(bindings);
@@ -146,17 +145,16 @@ builtincall(Term *database, Term *goal, Goal **goals, Binding **bindings)
Goal *g = malloc(sizeof(Goal));
g->goal = goal->children;
g->catcher = nil;
- g->next = *goals;
- *goals = g;
+ g->next = goalstack;
+ goalstack = g;
return 1;
}
int
-builtincut(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtincut(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
USED(bindings);
Choicepoint *cp = choicestack;
@@ -171,80 +169,72 @@ builtincut(Term *database, Term *goal, Goal **goals, Binding **bindings)
}
int
-builtinvar(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinvar(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
USED(bindings);
Term *arg = goal->children;
return (arg->tag == VariableTerm);
}
int
-builtinatom(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinatom(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
USED(bindings);
Term *arg = goal->children;
return (arg->tag == AtomTerm);
}
int
-builtininteger(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtininteger(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
USED(bindings);
Term *arg = goal->children;
return (arg->tag == NumberTerm && arg->numbertype == NumberInt);
}
int
-builtinfloat(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinfloat(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
USED(bindings);
Term *arg = goal->children;
return (arg->tag == NumberTerm && arg->numbertype == NumberFloat);
}
int
-builtinatomic(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinatomic(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
USED(bindings);
Term *arg = goal->children;
return (arg->tag == AtomTerm || arg->tag == NumberTerm);
}
int
-builtincompound(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtincompound(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
USED(bindings);
Term *arg = goal->children;
return (arg->tag == CompoundTerm);
}
int
-builtinnonvar(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinnonvar(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
USED(bindings);
Term *arg = goal->children;
return (arg->tag != VariableTerm);
}
int
-builtinnumber(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinnumber(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
USED(bindings);
Term *arg = goal->children;
return (arg->tag == NumberTerm);
@@ -306,10 +296,9 @@ compareterms(Term *t1, Term *t2)
}
int
-builtincompare(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtincompare(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
Term *order = goal->children;
Term *t1 = order->next;
Term *t2 = t1->next;
@@ -328,10 +317,9 @@ builtincompare(Term *database, Term *goal, Goal **goals, Binding **bindings)
}
int
-builtinfunctor(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinfunctor(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
Term *term = goal->children;
Term *name = term->next;
@@ -366,10 +354,9 @@ builtinfunctor(Term *database, Term *goal, Goal **goals, Binding **bindings)
}
int
-builtinarg(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinarg(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
Term *n = goal->children;
Term *term = n->next;
@@ -403,10 +390,9 @@ listlength(Term *term)
}
int
-builtinuniv(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinuniv(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
Term *term = goal->children;
Term *list = term->next;
@@ -477,10 +463,9 @@ aritheval(Term *expr)
}
int
-builtinis(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinis(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
Term *result = goal->children;
Term *expr = result->next;
@@ -493,7 +478,7 @@ builtinis(Term *database, Term *goal, Goal **goals, Binding **bindings)
}
int
-builtincatch(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtincatch(Term *database, Term *goal, Binding **bindings)
{
USED(database);
USED(bindings);
@@ -505,30 +490,29 @@ builtincatch(Term *database, Term *goal, Goal **goals, Binding **bindings)
Goal *catchframe = malloc(sizeof(Goal));
catchframe->goal = recover;
catchframe->catcher = catcher;
- catchframe->next = *goals;
- *goals = catchframe;
+ catchframe->next = goalstack;
+ goalstack = catchframe;
Goal *g = malloc(sizeof(Goal));
g->goal = catchgoal;
g->catcher = nil;
- g->next = *goals;
- *goals = g;
+ g->next = goalstack;
+ goalstack = g;
return 1;
}
int
-builtinthrow(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinthrow(Term *database, Term *goal, Binding **bindings)
{
USED(database);
USED(bindings);
- USED(goals);
Term *ball = goal->children;
print("Throwing: %S\n", prettyprint(ball, 0, 0, 0));
Goal *g;
- for(g = *goals; g != nil; g = g->next){
+ for(g = goalstack; g != nil; g = g->next){
if(g->catcher == nil)
continue;
@@ -539,12 +523,12 @@ builtinthrow(Term *database, Term *goal, Goal **goals, Binding **bindings)
exits("exception");
return 0;
}else{
- *goals = g->next;
+ goalstack = g->next;
Goal *newgoal = malloc(sizeof(Goal));
newgoal->goal = copyterm(g->goal, nil);
newgoal->catcher = nil;
- newgoal->next = *goals;
- *goals = newgoal;
+ newgoal->next = goalstack;
+ goalstack = newgoal;
applybinding(newgoal->goal, *bindings);
Choicepoint *cp = choicestack;
@@ -559,17 +543,16 @@ builtinthrow(Term *database, Term *goal, Goal **goals, Binding **bindings)
}
int
-builtincurrentprologflag(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtincurrentprologflag(Term *database, Term *goal, Binding **bindings)
{
USED(database);
USED(goal);
- USED(goals);
USED(bindings);
return 0;
}
int
-builtinsetprologflag(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinsetprologflag(Term *database, Term *goal, Binding **bindings)
{
USED(database);
USED(bindings);
@@ -589,10 +572,9 @@ builtinsetprologflag(Term *database, Term *goal, Goal **goals, Binding **binding
}
int
-builtinopen(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinopen(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
USED(bindings);
Term *sourcesink = goal->children;
@@ -626,10 +608,9 @@ builtinopen(Term *database, Term *goal, Goal **goals, Binding **bindings)
}
int
-builtinclose(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinclose(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
USED(bindings);
Term *stream = goal->children;
@@ -653,10 +634,9 @@ builtinclose(Term *database, Term *goal, Goal **goals, Binding **bindings)
}
int
-builtincurrentinput(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtincurrentinput(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
USED(bindings);
Term *stream = goal->children;
@@ -668,10 +648,9 @@ builtincurrentinput(Term *database, Term *goal, Goal **goals, Binding **bindings
}
int
-builtincurrentoutput(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtincurrentoutput(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
USED(bindings);
Term *stream = goal->children;
@@ -683,10 +662,9 @@ builtincurrentoutput(Term *database, Term *goal, Goal **goals, Binding **binding
}
int
-builtinsetinput(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinsetinput(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
USED(bindings);
Term *stream = goal->children;
@@ -707,10 +685,9 @@ builtinsetinput(Term *database, Term *goal, Goal **goals, Binding **bindings)
}
int
-builtinsetoutput(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinsetoutput(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
USED(bindings);
Term *stream = goal->children;
@@ -731,10 +708,9 @@ builtinsetoutput(Term *database, Term *goal, Goal **goals, Binding **bindings)
}
int
-builtinreadterm(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinreadterm(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
USED(bindings);
Term *stream = goal->children;
@@ -763,10 +739,9 @@ builtinreadterm(Term *database, Term *goal, Goal **goals, Binding **bindings)
}
int
-builtinwriteterm(Term *database, Term *goal, Goal **goals, Binding **bindings)
+builtinwriteterm(Term *database, Term *goal, Binding **bindings)
{
USED(database);
- USED(goals);
USED(bindings);
Term *stream = goal->children;