Changeset 12884
- Timestamp:
- 08/09/10 14:10:50 (13 years ago)
- Location:
- branches/generic-class-file/abcl/src/org/armedbear/lisp
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/generic-class-file/abcl/src/org/armedbear/lisp/compiler-pass2.lisp
r12883 r12884 866 866 (write-8-bits (aref octets i) stream))) 867 867 (write-ascii string length stream)))) 868 869 (defknown write-constant-pool-entry (t t) t)870 (defun write-constant-pool-entry (entry stream)871 (declare (optimize speed))872 (declare (type stream stream))873 (let ((tag (first entry)))874 (declare (type (integer 1 12) tag))875 (write-u1 tag stream)876 (case tag877 (1 ; UTF8878 (write-utf8 (third entry) stream))879 ((3 4) ; int880 (write-u4 (second entry) stream))881 ((5 6) ; long double882 (write-u4 (second entry) stream)883 (write-u4 (third entry) stream))884 ((9 10 11 12) ; fieldref methodref InterfaceMethodref nameAndType885 (write-u2 (second entry) stream)886 (write-u2 (third entry) stream))887 ((7 8) ; class string888 (write-u2 (second entry) stream))889 (t890 (error "write-constant-pool-entry unhandled tag ~D~%" tag)))))891 892 (defun write-constant-pool (stream)893 (declare (optimize speed))894 (write-u2 *pool-count* stream)895 (dolist (entry (reverse *pool*))896 (write-constant-pool-entry entry stream)))897 898 (defstruct (field (:constructor make-field (name descriptor)))899 access-flags900 name901 descriptor902 name-index903 descriptor-index)904 868 905 869 (defstruct (java-method (:include method) … … 1131 1095 (write-code-attr method stream)) 1132 1096 1133 (defun write-field (field stream)1134 (declare (optimize speed))1135 (write-u2 (or (field-access-flags field) #x1) stream) ; access flags1136 (write-u2 (field-name-index field) stream)1137 (write-u2 (field-descriptor-index field) stream)1138 (write-u2 0 stream)) ; attributes count1139 1140 (defconst +field-flag-final+ #x10) ;; final field1141 (defconst +field-flag-static+ #x08) ;; static field1142 (defconst +field-access-protected+ #x04) ;; subclass accessible1143 (defconst +field-access-private+ #x02) ;; class-only accessible1144 (defconst +field-access-public+ #x01) ;; generally accessible1145 (defconst +field-access-default+ #x00) ;; package accessible, used for LABELS1146 1097 1147 1098 (defknown declare-field (t t t) t) 1148 1099 (defun declare-field (name descriptor) 1149 (let ((field ( !make-field name descriptor1150 1100 (let ((field (make-field name descriptor 1101 :flags '(:final :static :private)))) 1151 1102 (class-add-field *class-file* field))) 1152 1103 … … 7075 7026 ;; fields 7076 7027 (dolist (field (class-file-fields class-file)) 7077 ( !write-field field stream))7028 (write-field field stream)) 7078 7029 ;; methods count 7079 7030 (write-u2 (1+ (length (abcl-class-file-methods class-file))) stream) -
branches/generic-class-file/abcl/src/org/armedbear/lisp/jvm-class-file.lisp
r12880 r12884 604 604 (write-u2 (length (class-file-fields class)) stream) 605 605 (dolist (field (class-file-fields class)) 606 ( !write-field field stream))606 (write-field field stream)) 607 607 608 608 ;; methods … … 714 714 attributes) 715 715 716 (defun !make-field (name type &key (flags '(:public)))716 (defun make-field (name type &key (flags '(:public))) 717 717 "Creates a field for addition to a class file." 718 718 (%make-field :access-flags flags … … 742 742 (finalize-attributes (field-attributes field) nil class)) 743 743 744 (defun !write-field (field stream)744 (defun write-field (field stream) 745 745 "Writes classfile representation of `field' to `stream'." 746 746 (write-u2 (field-access-flags field) stream) -
branches/generic-class-file/abcl/src/org/armedbear/lisp/jvm.lisp
r12882 r12884 113 113 114 114 (defvar *pool* nil) 115 (defvar *pool-count* 1)116 (defvar *pool-entries* nil)117 (defvar *fields* ())118 115 (defvar *static-code* ()) 119 116 (defvar *class-file* nil) … … 175 172 (*class-file* ,var) 176 173 (*pool* (abcl-class-file-constants ,var)) 177 (*fields* (abcl-class-file-fields ,var))178 174 (*static-code* (abcl-class-file-static-code ,var)) 179 175 (*externalized-objects* (abcl-class-file-objects ,var)) 180 176 (*declared-functions* (abcl-class-file-functions ,var))) 181 177 (progn ,@body) 182 (setf (abcl-class-file-fields ,var) *fields* 183 (abcl-class-file-static-code ,var) *static-code* 178 (setf (abcl-class-file-static-code ,var) *static-code* 184 179 (abcl-class-file-objects ,var) *externalized-objects* 185 180 (abcl-class-file-functions ,var) *declared-functions*))))
Note: See TracChangeset
for help on using the changeset viewer.