From: Guillermo J. Rozas Date: Fri, 21 Aug 1987 02:21:17 +0000 (+0000) Subject: Fix order of argument evaluation bug in make-instruction-parser. X-Git-Tag: 20090517-FFI~13128 X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=ae402153f78a738be19d1a8526199b2eb039042f;p=mit-scheme.git Fix order of argument evaluation bug in make-instruction-parser. --- diff --git a/v7/src/compiler/machines/vax/dsyn.scm b/v7/src/compiler/machines/vax/dsyn.scm index 3189d6e59..8c8f32563 100644 --- a/v7/src/compiler/machines/vax/dsyn.scm +++ b/v7/src/compiler/machines/vax/dsyn.scm @@ -1,6 +1,6 @@ #| -*-Scheme-*- -$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/vax/dsyn.scm,v 1.3 1987/08/20 19:13:58 jinx Exp $ +$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/compiler/machines/vax/dsyn.scm,v 1.4 1987/08/21 02:21:17 jinx Exp $ Copyright (c) 1987 Massachusetts Institute of Technology @@ -85,10 +85,21 @@ MIT in each case. |# (define (make-instruction-parser prefix operands) `(lambda () (append ',prefix - (list ,@(map process-operand operands))))) - -(define (process-operand operand) - (case (car operand) - ((OPERAND) `(decode-operand ',(cadr operand))) - ((DISPLACEMENT) `(decode-displacement ,(caadr operand))) - (else (error "process-operand: Unknown operand kind" operand)))) + (process-operands operands)))) + +;; A let* is used below to force the order of evaluation. + +(define (process-operands operands) + (if (null? operands) + ''() + `(let* ((this ,(let ((operand (car operands))) + (case (car operand) + ((OPERAND) + `(decode-operand ',(cadr operand))) + ((DISPLACEMENT) + `(decode-displacement ,(caadr operand))) + (else + (error "process-operand: Unknown operand kind" + operand))))) + (rest ,(process-operands (cdr operands)))) + (cons this rest)))) \ No newline at end of file