summary refs log tree commit diff
path: root/parse.c
diff options
context:
space:
mode:
Diffstat (limited to 'parse.c')
-rw-r--r--parse.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/parse.c b/parse.c
index 738ec5b..ae7f785 100644
--- a/parse.c
+++ b/parse.c
@@ -1077,7 +1077,7 @@ parsedatstr(Dat *d)
 }
 
 static void
-parsedat(void cb(Dat *), Lnk *lnk)
+parsedat(void cb(Dat *, FILE *), Lnk *lnk, FILE *outf)
 {
 	char name[NString] = {0};
 	int t;
@@ -1097,7 +1097,7 @@ parsedat(void cb(Dat *), Lnk *lnk)
 	d.type = DStart;
 	d.name = name;
 	d.lnk = lnk;
-	cb(&d);
+	cb(&d, outf);
 
 	if (t != Tlbrace)
 		err("expected data contents in { .. }");
@@ -1130,7 +1130,7 @@ parsedat(void cb(Dat *), Lnk *lnk)
 				parsedatstr(&d);
 			else
 				err("constant literal expected");
-			cb(&d);
+			cb(&d, outf);
 			t = nextnl();
 		} while (t == Tint || t == Tflts || t == Tfltd || t == Tstr || t == Tglo);
 		if (t == Trbrace)
@@ -1140,7 +1140,7 @@ parsedat(void cb(Dat *), Lnk *lnk)
 	}
 Done:
 	d.type = DEnd;
-	cb(&d);
+	cb(&d, outf);
 }
 
 static int
@@ -1177,7 +1177,8 @@ parselnk(Lnk *lnk)
 }
 
 void
-parse(FILE *f, char *path, void dbgfile(char *), void data(Dat *), void func(Fn *))
+parse(FILE *f, char *path, FILE *outf,
+	void data(Dat *, FILE *), void func(Fn *, FILE *))
 {
 	Lnk lnk;
 	uint n;
@@ -1196,13 +1197,13 @@ parse(FILE *f, char *path, void dbgfile(char *), void data(Dat *), void func(Fn
 			err("top-level definition expected");
 		case Tdbgfile:
 			expect(Tstr);
-			dbgfile(tokval.str);
+			emitdbgfile(tokval.str, outf);
 			break;
 		case Tfunc:
-			func(parsefn(&lnk));
+			func(parsefn(&lnk), outf);
 			break;
 		case Tdata:
-			parsedat(data, &lnk);
+			parsedat(data, &lnk, outf);
 			break;
 		case Ttype:
 			parsetyp();