From: Chris Hanson Date: Tue, 26 May 1987 13:24:56 +0000 (+0000) Subject: Add error check for positive arguments to signed integer coercion. X-Git-Tag: 20090517-FFI~13482 X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=64a1c2879d035e4d6a6ca202c41650d96e56b3a9;p=mit-scheme.git Add error check for positive arguments to signed integer coercion. --- diff --git a/v7/src/compiler/back/syntax.scm b/v7/src/compiler/back/syntax.scm index b848e7cc0..d5c1d4da0 100644 --- a/v7/src/compiler/back/syntax.scm +++ b/v7/src/compiler/back/syntax.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/back/syntax.scm,v 1.13 1987/03/19 00:50:43 cph Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/back/syntax.scm,v 1.14 1987/05/26 13:24:04 cph Exp $ Copyright (c) 1987 Massachusetts Institute of Technology @@ -186,12 +186,14 @@ MIT in each case. |# (unsigned-integer->bit-string nbits n)) (define (coerce-signed-integer nbits) - (let ((offset (expt 2 nbits))) + (let* ((limit (expt 2 (-1+ nbits))) + (offset (+ limit limit))) (lambda (n) - (unsigned-integer->bit-string nbits - (if (negative? n) - (+ n offset) - n))))) + (unsigned-integer->bit-string + nbits + (cond ((negative? n) (+ n offset)) + ((< n limit) n) + (else (error "Integer too large to be encoded" n))))))) (define (standard-coercion kernel) (lambda (nbits) diff --git a/v7/src/runtime/bitstr.scm b/v7/src/runtime/bitstr.scm index 42d49cec2..681e43c96 100644 --- a/v7/src/runtime/bitstr.scm +++ b/v7/src/runtime/bitstr.scm @@ -1,6 +1,6 @@ ;;; -*-Scheme-*- ;;; -;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/bitstr.scm,v 13.42 1987/04/25 20:18:51 cph Exp $ +;;; $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/runtime/bitstr.scm,v 13.43 1987/05/26 13:24:56 cph Rel $ ;;; ;;; Copyright (c) 1987 Massachusetts Institute of Technology ;;; @@ -73,10 +73,11 @@ result)) (define (signed-integer->bit-string nbits number) - (unsigned-integer->bit-string nbits - (if (negative? number) - (+ number (expt 2 nbits)) - number))) + (unsigned-integer->bit-string + nbits + (cond ((negative? number) (+ number (expt 2 nbits))) + ((< number (expt 2 (-1+ nbits))) number) + (else (error "Integer too large to be encoded" number))))) (define (bit-string->signed-integer bit-string) (let ((unsigned-result (bit-string->unsigned-integer bit-string))