summaryrefslogtreecommitdiff
path: root/t/parse.lisp
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-04-10 03:53:43 -0400
committerbd <bdunahu@operationnull.com>2025-04-10 03:53:43 -0400
commitdf508744ec2975cec0ba05e8a4358c1c41265c4c (patch)
treece8ee03b9d25b739a2e687c69b14d9221420e4fa /t/parse.lisp
parent41baa17a9855bc970becf3dab02f7014753b45db (diff)
Add untested (but works on the single input file) code emission
Diffstat (limited to 't/parse.lisp')
-rw-r--r--t/parse.lisp139
1 files changed, 79 insertions, 60 deletions
diff --git a/t/parse.lisp b/t/parse.lisp
index 9562e1d..3c29dbc 100644
--- a/t/parse.lisp
+++ b/t/parse.lisp
@@ -10,104 +10,123 @@
(in-suite parse-tests)
(test esrap-register-bases
- (is (equal '(parse::p
- (parse::x
- (parse::r "ADD" (parse::rr 10) (parse::rr 10) (parse::rr 10))))
- (esrap:parse 'parse::str->ast (format nil ".TEXT~%~tADD $0O012 $0B1010 $0XA~%")))))
+ (is (equal '(emit::p
+ (emit::d)
+ (emit::x
+ (emit::r "ADD" (emit::rr 10) (emit::rr 10) (emit::rr 10))))
+ (esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT~%~tADD $0O012 $0B1010 $0XA~%")))))
(test esrap-instr-all-type-r
(is (equal
- '(parse::p
- (parse::x
- (parse::r "ADDV" (parse::rr 1) (parse::rr 2) (parse::rr 3))
- (parse::r "NOT" (parse::rr 4) (parse::rr 0) (parse::rr 5))
- (parse::r "CMP" (parse::rr 6) (parse::rr 7) (parse::rr 0))))
- (esrap:parse 'parse::str->ast (format nil ".TEXT~%~tADDV $3 $1 $2
+ '(emit::p
+ (emit::d)
+ (emit::x
+ (emit::r "ADDV" (emit::rr 1) (emit::rr 2) (emit::rr 3))
+ (emit::r "NOT" (emit::rr 4) (emit::rr 0) (emit::rr 5))
+ (emit::r "CMP" (emit::rr 6) (emit::rr 7) (emit::rr 0))))
+ (esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT~%~tADDV $3 $1 $2
~tNOT $5 $4~%~tCMP $6 $7~%")))))
(test esrap-instr-all-type-i
(is (equal
- '(parse::p
- (parse::x
- (parse::i "LOADV" (parse::rr 8) (parse::rr 9) (parse::imm 1))
- (parse::i "STORE" (parse::rr 3) (parse::rr 5) (parse::imm 3))
- (parse::i "ADDI" (parse::rr 5) (parse::rr 4) (parse::imm 2))))
- (esrap:parse 'parse::str->ast (format nil ".TEXT~%~tLOADV $8 1($9)
+ '(emit::p
+ (emit::d)
+ (emit::x
+ (emit::i "LOADV" (emit::rr 8) (emit::rr 9) (emit::imm 1))
+ (emit::i "STORE" (emit::rr 3) (emit::rr 5) (emit::imm 3))
+ (emit::i "ADDI" (emit::rr 5) (emit::rr 4) (emit::imm 2))))
+ (esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT~%~tLOADV $8 1($9)
~tSTORE $5 3($3)~%~tADDI $5 $4 2~%")))))
(test esrap-instr-type-all-type-j
(is (equal
- '(parse::p
- (parse::x
- (parse::j "JMP" (parse::rr 3) (parse::imm 3))
- (parse::j "JRL" (parse::rr 0) (parse::l "FOO"))
- (parse::j "PUSH" (parse::rr 5) (parse::imm 0))))
- (esrap:parse 'parse::str->ast (format nil ".TEXT~%~tJMP 3($3)
+ '(emit::p
+ (emit::d)
+ (emit::x
+ (emit::j "JMP" (emit::rr 3) (emit::imm 3))
+ (emit::j "JRL" (emit::rr 0) (emit::l "FOO" 8))
+ (emit::j "PUSH" (emit::rr 5) (emit::imm 0))))
+ (esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT~%~tJMP 3($3)
~tJRL FOO~%~tPUSH $5~%")))))
+(test esrap-instr-type-i-negative
+ (is (equal
+ '(emit::p
+ (emit::d)
+ (emit::x
+ (emit::i "LOADV" (emit::rr 8) (emit::rr 3) (emit::imm -3))))
+ (esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT~%~tLOADV $8 -3($3)~%")))))
+
(test esrap-instr-type-i-vars
(is (equal
- '(parse::p
- (parse::x
- (parse::i "LOADV" (parse::rr 8) (parse::rr 0) (parse::var "vector"))
- (parse::i "STORE" (parse::rr 0) (parse::rr 5) (parse::var "int"))))
- (esrap:parse 'parse::str->ast (format nil ".TEXT~%~tLOADV $8 vector
+ '(emit::p
+ (emit::d)
+ (emit::x
+ (emit::i "LOADV" (emit::rr 8) (emit::rr 0) (emit::var "vector"))
+ (emit::i "STORE" (emit::rr 0) (emit::rr 5) (emit::var "int"))))
+ (esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT~%~tLOADV $8 vector
~tSTORE $5 int~%")))))
(test esrap-instr-type-all-lazy-spaces
(is (equal
- '(parse::p
- (parse::x
- (parse::j "JMP" (parse::rr 3) (parse::imm 3))
- (parse::j "JRL" (parse::rr 0) (parse::l "FOO"))
- (parse::j "PUSH" (parse::rr 5) (parse::imm 0))))
- (esrap:parse 'parse::str->ast (format nil "~t~%.TEXT~t~%JMP 3($3)~t
+ '(emit::p
+ (emit::d)
+ (emit::x
+ (emit::j "JMP" (emit::rr 3) (emit::imm 3))
+ (emit::j "JRL" (emit::rr 0) (emit::l "FOO" 14))
+ (emit::j "PUSH" (emit::rr 5) (emit::imm 0))))
+ (esrap:parse 'parse:str->ast (format nil ".DATA~%~%.TEXT~t~%JMP 3($3)~t
JRL FOO~t~%PUSH $5~%")))))
(test esrap-data-singleton
(is (equal
- '(parse::p
- (parse::d
- 1))
- (esrap:parse 'parse:str->ast (format nil ".DATA~%~tA 1~%")))))
+ '(emit::p
+ (emit::d
+ 1)
+ (emit::x))
+ (esrap:parse 'parse:str->ast (format nil ".DATA~%~tA 1~%.TEXT~%")))))
(test esrap-data-loaded
(is (equal
- '(parse::p
- (parse::d
- 1 2 3 4 5 6 7 8))
- (esrap:parse 'parse:str->ast (format nil ".DATA~%~tB 1 2 3 4 5 6 7 8~%")))))
+ '(emit::p
+ (emit::d
+ 1 2 3 4 5 6 7 8)
+ (emit::x))
+ (esrap:parse 'parse:str->ast (format nil ".DATA~%~tB 1 2 3 4 5 6 7 8
+.TEXT~%")))))
(test esrap-data-triple
(is (equal
- '(parse::p
- (parse::d
- 5 6 7 8 4 3 5))
+ '(emit::p
+ (emit::d
+ 5 6 7 8 4 3 5)
+ (emit::x))
(esrap:parse 'parse:str->ast (format nil ".DATA~%~tC 5 6 7 8~%~tD 4
-~tE 3 5~%")))))
+~tE 3 5~%.TEXT~%")))))
(test esrap-data-lazy-spaces
(is (equal
- '(parse::p
- (parse::d
- 5 6 7 8 4 3 5))
+ '(emit::p
+ (emit::d
+ 5 6 7 8 4 3 5)
+ (emit::x))
(esrap:parse 'parse:str->ast (format nil "~%~t.DATA~t~%F 5 6 7 8~t~%G 4
-H 3 5~%")))))
+H 3 5~%.TEXT~%")))))
(test esrap-data-full
(is (equal
- '(parse::p
- (parse::d
+ '(emit::p
+ (emit::d
1 2 3 4 3 0)
- (parse::x
- (parse::i "LOAD" (parse::rr 5) (parse::rr 0) (parse::var "S"))
- (parse::i "LOAD" (parse::rr 10) (parse::rr 0) (parse::var "ARR"))
- (parse::i "LOAD" (parse::rr 6) (parse::rr 0) (parse::var "I"))
- (parse::j "JRL" (parse::rr 0) (parse::l "CMP"))
- (parse::r "ADD" (parse::rr 10) (parse::rr 6) (parse::rr 9))
- (parse::i "ADDI" (parse::rr 6) (parse::rr 6) (parse::imm 1))
- (parse::r "CMP" (parse::rr 6) (parse::rr 5) (parse::rr 0))
- (parse::j "BGT" (parse::rr 0) (parse::l "L"))))
+ (emit::x
+ (emit::i "LOAD" (emit::rr 5) (emit::rr 0) (emit::var "S"))
+ (emit::i "LOAD" (emit::rr 10) (emit::rr 0) (emit::var "ARR"))
+ (emit::i "LOAD" (emit::rr 6) (emit::rr 0) (emit::var "I"))
+ (emit::j "JRL" (emit::rr 0) (emit::l "CMP" 19))
+ (emit::r "ADD" (emit::rr 10) (emit::rr 6) (emit::rr 9))
+ (emit::i "ADDI" (emit::rr 6) (emit::rr 6) (emit::imm 1))
+ (emit::r "CMP" (emit::rr 6) (emit::rr 5) (emit::rr 0))
+ (emit::j "BGT" (emit::rr 0) (emit::l "L" 23))))
(esrap:parse 'parse:str->ast (format nil "
.DATA
ARR 1 2 3 4