Changeset 11862


Ignore:
Timestamp:
05/14/09 20:00:24 (14 years ago)
Author:
ehuelsmann
Message:

Fix stack ordering problems introduced when creating closure bindings.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/closure-fixes/abcl/src/org/armedbear/lisp/compiler-pass2.lisp

    r11861 r11862  
    39203920         (emit-invokevirtual +lisp-thread-class+ "bindSpecial"
    39213921                             (list +lisp-symbol+ +lisp-object+) nil))
    3922         ((variable-closure-index variable)
    3923          (emit 'new "org/armedbear/lisp/ClosureBinding")
    3924          (emit 'dup)
     3922        ((variable-closure-index variable)              ;; stack:
     3923         (emit 'new "org/armedbear/lisp/ClosureBinding") ;; value c-b
     3924         (emit 'dup_x1)                                  ;; c-b value c-b
     3925         (emit 'swap)                                    ;; c-b c-b value
    39253926         (emit-invokespecial-init "org/armedbear/lisp/ClosureBinding"
    3926                                  (list +lisp-object+))
     3927                                 (list +lisp-object+))   ;; c-b
    39273928         (aload (compiland-closure-register *current-compiland*))
    3928          (emit 'swap) ; array value
     3929                                                         ;; c-b array
     3930         (emit 'swap)                                    ;; array c-b
    39293931         (emit-push-constant-int (variable-closure-index variable))
     3932                                                         ;; array c-b int
    39303933         (emit 'swap) ; array index value
    39313934         (emit 'aastore))
     
    81238126               (emit 'dup) ; array
    81248127               (emit-push-constant-int (variable-closure-index variable))
    8125                (aload (variable-register variable))
    81268128               (emit 'new "org/armedbear/lisp/ClosureBinding")
    81278129               (emit 'dup)
     8130               (aload (variable-register variable))
    81288131               (emit-invokespecial-init "org/armedbear/lisp/ClosureBinding"
    8129                                        (list "Lorg/armedbear/lisp/LisObject;"))
     8132                                       (list +lisp-object+))
    81308133               (emit 'aastore)
    81318134               (setf (variable-register variable) nil))
     
    81338136               (emit 'dup) ; array
    81348137               (emit-push-constant-int (variable-closure-index variable))
     8138               (emit 'new "org/armedbear/lisp/ClosureBinding")
     8139               (emit 'dup)
    81358140               (aload (compiland-argument-register compiland))
    81368141               (emit-push-constant-int (variable-index variable))
    81378142               (emit 'aaload)
    8138                (emit 'new "org/armedbear/lisp/ClosureBinding")
    8139                (emit 'dup)
    81408143               (emit-invokespecial-init "org/armedbear/lisp/ClosureBinding"
    8141                                        (list "Lorg/armedbear/lisp/LisObject;"))
     8144                                       (list +lisp-object+))
    81428145               (emit 'aastore)
    81438146               (setf (variable-index variable) nil))))
Note: See TracChangeset for help on using the changeset viewer.