diff options
-rw-r--r-- | builtins.c | 18 | ||||
-rw-r--r-- | parser.c | 4 |
2 files changed, 20 insertions, 2 deletions
@@ -229,6 +229,21 @@ canbecalled(Term *t) return 1; } +void +updateclausenr(Term *t, uvlong nr) +{ + /* Change the clause number on the term and its subterms, unless it is a variable */ + if(t->tag == VariableTerm) + return; + + t->clausenr = nr; + if(t->tag == CompoundTerm){ + Term *child; + for(child = t->children; child != nil; child = child->next) + updateclausenr(child, nr); + } +} + int builtincall(Term *goal, Binding **bindings, Module *module) { @@ -238,6 +253,9 @@ builtincall(Term *goal, Binding **bindings, Module *module) if(!canbecalled(callgoal)) Throw(typeerror(L"callable", callgoal)); + updateclausenr(callgoal, clausenr); + clausenr++; + goalstack = addgoals(goalstack, callgoal, module); return 1; } @@ -74,8 +74,8 @@ parse(int fd, Biobuf *bio, int querymode) Term *result = prologtext(querymode); if(querymode && result){ - uvlong id = 1; - result = copyterm(result, &id); + result = copyterm(result, &clausenr); + clausenr++; } if(!bio) Bterm(parsein); |