diff --git a/plugins/primus_lisp/lisp/ascii.lisp b/plugins/primus_lisp/lisp/ascii.lisp index 060a48c25..35941696f 100644 --- a/plugins/primus_lisp/lisp/ascii.lisp +++ b/plugins/primus_lisp/lisp/ascii.lisp @@ -10,8 +10,11 @@ (= s 32))) (defun ascii-sign (s) - "(ascii-sign S) is 1 if S is + and -1 otherwise" - (if (= s ?+) 1 -1)) + "(ascii-sign S) is 1 if S is +, -1 if it -, or 0 otherwise" + (case s + ?- -1 + ?+ 1 + 0)) (defun ascii-is-digit (s) "(ascii-is-digit s) is true if S is an ascii representation of decimal digit" diff --git a/plugins/primus_lisp/lisp/atoi.lisp b/plugins/primus_lisp/lisp/atoi.lisp index 9e6513f96..ec1044bea 100644 --- a/plugins/primus_lisp/lisp/atoi.lisp +++ b/plugins/primus_lisp/lisp/atoi.lisp @@ -14,6 +14,9 @@ (skip-all atoi-prefix s) (let ((v 0) (sign (ascii-sign (memory-read s)))) + (if (= sign 0) + (set sign 1) + (incr s)) (while (ascii-is-digit (memory-read s)) (set v (+ (* v 10) (atoi-read-digit s))) (incr s))