Ignore:
Timestamp:
11/12/03 00:54:57 (18 years ago)
Author:
piso
Message:

Work in progress.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/j/src/org/armedbear/lisp/jvm.lisp

    r4704 r4705  
    22;;;
    33;;; Copyright (C) 2003 Peter Graves
    4 ;;; $Id: jvm.lisp,v 1.25 2003-11-11 20:29:41 piso Exp $
     4;;; $Id: jvm.lisp,v 1.26 2003-11-12 00:54:57 piso Exp $
    55;;;
    66;;; This program is free software; you can redistribute it and/or
     
    15951595  ;; Generate code to evaluate the initforms and leave the resulting values
    15961596  ;; on the stack.
    1597   (dolist (varspec varlist)
    1598     (let (var initform)
    1599       (cond ((consp varspec)
    1600              (setq var (car varspec)
    1601                    initform (cadr varspec)))
    1602             (t
    1603              (setq var varspec
    1604                    initform nil)))
    1605       (cond (initform
    1606              (compile-form initform)
    1607              (emit-push-value))
    1608             (t
    1609              (emit-push-nil)))))
     1597  (let ((last-push-was-nil nil))
     1598    (dolist (varspec varlist)
     1599      (let (var initform)
     1600        (if (consp varspec)
     1601            (setq var (car varspec)
     1602                  initform (cadr varspec))
     1603            (setq var varspec
     1604                  initform nil))
     1605        (cond (initform
     1606               (compile-form initform)
     1607               (emit-push-value)
     1608               (setf last-push-was-nil nil))
     1609              (t
     1610               (if last-push-was-nil
     1611                   (emit 'dup)
     1612                   (emit-push-nil))
     1613               (setf last-push-was-nil t))))))
    16101614  ;; Add local variables to local variables vector.
    16111615  (dolist (varspec varlist)
     
    16421646    (dolist (varspec varlist)
    16431647      (let (var initform)
    1644         (cond ((consp varspec)
    1645                (setq var (car varspec)
    1646                      initform (cadr varspec)))
    1647               (t
    1648                (setq var varspec
    1649                      initform nil)))
     1648        (if (consp varspec)
     1649            (setq var (car varspec)
     1650                  initform (cadr varspec))
     1651            (setq var varspec
     1652                  initform nil))
    16501653        (cond (initform
    16511654               (compile-form initform)
     
    17321735    (when index
    17331736      (compile-form (cadr rest))
    1734       (if for-effect
    1735           (unless (remove-store-value)
    1736             (emit-push-value))
    1737           (emit-push-value))
    1738       (emit 'astore index)
     1737      (unless (remove-store-value)
     1738        (emit-push-value))
     1739      (cond (for-effect
     1740             (emit 'astore index))
     1741            (t
     1742             (emit 'dup)
     1743             (emit 'astore index)
     1744             (emit-store-value)))
    17391745      (return-from compile-setq))
    17401746    ;; index is NIL, look in *args* ...
Note: See TracChangeset for help on using the changeset viewer.