summaryrefslogtreecommitdiff
path: root/builtins.c
diff options
context:
space:
mode:
Diffstat (limited to 'builtins.c')
-rw-r--r--builtins.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/builtins.c b/builtins.c
index 5751502..95b6438 100644
--- a/builtins.c
+++ b/builtins.c
@@ -32,6 +32,7 @@ BuiltinProto(builtincompare);
BuiltinProto(builtinfunctor);
BuiltinProto(builtinarg);
BuiltinProto(builtinuniv);
+BuiltinProto(builtincopyterm);
BuiltinProto(builtinis);
BuiltinProto(builtincatch);
BuiltinProto(builtinthrow);
@@ -98,6 +99,8 @@ findbuiltin(Term *goal)
return builtinarg;
if(Match(L"=..", 2))
return builtinuniv;
+ if(Match(L"copy_term", 2))
+ return builtincopyterm;
if(Match(L"is", 2))
return builtinis;
if(Match(L"catch", 3))
@@ -461,6 +464,17 @@ builtinuniv(Term *goal, Binding **bindings, Module *module)
}
}
+int
+builtincopyterm(Term *goal, Binding **bindings, Module *module)
+{
+ USED(module);
+ Term *term1 = goal->children;
+ Term *term2 = term1->next;
+ Term *t = copyterm(term1, &clausenr);
+ clausenr++;
+ return unify(term2, t, bindings);
+}
+
#define ToFloat(t) (t->tag == IntegerTerm ? (double)t->ival : t->dval)
Term *