Put Print in Apply

This commit is contained in:
Hikaru Ikuta 2022-01-06 12:44:40 +09:00
parent 1ff4ea987d
commit 36678457f3

View file

@ -56,7 +56,9 @@ main: mov %sp,%cx
call NewLine call NewLine
mov %dx,%fs # Clear input lookahead cache mov %dx,%fs # Clear input lookahead cache
call Read call Read
call EvalPrint call Eval
xchg %si,%ax
call PrintObject
jmp main jmp main
GetToken: # GetToken():al, dl is g_look GetToken: # GetToken():al, dl is g_look
@ -104,21 +106,18 @@ PrintObject: # PrintObject(x:si)
jnz .PrintString # -> ret jnz .PrintString # -> ret
ret ret
Print: mov (%si),%si # si = Cdr(e) Print: test %si,%si
test %si,%si jz NewLine
jnz 1f mov (%si),%si # ax = Car(Cdr(e))
NewLine:mov $'\r',%al
jmp PutChar
1: mov (%si),%ax # ax = Car(Cdr(e))
EvalPrint:
call Eval
push %dx push %dx
xchg %ax,%si
call PrintObject call PrintObject
xchg %dx,%ax xchg %dx,%ax
pop %dx pop %dx
ret ret
NewLine:mov $'\r',%al
jmp PutChar
Read: push %dx Read: push %dx
mov %fs,%dx # Get cached character mov %fs,%dx # Get cached character
call GetToken call GetToken
@ -233,6 +232,8 @@ Pairlis:test %di,%di # Pairlis(x:di,y:si,a:dx):dx
ja .resolv # ah is zero if not above ja .resolv # ah is zero if not above
mov (%si),%di # di = Car(x) mov (%si),%di # di = Car(x)
je .ifAtom je .ifAtom
cmp $kPrint,%al
je Print
cmp $kCons,%al cmp $kCons,%al
jae .ifCons jae .ifCons
.ifCar: cmp $kCar,%al .ifCar: cmp $kCar,%al
@ -282,8 +283,6 @@ Eval: test %ax,%ax # Eval(e:ax,a:dx):ax
lodsw # ax = Car(e) lodsw # ax = Car(e)
cmp $kRead,%ax cmp $kRead,%ax
je Read je Read
cmp $kPrint,%ax
je Print
cmp $kQuote,%ax # maybe CONS cmp $kQuote,%ax # maybe CONS
mov (%si),%di # di = Cdr(e) mov (%si),%di # di = Cdr(e)
je Car je Car