summary refs log tree commit diff
path: root/lisc/parse.c
diff options
context:
space:
mode:
Diffstat (limited to 'lisc/parse.c')
-rw-r--r--lisc/parse.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/lisc/parse.c b/lisc/parse.c
index 22ab34b..d9eda74 100644
--- a/lisc/parse.c
+++ b/lisc/parse.c
@@ -778,12 +778,9 @@ parsedat(void cb(Dat *))
 	cb(&d);
 }
 
-Fn *
-parse(FILE *f, void data(Dat *))
+void
+parse(FILE *f, void data(Dat *), void func(Fn *))
 {
-	Fn *fn;
-
-	fn = 0;
 	inf = f;
 	lnum = 1;
 	thead = TXXX;
@@ -791,12 +788,7 @@ parse(FILE *f, void data(Dat *))
 	for (;;)
 		switch (nextnl()) {
 		case TFunc:
-			if (fn)
-				/* todo, support multiple
-				 * functions per file
-				 */
-				diag("too many functions");
-			fn = parsefn();
+			func(parsefn());
 			break;
 		case TType:
 			parsetyp();
@@ -805,7 +797,7 @@ parse(FILE *f, void data(Dat *))
 			parsedat(data);
 			break;
 		case TEOF:
-			return fn;
+			return;
 		default:
 			err("top-level definition expected");
 			break;