summaryrefslogtreecommitdiff
path: root/parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'parser.c')
-rw-r--r--parser.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/parser.c b/parser.c
index 2757e66..2e64d20 100644
--- a/parser.c
+++ b/parser.c
@@ -79,14 +79,18 @@ void syntaxerror_parser(char *);
Term *prologtext(int);
Term *
-parse(int fd, int querymode)
+parse(int fd, Biobuf *bio, int querymode)
{
- fd = dup(fd, -1);
- parsein = Bfdopen(fd, OREAD);
- if(parsein == nil){
- print("Could not open file\n");
- return nil;
- }
+ if(bio == nil){
+ fd = dup(fd, -1);
+ parsein = Bfdopen(fd, OREAD);
+ if(parsein == nil){
+ print("Could not open file\n");
+ return nil;
+ }
+ }else
+ parsein = bio;
+
initgoals = nil;
initoperators();
nexttoken();
@@ -96,7 +100,9 @@ parse(int fd, int querymode)
uvlong id = 1;
result = copyterm(result, &id);
}
- Bterm(parsein);
+ if(!bio)
+ Bterm(parsein);
+
return result;
}
@@ -118,7 +124,7 @@ prologtext(int querymode)
if(t->tag == CompoundTerm && runestrcmp(t->text, L":-") == 0 && t->arity == 1){
Term *body = t->children;
- print("Got directive: %S\n", prettyprint(body));
+ print("Got directive: %S\n", prettyprint(body, 0, 0, 0));
if(body->tag == CompoundTerm && body->arity == 1 && runestrcmp(body->text, L"initialization") == 0){
Term *tmp = initgoals;
initgoals = body->children;
@@ -296,7 +302,7 @@ parseoperators(Term *list)
if(index == -1){
print("Can't parse, list of length %d contains no operators: ", length);
for(i = 0; i < length; i++)
- print("%S(%d) ", prettyprint(terms[i]), infos[i].level);
+ print("%S(%d) ", prettyprint(terms[i], 0, 0, 0), infos[i].level);
print("\n");
syntaxerror_parser("parseoperators");
}
@@ -337,7 +343,7 @@ parseoperators(Term *list)
terms[i] = terms[i+1];
}
}else{
- print("Parse error when parsing operator %S (prefix=%d, postfix=%d, infix=%d level=%d)\n", prettyprint(terms[index]), prefixlevel, postfixlevel, infixlevel, infos[index].level);
+ print("Parse error when parsing operator %S (prefix=%d, postfix=%d, infix=%d level=%d)\n", prettyprint(terms[index], 0, 0, 0), prefixlevel, postfixlevel, infixlevel, infos[index].level);
syntaxerror_parser("parseoperators");
}
}