Browse Source

Fix off by one w/ interning (441 bytes)

Justine Tunney 3 years ago
parent
commit
040852302c
1 changed files with 9 additions and 8 deletions
  1. 9 8
      sectorlisp.S

+ 9 - 8
sectorlisp.S

@@ -123,6 +123,7 @@ Intern:	push	%cx				# Intern(cx,di): ax
 	je	8f
 	rep cmpsb				# memcmp(di,si,cx)
 	je	9f
+	dec	%di
 	xor	%ax,%ax
 2:	scasb					# memchr(di,al,cx)
 	jne	2b
@@ -175,6 +176,14 @@ Cons:	xchg	%di,%cx				# Cons(m:di,a:ax):ax
 1:	xchg	%di,%ax
 	ret
 
+GetList:call	GetToken
+	cmp	$')',%al
+	je	.retF
+	call	GetObject
+	push	%ax				# popped by xCons
+	call	GetList
+	jmp	xCons
+
 Gc:	cmp	%dx,%di				# Gc(x:di,A:dx,B:si):ax
 	jb	1b				# we assume immutable cells
 	push	(%bx,%di)			# mark prevents negative gc
@@ -189,14 +198,6 @@ Gc:	cmp	%dx,%di				# Gc(x:di,A:dx,B:si):ax
 	add	%dx,%ax
 	ret
 
-GetList:call	GetToken
-	cmp	$')',%al
-	je	.retF
-	call	GetObject
-	push	%ax				# popped by xCons
-	call	GetList
-	jmp	xCons
-
 .dflt1:	push	%si				# save x
 	call	Eval
 	pop	%si				# restore x