Browse code

Change "include" word into ~ rune for includes.

Andrew Alderwick authored on 17/11/2021 22:06:00
Showing 6 changed files
... ...
@@ -82,8 +82,8 @@ expect_failure 'Recursion level too deep:' <<'EOD'
82 82
 %you { me }
83 83
 |1000 me
84 84
 EOD
85
-expect_failure 'Recursion level too deep: include' <<'EOD'
86
-include asma-test/in.tal
85
+expect_failure 'Recursion level too deep: ~asma-test/in.tal' <<'EOD'
86
+~asma-test/in.tal
87 87
 EOD
88 88
 expect_failure 'Label not found: ;blah' <<'EOD'
89 89
 |1000 ;blah
... ...
@@ -62,7 +62,7 @@
62 62
 	&dest-file
63 63
 		"bin/asma-boot.rom 00
64 64
 
65
-include projects/library/asma.tal
65
+~projects/library/asma.tal
66 66
 
67 67
 (
68 68
 	Heap, a large temporary area for keeping track of labels. More complex
... ...
@@ -226,7 +226,7 @@
226 226
 	POP2 POP2 POP2 POP2 POP2
227 227
 	JMP2r
228 228
 
229
-include projects/library/file-read-chunks.tal
229
+~projects/library/file-read-chunks.tal
230 230
 
231 231
 (
232 232
 	Assemble a chunk of source code, which begins with whitespace or the start
... ...
@@ -303,7 +303,6 @@ include projects/library/file-read-chunks.tal
303 303
 	asma/state contains several meaningful bits:
304 304
 	0x02 we are in a comment,
305 305
 	0x04 we are in a macro body,
306
-	0x08 we are expecting an include filename, and
307 306
 	0x10 we are in a macro body that we are ignoring
308 307
 	   (because the macro was already defined in a previous pass).
309 308
 	Since 0x10 never appears without 0x04, the lowest bit set in asma/state is
... ...
@@ -349,15 +348,11 @@ include projects/library/file-read-chunks.tal
349 348
 		:asma-first-char-normal/_entry
350 349
 		:asma-first-char-comment/_entry
351 350
 		:asma-first-char-macro/_entry
352
-		$2 ( invalid position )
353
-		$2 ( empty tree for include )
354 351
 
355 352
 	&body-routines
356 353
 		:asma-normal-body
357 354
 		:asma-ignore
358 355
 		:asma-macro-body
359
-		$2 ( invalid position )
360
-		:asma-include-filename
361 356
 
362 357
 @asma-parse-hex-digit ( charcode -- 00-0f if valid hex
363 358
                                  OR 10-ff otherwise )
... ...
@@ -410,14 +405,14 @@ include projects/library/file-read-chunks.tal
410 405
 %asma-RETURN-FLAG { #40 }
411 406
 %asma-KEEP-FLAG { #80 }
412 407
 
413
-include projects/library/string.tal
408
+~projects/library/string.tal
414 409
 
415 410
 @asma-traverse-tree ( incoming-ptr* -- binary-ptr* 00 if key found
416 411
                                     OR node-incoming-ptr* 01 if key not found )
417 412
 	;asma/token LDA2
418 413
 	( fall through to traverse-tree )
419 414
 
420
-include projects/library/binary-tree.tal
415
+~projects/library/binary-tree.tal
421 416
 
422 417
 @asma-parse-opcode ( -- byte 00 if valid opcode
423 418
                      OR 01 otherwise )
... ...
@@ -526,7 +521,7 @@ include projects/library/binary-tree.tal
526 521
 	POP2 POP2
527 522
 	JMP2r
528 523
 
529
-include projects/library/heap.tal
524
+~projects/library/heap.tal
530 525
 
531 526
 (
532 527
 	First character routines.
... ...
@@ -793,12 +788,6 @@ include projects/library/heap.tal
793 788
 
794 789
 	&not-macro
795 790
 	POP2
796
-	;&include-string ;asma/token LDA2
797
-		;strcmp JSR2 NIP2 NIP2 NIP ,&not-include JCN
798
-	#08 asma-STATE-SET
799
-	JMP2r
800
-
801
-	&not-include
802 791
 	;asma-msg-token ;asma/error STA2
803 792
 	JMP2r
804 793
 
... ...
@@ -806,10 +795,8 @@ include projects/library/heap.tal
806 795
 	;asma-msg-too-deep ;asma/error STA2
807 796
 	JMP2r
808 797
 
809
-	&include-string "include 00
810
-
811
-@asma-include-filename
812
-	#08 asma-STATE-CLEAR
798
+@asma-include
799
+	.System/rst DEI #e0 GTH ,asma-normal-body/too-deep JCN
813 800
 	;heap LDA2
814 801
 		;asma/token LDA2 ;append-heap-string JSR2
815 802
 		;asma-assemble-file-pass JSR2
... ...
@@ -864,7 +851,8 @@ include projects/library/heap.tal
864 851
 	&5d         :&40       :&7c         '] 00          :asma-ignore
865 852
 	&7b          $2         $2          '{ 00          :asma-ignore
866 853
 	&7c         :&7b       :&7d         '| 00          :asma-pad-absolute
867
-	&7d          $2         $2          '} 00          :asma-ignore
854
+	&7d          $2        :&7e         '} 00          :asma-ignore
855
+	&7e          $2         $2          '~ 00          :asma-include
868 856
 
869 857
 @asma-opcodes
870 858
 	&_entry     :&GTH      :&ROT &_disasm "LIT 00
... ...
@@ -40,7 +40,7 @@
40 40
 	#01 .System/halt DEO
41 41
 	BRK
42 42
 
43
-include projects/library/asma.tal
43
+~projects/library/asma.tal
44 44
 
45 45
 @asma-heap
46 46
 |e000 &end
... ...
@@ -401,11 +401,11 @@ RTN
401 401
 	2729 2b2e 3032 3537 3a3d 3f42 4547 4a4d
402 402
 	5053 5659 5c5f 6265 686b 6e71 7477 7a7d
403 403
 
404
-include projects/library/check-rom.tal
405
-include projects/library/load-rom.tal
404
+~projects/library/check-rom.tal
405
+~projects/library/load-rom.tal
406 406
 
407
-include projects/assets/mascot0cx0c.tal
408
-include projects/assets/msx01x02.tal
407
+~projects/assets/mascot0cx0c.tal
408
+~projects/assets/msx01x02.tal
409 409
 
410 410
 @dir
411 411
 	&path ". $1
... ...
@@ -142,7 +142,7 @@ sublabel(char *src, char *scope, char *name)
142 142
 #pragma mark - Parser
143 143
 
144 144
 static int
145
-error(char *name, char *msg)
145
+error(const char *name, const char *msg)
146 146
 {
147 147
 	fprintf(stderr, "%s: %s\n", name, msg);
148 148
 	return 0;
... ...
@@ -310,17 +310,14 @@ parsetoken(char *w)
310 310
 }
311 311
 
312 312
 static int
313
-doinclude(FILE *f, int (*pass)(FILE *))
313
+doinclude(const char *filename, int (*pass)(FILE *))
314 314
 {
315
-	char word[64];
316
-	FILE *finc;
315
+	FILE *f;
317 316
 	int ret;
318
-	if(fscanf(f, "%63s", word) != 1)
319
-		return error("End of input", "include");
320
-	if(!(finc = fopen(word, "r")))
321
-		return error("Include failed to open", word);
322
-	ret = pass(finc);
323
-	fclose(finc);
317
+	if(!(f = fopen(filename, "r")))
318
+		return error("Include failed to open", filename);
319
+	ret = pass(f);
320
+	fclose(f);
324 321
 	return ret;
325 322
 }
326 323
 
... ...
@@ -348,8 +345,8 @@ pass1(FILE *f)
348 345
 		} else if(w[0] == '&') {
349 346
 			if(!makelabel(sublabel(subw, scope, w + 1)))
350 347
 				return error("Pass 1 - Invalid sublabel", w);
351
-		} else if(scmp(w, "include", 8)) {
352
-			if(!doinclude(f, pass1))
348
+		} else if(w[0] == '~') {
349
+			if(!doinclude(w + 1, pass1))
353 350
 				return 0;
354 351
 		} else if(sihx(w))
355 352
 			addr += slen(w) / 2;
... ...
@@ -386,8 +383,8 @@ pass2(FILE *f)
386 383
 		} else if(w[0] == '@') {
387 384
 			scpy(w + 1, scope, 64);
388 385
 			continue;
389
-		} else if(scmp(w, "include", 8)) {
390
-			if(!doinclude(f, pass2))
386
+		} else if(w[0] == '~') {
387
+			if(!doinclude(w + 1, pass2))
391 388
 				return 0;
392 389
 			continue;
393 390
 		}