Changeset 12840
- Timestamp:
- 07/31/10 21:33:24 (13 years ago)
- Location:
- branches/generic-class-file/abcl/src/org/armedbear/lisp
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/generic-class-file/abcl/src/org/armedbear/lisp/compiler-pass2.lisp
r12839 r12840 464 464 (stack-effect (cdr info)) 465 465 (class-name (!class-name class-name)) 466 (index (pool-method class-name method-name descriptor)) 466 (index (if (null *current-code-attribute*) 467 (pool-method class-name method-name descriptor) 468 (pool-add-method-ref *pool* class-name 469 method-name descriptor))) 467 470 (instruction (apply #'%emit 'invokestatic (u2 index)))) 468 471 (setf (instruction-stack instruction) stack-effect))) … … 487 490 (stack-effect (cdr info)) 488 491 (class-name (!class-name class-name)) 489 (index (pool-method class-name method-name descriptor)) 492 (index (if (null *current-code-attribute*) 493 (pool-method class-name method-name descriptor) 494 (pool-add-method-ref *pool* class-name 495 method-name descriptor))) 490 496 (instruction (apply #'%emit 'invokevirtual (u2 index)))) 491 497 (declare (type (signed-byte 8) stack-effect)) … … 506 512 (stack-effect (cdr info)) 507 513 (class-name (!class-name class-name)) 508 (index (pool-method class-name "<init>" descriptor)) 514 (index (if (null *current-code-attribute*) 515 (pool-method class-name "<init>" descriptor) 516 (pool-add-method-ref *pool* class-name 517 "<init>" descriptor))) 509 518 (instruction (apply #'%emit 'invokespecial (u2 index)))) 510 519 (declare (type (signed-byte 8) stack-effect)) … … 545 554 (defknown emit-getstatic (t t t) t) 546 555 (defun emit-getstatic (class-name field-name type) 547 (let ((index (pool-field (!class-name class-name) 548 field-name (!class-ref type)))) 556 (let ((index (if (null *current-code-attribute*) 557 (pool-field (!class-name class-name) 558 field-name (!class-ref type)) 559 (pool-add-field-ref *pool* class-name field-name type)))) 549 560 (apply #'%emit 'getstatic (u2 index)))) 550 561 551 562 (defknown emit-putstatic (t t t) t) 552 563 (defun emit-putstatic (class-name field-name type) 553 (let ((index (pool-field (!class-name class-name) 554 field-name (!class-ref type)))) 564 (let ((index (if (null *current-code-attribute*) 565 (pool-field (!class-name class-name) 566 field-name (!class-ref type)) 567 (pool-add-field-ref *pool* class-name field-name type)))) 555 568 (apply #'%emit 'putstatic (u2 index)))) 556 569 -
branches/generic-class-file/abcl/src/org/armedbear/lisp/jvm-class-file.lisp
r12832 r12840 876 876 877 877 878 (defvar *current-code-attribute* )878 (defvar *current-code-attribute* nil) 879 879 880 880 (defun save-code-specials (code) … … 890 890 *register* (code-current-local code))) 891 891 892 (defmacro with-code-to-method (( method &key safe-nesting) &body body)892 (defmacro with-code-to-method ((class-file method &key safe-nesting) &body body) 893 893 (let ((m (gensym)) 894 894 (c (gensym))) … … 899 899 (let* ((,m ,method) 900 900 (,c (method-ensure-code method)) 901 (*pool* (class-file-constants ,class-file)) 901 902 (*code* (code-code ,c)) 902 903 (*registers-allocated* (code-max-locals ,c))
Note: See TracChangeset
for help on using the changeset viewer.