Changeset 11868
- Timestamp:
- 05/15/09 10:20:09 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp
r11866 r11868 200 200 201 201 (defconstant +java-string+ "Ljava/lang/String;") 202 (defconstant +java-object+ "Ljava/lang/Object;") 202 203 (defconstant +lisp-class+ "org/armedbear/lisp/Lisp") 203 204 (defconstant +lisp-nil-class+ "org/armedbear/lisp/Nil") … … 207 208 (defconstant +lisp-object-array+ "[Lorg/armedbear/lisp/LispObject;") 208 209 (defconstant +closure-binding-array+ "[Lorg/armedbear/lisp/ClosureBinding;") 209 (defconstant +closure-binding+ "Lorg/armedbear/lisp/ClosureBinding;")210 210 (defconstant +closure-binding-class+ "org/armedbear/lisp/ClosureBinding") 211 211 (defconstant +lisp-symbol-class+ "org/armedbear/lisp/Symbol") … … 2999 2999 (emit-push-constant-int 0) ;; srcPos 3000 3000 (emit-push-constant-int (length *closure-variables*)) 3001 (emit 'anewarray "org/armedbear/lisp/ClosureBinding");; dest3001 (emit 'anewarray +closure-binding-class+) ;; dest 3002 3002 (emit 'dup) 3003 3003 (astore register) ;; save dest value … … 3005 3005 (emit-push-constant-int (length *closure-variables*)) ;; length 3006 3006 (emit-invokestatic "java/lang/System" "arraycopy" 3007 (list "Ljava/lang/Object;""I"3008 "Ljava/lang/Object;""I" "I") nil)3007 (list +java-object+ "I" 3008 +java-object+ "I" "I") nil) 3009 3009 (aload register))) ;; reload dest value 3010 3010 … … 3898 3898 (list +lisp-symbol+ +lisp-object+) nil)) 3899 3899 ((variable-closure-index variable) ;; stack: 3900 (emit 'new "org/armedbear/lisp/ClosureBinding");; value c-b3901 (emit 'dup_x1) 3902 (emit 'swap) 3903 (emit-invokespecial-init "org/armedbear/lisp/ClosureBinding"3904 (list +lisp-object+));; c-b3900 (emit 'new +closure-binding-class+) ;; value c-b 3901 (emit 'dup_x1) ;; c-b value c-b 3902 (emit 'swap) ;; c-b c-b value 3903 (emit-invokespecial-init +closure-binding-class+ 3904 (list +lisp-object+)) ;; c-b 3905 3905 (aload (compiland-closure-register *current-compiland*)) 3906 3906 ;; c-b array … … 4184 4184 (emit 'aaload) 4185 4185 (emit-swap representation nil) 4186 (emit 'putfield "org/armedbear/lisp/ClosureBinding" "value" 4187 "Lorg/armedbear/lisp/LispObject;")) 4186 (emit 'putfield +closure-binding-class+ "value" +lisp-object+)) 4188 4187 (t 4189 4188 ;;###FIXME: We might want to address the "temp-register" case too. … … 4216 4215 (emit-push-constant-int (variable-closure-index variable)) 4217 4216 (emit 'aaload) 4218 (emit 'getfield "org/armedbear/lisp/ClosureBinding" "value" 4219 "Lorg/armedbear/lisp/LispObject;")) 4217 (emit 'getfield +closure-binding-class+ "value" +lisp-object+)) 4220 4218 (t ;;###FIXME: We might want to address the "temp-register" case too. 4221 4219 (assert nil))))) … … 8090 8088 ;; if we're the ultimate parent: create the closure array 8091 8089 (emit-push-constant-int (length *closure-variables*)) 8092 (emit 'anewarray "org/armedbear/lisp/ClosureBinding"))8090 (emit 'anewarray +closure-binding-class+)) 8093 8091 (local-closure-vars 8094 8092 (duplicate-closure-array compiland)))) … … 8111 8109 (emit 'dup) ; array 8112 8110 (emit-push-constant-int i) 8113 (emit 'new "org/armedbear/lisp/ClosureBinding")8111 (emit 'new +closure-binding-class+) 8114 8112 (emit 'dup) 8115 8113 (cond … … 8129 8127 (t 8130 8128 (assert (not "Can't happen!!")))) 8131 (emit-invokespecial-init "org/armedbear/lisp/ClosureBinding"8129 (emit-invokespecial-init +closure-binding-class+ 8132 8130 (list +lisp-object+)) 8133 8131 (emit 'aastore)))))
Note: See TracChangeset
for help on using the changeset viewer.