J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame^] | 1 | /* |
| 2 | * Copyright 2002-2005 Sun Microsystems, Inc. All Rights Reserved. |
| 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| 4 | * |
| 5 | * This code is free software; you can redistribute it and/or modify it |
| 6 | * under the terms of the GNU General Public License version 2 only, as |
| 7 | * published by the Free Software Foundation. Sun designates this |
| 8 | * particular file as subject to the "Classpath" exception as provided |
| 9 | * by Sun in the LICENSE file that accompanied this code. |
| 10 | * |
| 11 | * This code is distributed in the hope that it will be useful, but WITHOUT |
| 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| 14 | * version 2 for more details (a copy is included in the LICENSE file that |
| 15 | * accompanied this code). |
| 16 | * |
| 17 | * You should have received a copy of the GNU General Public License version |
| 18 | * 2 along with this work; if not, write to the Free Software Foundation, |
| 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| 20 | * |
| 21 | * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
| 22 | * CA 95054 USA or visit www.sun.com if you need additional information or |
| 23 | * have any questions. |
| 24 | */ |
| 25 | |
| 26 | // -*- C++ -*- |
| 27 | struct entry; |
| 28 | struct cpindex; |
| 29 | struct unpacker; |
| 30 | |
| 31 | struct band { |
| 32 | #ifndef PRODUCT |
| 33 | const char* name; |
| 34 | #endif |
| 35 | int bn; // band_number of this band |
| 36 | coding* defc; // default coding method |
| 37 | cpindex* ix; // CP entry mapping, if CPRefBand |
| 38 | byte ixTag; // 0 or 1; null is coded as (nullOK?0:-1) |
| 39 | byte nullOK; // 0 or 1; null is coded as (nullOK?0:-1) |
| 40 | int length; // expected # values |
| 41 | unpacker* u; // back pointer |
| 42 | |
| 43 | value_stream vs[2]; // source of values |
| 44 | coding_method cm; // method used for initial state of vs[0] |
| 45 | byte* rplimit; // end of band (encoded, transmitted) |
| 46 | |
| 47 | int total_memo; // cached value of getIntTotal, or -1 |
| 48 | int* hist0; // approximate. histogram |
| 49 | enum { HIST0_MIN = 0, HIST0_MAX = 255 }; // catches the usual cases |
| 50 | |
| 51 | // properties for attribute layout elements: |
| 52 | byte le_kind; // EK_XXX |
| 53 | byte le_bci; // 0,EK_BCI,EK_BCD,EK_BCO |
| 54 | byte le_back; // ==EF_BACK |
| 55 | byte le_len; // 0,1,2,4 (size in classfile), or call addr |
| 56 | band** le_body; // body of repl, union, call (null-terminated) |
| 57 | // Note: EK_CASE elements use hist0 to record union tags. |
| 58 | #define le_casetags hist0 |
| 59 | |
| 60 | band& nextBand() { return this[1]; } |
| 61 | band& prevBand() { return this[-1]; } |
| 62 | |
| 63 | void init(unpacker* u_, int bn_, coding* defc_) { |
| 64 | u = u_; |
| 65 | cm.u = u_; |
| 66 | bn = bn_; |
| 67 | defc = defc_; |
| 68 | } |
| 69 | void init(unpacker* u_, int bn_, int defcSpec) { |
| 70 | init(u_, bn_, coding::findBySpec(defcSpec)); |
| 71 | } |
| 72 | void initRef(int ixTag_ = 0, bool nullOK_ = false) { |
| 73 | ixTag = ixTag_; |
| 74 | nullOK = nullOK_; |
| 75 | setIndexByTag(ixTag); |
| 76 | } |
| 77 | |
| 78 | void expectMoreLength(int l) { |
| 79 | assert(length >= 0); // able to accept a length |
| 80 | assert((int)l >= 0); // no overflow |
| 81 | assert(rplimit == null); // readData not yet called |
| 82 | length += l; |
| 83 | assert(length >= l); // no overflow |
| 84 | } |
| 85 | |
| 86 | void setIndex(cpindex* ix_); |
| 87 | void setIndexByTag(byte tag); |
| 88 | |
| 89 | // Parse the band and its meta-coding header. |
| 90 | void readData(int expectedLength = 0); |
| 91 | |
| 92 | // Reset the band for another pass (Cf. Java Band.resetForSecondPass.) |
| 93 | void rewind() { |
| 94 | cm.reset(&vs[0]); |
| 95 | } |
| 96 | |
| 97 | byte* &curRP() { return vs[0].rp; } |
| 98 | byte* minRP() { return cm.vs0.rp; } |
| 99 | byte* maxRP() { return rplimit; } |
| 100 | size_t size() { return maxRP() - minRP(); } |
| 101 | |
| 102 | int getByte() { assert(ix == null); return vs[0].getByte(); } |
| 103 | int getInt() { assert(ix == null); return vs[0].getInt(); } |
| 104 | entry* getRefN() { assert(ix != null); return getRefCommon(ix, true); } |
| 105 | entry* getRef() { assert(ix != null); return getRefCommon(ix, false); } |
| 106 | entry* getRefUsing(cpindex* ix2) |
| 107 | { assert(ix == null); return getRefCommon(ix2, true); } |
| 108 | entry* getRefCommon(cpindex* ix, bool nullOK); |
| 109 | jlong getLong(band& lo_band, bool have_hi); |
| 110 | |
| 111 | static jlong makeLong(uint hi, uint lo) { |
| 112 | return ((julong)hi << 32) + (((julong)lo << 32) >> 32); |
| 113 | } |
| 114 | |
| 115 | int getIntTotal(); |
| 116 | int getIntCount(int tag); |
| 117 | |
| 118 | static band* makeBands(unpacker* u); |
| 119 | static void initIndexes(unpacker* u); |
| 120 | |
| 121 | #ifndef PRODUCT |
| 122 | void dump(); |
| 123 | #endif |
| 124 | |
| 125 | void abort(const char* msg = null); //{ u->abort(msg); } |
| 126 | bool aborting(); //{ return u->aborting(); } |
| 127 | }; |
| 128 | |
| 129 | extern band all_bands[]; |
| 130 | |
| 131 | #define BAND_LOCAL /* \ |
| 132 | band* band_temp = all_bands; \ |
| 133 | band* all_bands = band_temp */ |
| 134 | |
| 135 | // Band schema: |
| 136 | enum band_number { |
| 137 | //e_archive_magic, |
| 138 | //e_archive_header, |
| 139 | //e_band_headers, |
| 140 | |
| 141 | // constant pool contents |
| 142 | e_cp_Utf8_prefix, |
| 143 | e_cp_Utf8_suffix, |
| 144 | e_cp_Utf8_chars, |
| 145 | e_cp_Utf8_big_suffix, |
| 146 | e_cp_Utf8_big_chars, |
| 147 | e_cp_Int, |
| 148 | e_cp_Float, |
| 149 | e_cp_Long_hi, |
| 150 | e_cp_Long_lo, |
| 151 | e_cp_Double_hi, |
| 152 | e_cp_Double_lo, |
| 153 | e_cp_String, |
| 154 | e_cp_Class, |
| 155 | e_cp_Signature_form, |
| 156 | e_cp_Signature_classes, |
| 157 | e_cp_Descr_name, |
| 158 | e_cp_Descr_type, |
| 159 | e_cp_Field_class, |
| 160 | e_cp_Field_desc, |
| 161 | e_cp_Method_class, |
| 162 | e_cp_Method_desc, |
| 163 | e_cp_Imethod_class, |
| 164 | e_cp_Imethod_desc, |
| 165 | |
| 166 | // bands which define transmission of attributes |
| 167 | e_attr_definition_headers, |
| 168 | e_attr_definition_name, |
| 169 | e_attr_definition_layout, |
| 170 | |
| 171 | // band for hardwired InnerClasses attribute (shared across the package) |
| 172 | e_ic_this_class, |
| 173 | e_ic_flags, |
| 174 | // These bands contain data only where flags sets ACC_IC_LONG_FORM: |
| 175 | e_ic_outer_class, |
| 176 | e_ic_name, |
| 177 | |
| 178 | // bands for carrying class schema information: |
| 179 | e_class_this, |
| 180 | e_class_super, |
| 181 | e_class_interface_count, |
| 182 | e_class_interface, |
| 183 | |
| 184 | // bands for class members |
| 185 | e_class_field_count, |
| 186 | e_class_method_count, |
| 187 | |
| 188 | e_field_descr, |
| 189 | e_field_flags_hi, |
| 190 | e_field_flags_lo, |
| 191 | e_field_attr_count, |
| 192 | e_field_attr_indexes, |
| 193 | e_field_attr_calls, |
| 194 | e_field_ConstantValue_KQ, |
| 195 | e_field_Signature_RS, |
| 196 | e_field_metadata_bands, |
| 197 | e_field_attr_bands, |
| 198 | |
| 199 | e_method_descr, |
| 200 | e_method_flags_hi, |
| 201 | e_method_flags_lo, |
| 202 | e_method_attr_count, |
| 203 | e_method_attr_indexes, |
| 204 | e_method_attr_calls, |
| 205 | e_method_Exceptions_N, |
| 206 | e_method_Exceptions_RC, |
| 207 | e_method_Signature_RS, |
| 208 | e_method_metadata_bands, |
| 209 | e_method_attr_bands, |
| 210 | |
| 211 | e_class_flags_hi, |
| 212 | e_class_flags_lo, |
| 213 | e_class_attr_count, |
| 214 | e_class_attr_indexes, |
| 215 | e_class_attr_calls, |
| 216 | e_class_SourceFile_RUN, |
| 217 | e_class_EnclosingMethod_RC, |
| 218 | e_class_EnclosingMethod_RDN, |
| 219 | e_class_Signature_RS, |
| 220 | e_class_metadata_bands, |
| 221 | e_class_InnerClasses_N, |
| 222 | e_class_InnerClasses_RC, |
| 223 | e_class_InnerClasses_F, |
| 224 | e_class_InnerClasses_outer_RCN, |
| 225 | e_class_InnerClasses_name_RUN, |
| 226 | e_class_ClassFile_version_minor_H, |
| 227 | e_class_ClassFile_version_major_H, |
| 228 | e_class_attr_bands, |
| 229 | |
| 230 | e_code_headers, |
| 231 | e_code_max_stack, |
| 232 | e_code_max_na_locals, |
| 233 | e_code_handler_count, |
| 234 | e_code_handler_start_P, |
| 235 | e_code_handler_end_PO, |
| 236 | e_code_handler_catch_PO, |
| 237 | e_code_handler_class_RCN, |
| 238 | |
| 239 | // code attributes |
| 240 | e_code_flags_hi, |
| 241 | e_code_flags_lo, |
| 242 | e_code_attr_count, |
| 243 | e_code_attr_indexes, |
| 244 | e_code_attr_calls, |
| 245 | e_code_StackMapTable_N, |
| 246 | e_code_StackMapTable_frame_T, |
| 247 | e_code_StackMapTable_local_N, |
| 248 | e_code_StackMapTable_stack_N, |
| 249 | e_code_StackMapTable_offset, |
| 250 | e_code_StackMapTable_T, |
| 251 | e_code_StackMapTable_RC, |
| 252 | e_code_StackMapTable_P, |
| 253 | e_code_LineNumberTable_N, |
| 254 | e_code_LineNumberTable_bci_P, |
| 255 | e_code_LineNumberTable_line, |
| 256 | e_code_LocalVariableTable_N, |
| 257 | e_code_LocalVariableTable_bci_P, |
| 258 | e_code_LocalVariableTable_span_O, |
| 259 | e_code_LocalVariableTable_name_RU, |
| 260 | e_code_LocalVariableTable_type_RS, |
| 261 | e_code_LocalVariableTable_slot, |
| 262 | e_code_LocalVariableTypeTable_N, |
| 263 | e_code_LocalVariableTypeTable_bci_P, |
| 264 | e_code_LocalVariableTypeTable_span_O, |
| 265 | e_code_LocalVariableTypeTable_name_RU, |
| 266 | e_code_LocalVariableTypeTable_type_RS, |
| 267 | e_code_LocalVariableTypeTable_slot, |
| 268 | e_code_attr_bands, |
| 269 | |
| 270 | // bands for bytecodes |
| 271 | e_bc_codes, |
| 272 | // remaining bands provide typed opcode fields required by the bc_codes |
| 273 | |
| 274 | e_bc_case_count, |
| 275 | e_bc_case_value, |
| 276 | e_bc_byte, |
| 277 | e_bc_short, |
| 278 | e_bc_local, |
| 279 | e_bc_label, |
| 280 | |
| 281 | // ldc* operands: |
| 282 | e_bc_intref, |
| 283 | e_bc_floatref, |
| 284 | e_bc_longref, |
| 285 | e_bc_doubleref, |
| 286 | e_bc_stringref, |
| 287 | e_bc_classref, |
| 288 | |
| 289 | e_bc_fieldref, |
| 290 | e_bc_methodref, |
| 291 | e_bc_imethodref, |
| 292 | |
| 293 | // _self_linker_op family |
| 294 | e_bc_thisfield, |
| 295 | e_bc_superfield, |
| 296 | e_bc_thismethod, |
| 297 | e_bc_supermethod, |
| 298 | |
| 299 | // bc_invokeinit family: |
| 300 | e_bc_initref, |
| 301 | |
| 302 | // bytecode escape sequences |
| 303 | e_bc_escref, |
| 304 | e_bc_escrefsize, |
| 305 | e_bc_escsize, |
| 306 | e_bc_escbyte, |
| 307 | |
| 308 | // file attributes and contents |
| 309 | e_file_name, |
| 310 | e_file_size_hi, |
| 311 | e_file_size_lo, |
| 312 | e_file_modtime, |
| 313 | e_file_options, |
| 314 | //e_file_bits, // handled specially as an appendix |
| 315 | |
| 316 | BAND_LIMIT |
| 317 | }; |
| 318 | |
| 319 | // Symbolic names for bands, as if in a giant global struct: |
| 320 | //#define archive_magic all_bands[e_archive_magic] |
| 321 | //#define archive_header all_bands[e_archive_header] |
| 322 | //#define band_headers all_bands[e_band_headers] |
| 323 | #define cp_Utf8_prefix all_bands[e_cp_Utf8_prefix] |
| 324 | #define cp_Utf8_suffix all_bands[e_cp_Utf8_suffix] |
| 325 | #define cp_Utf8_chars all_bands[e_cp_Utf8_chars] |
| 326 | #define cp_Utf8_big_suffix all_bands[e_cp_Utf8_big_suffix] |
| 327 | #define cp_Utf8_big_chars all_bands[e_cp_Utf8_big_chars] |
| 328 | #define cp_Int all_bands[e_cp_Int] |
| 329 | #define cp_Float all_bands[e_cp_Float] |
| 330 | #define cp_Long_hi all_bands[e_cp_Long_hi] |
| 331 | #define cp_Long_lo all_bands[e_cp_Long_lo] |
| 332 | #define cp_Double_hi all_bands[e_cp_Double_hi] |
| 333 | #define cp_Double_lo all_bands[e_cp_Double_lo] |
| 334 | #define cp_String all_bands[e_cp_String] |
| 335 | #define cp_Class all_bands[e_cp_Class] |
| 336 | #define cp_Signature_form all_bands[e_cp_Signature_form] |
| 337 | #define cp_Signature_classes all_bands[e_cp_Signature_classes] |
| 338 | #define cp_Descr_name all_bands[e_cp_Descr_name] |
| 339 | #define cp_Descr_type all_bands[e_cp_Descr_type] |
| 340 | #define cp_Field_class all_bands[e_cp_Field_class] |
| 341 | #define cp_Field_desc all_bands[e_cp_Field_desc] |
| 342 | #define cp_Method_class all_bands[e_cp_Method_class] |
| 343 | #define cp_Method_desc all_bands[e_cp_Method_desc] |
| 344 | #define cp_Imethod_class all_bands[e_cp_Imethod_class] |
| 345 | #define cp_Imethod_desc all_bands[e_cp_Imethod_desc] |
| 346 | #define attr_definition_headers all_bands[e_attr_definition_headers] |
| 347 | #define attr_definition_name all_bands[e_attr_definition_name] |
| 348 | #define attr_definition_layout all_bands[e_attr_definition_layout] |
| 349 | #define ic_this_class all_bands[e_ic_this_class] |
| 350 | #define ic_flags all_bands[e_ic_flags] |
| 351 | #define ic_outer_class all_bands[e_ic_outer_class] |
| 352 | #define ic_name all_bands[e_ic_name] |
| 353 | #define class_this all_bands[e_class_this] |
| 354 | #define class_super all_bands[e_class_super] |
| 355 | #define class_interface_count all_bands[e_class_interface_count] |
| 356 | #define class_interface all_bands[e_class_interface] |
| 357 | #define class_field_count all_bands[e_class_field_count] |
| 358 | #define class_method_count all_bands[e_class_method_count] |
| 359 | #define field_descr all_bands[e_field_descr] |
| 360 | #define field_flags_hi all_bands[e_field_flags_hi] |
| 361 | #define field_flags_lo all_bands[e_field_flags_lo] |
| 362 | #define field_attr_count all_bands[e_field_attr_count] |
| 363 | #define field_attr_indexes all_bands[e_field_attr_indexes] |
| 364 | #define field_ConstantValue_KQ all_bands[e_field_ConstantValue_KQ] |
| 365 | #define field_Signature_RS all_bands[e_field_Signature_RS] |
| 366 | #define field_attr_bands all_bands[e_field_attr_bands] |
| 367 | #define method_descr all_bands[e_method_descr] |
| 368 | #define method_flags_hi all_bands[e_method_flags_hi] |
| 369 | #define method_flags_lo all_bands[e_method_flags_lo] |
| 370 | #define method_attr_count all_bands[e_method_attr_count] |
| 371 | #define method_attr_indexes all_bands[e_method_attr_indexes] |
| 372 | #define method_Exceptions_N all_bands[e_method_Exceptions_N] |
| 373 | #define method_Exceptions_RC all_bands[e_method_Exceptions_RC] |
| 374 | #define method_Signature_RS all_bands[e_method_Signature_RS] |
| 375 | #define method_attr_bands all_bands[e_method_attr_bands] |
| 376 | #define class_flags_hi all_bands[e_class_flags_hi] |
| 377 | #define class_flags_lo all_bands[e_class_flags_lo] |
| 378 | #define class_attr_count all_bands[e_class_attr_count] |
| 379 | #define class_attr_indexes all_bands[e_class_attr_indexes] |
| 380 | #define class_SourceFile_RUN all_bands[e_class_SourceFile_RUN] |
| 381 | #define class_EnclosingMethod_RC all_bands[e_class_EnclosingMethod_RC] |
| 382 | #define class_EnclosingMethod_RDN all_bands[e_class_EnclosingMethod_RDN] |
| 383 | #define class_Signature_RS all_bands[e_class_Signature_RS] |
| 384 | #define class_InnerClasses_N all_bands[e_class_InnerClasses_N] |
| 385 | #define class_InnerClasses_RC all_bands[e_class_InnerClasses_RC] |
| 386 | #define class_InnerClasses_F all_bands[e_class_InnerClasses_F] |
| 387 | #define class_InnerClasses_outer_RCN all_bands[e_class_InnerClasses_outer_RCN] |
| 388 | #define class_InnerClasses_name_RUN all_bands[e_class_InnerClasses_name_RUN] |
| 389 | #define class_ClassFile_version_minor_H all_bands[e_class_ClassFile_version_minor_H] |
| 390 | #define class_ClassFile_version_major_H all_bands[e_class_ClassFile_version_major_H] |
| 391 | #define class_attr_bands all_bands[e_class_attr_bands] |
| 392 | #define code_headers all_bands[e_code_headers] |
| 393 | #define code_max_stack all_bands[e_code_max_stack] |
| 394 | #define code_max_na_locals all_bands[e_code_max_na_locals] |
| 395 | #define code_handler_count all_bands[e_code_handler_count] |
| 396 | #define code_handler_start_P all_bands[e_code_handler_start_P] |
| 397 | #define code_handler_end_PO all_bands[e_code_handler_end_PO] |
| 398 | #define code_handler_catch_PO all_bands[e_code_handler_catch_PO] |
| 399 | #define code_handler_class_RCN all_bands[e_code_handler_class_RCN] |
| 400 | #define code_flags_hi all_bands[e_code_flags_hi] |
| 401 | #define code_flags_lo all_bands[e_code_flags_lo] |
| 402 | #define code_attr_count all_bands[e_code_attr_count] |
| 403 | #define code_attr_indexes all_bands[e_code_attr_indexes] |
| 404 | #define code_StackMapTable_N all_bands[e_code_StackMapTable_N] |
| 405 | #define code_StackMapTable_frame_T all_bands[e_code_StackMapTable_frame_T] |
| 406 | #define code_StackMapTable_local_N all_bands[e_code_StackMapTable_local_N] |
| 407 | #define code_StackMapTable_stack_N all_bands[e_code_StackMapTable_stack_N] |
| 408 | #define code_StackMapTable_offset all_bands[e_code_StackMapTable_offset] |
| 409 | #define code_StackMapTable_T all_bands[e_code_StackMapTable_T] |
| 410 | #define code_StackMapTable_RC all_bands[e_code_StackMapTable_RC] |
| 411 | #define code_StackMapTable_P all_bands[e_code_StackMapTable_P] |
| 412 | #define code_LineNumberTable_N all_bands[e_code_LineNumberTable_N] |
| 413 | #define code_LineNumberTable_bci_P all_bands[e_code_LineNumberTable_bci_P] |
| 414 | #define code_LineNumberTable_line all_bands[e_code_LineNumberTable_line] |
| 415 | #define code_LocalVariableTable_N all_bands[e_code_LocalVariableTable_N] |
| 416 | #define code_LocalVariableTable_bci_P all_bands[e_code_LocalVariableTable_bci_P] |
| 417 | #define code_LocalVariableTable_span_O all_bands[e_code_LocalVariableTable_span_O] |
| 418 | #define code_LocalVariableTable_name_RU all_bands[e_code_LocalVariableTable_name_RU] |
| 419 | #define code_LocalVariableTable_type_RS all_bands[e_code_LocalVariableTable_type_RS] |
| 420 | #define code_LocalVariableTable_slot all_bands[e_code_LocalVariableTable_slot] |
| 421 | #define code_LocalVariableTypeTable_N all_bands[e_code_LocalVariableTypeTable_N] |
| 422 | #define code_LocalVariableTypeTable_bci_P all_bands[e_code_LocalVariableTypeTable_bci_P] |
| 423 | #define code_LocalVariableTypeTable_span_O all_bands[e_code_LocalVariableTypeTable_span_O] |
| 424 | #define code_LocalVariableTypeTable_name_RU all_bands[e_code_LocalVariableTypeTable_name_RU] |
| 425 | #define code_LocalVariableTypeTable_type_RS all_bands[e_code_LocalVariableTypeTable_type_RS] |
| 426 | #define code_LocalVariableTypeTable_slot all_bands[e_code_LocalVariableTypeTable_slot] |
| 427 | #define code_attr_bands all_bands[e_code_attr_bands] |
| 428 | #define bc_codes all_bands[e_bc_codes] |
| 429 | #define bc_case_count all_bands[e_bc_case_count] |
| 430 | #define bc_case_value all_bands[e_bc_case_value] |
| 431 | #define bc_byte all_bands[e_bc_byte] |
| 432 | #define bc_short all_bands[e_bc_short] |
| 433 | #define bc_local all_bands[e_bc_local] |
| 434 | #define bc_label all_bands[e_bc_label] |
| 435 | #define bc_intref all_bands[e_bc_intref] |
| 436 | #define bc_floatref all_bands[e_bc_floatref] |
| 437 | #define bc_longref all_bands[e_bc_longref] |
| 438 | #define bc_doubleref all_bands[e_bc_doubleref] |
| 439 | #define bc_stringref all_bands[e_bc_stringref] |
| 440 | #define bc_classref all_bands[e_bc_classref] |
| 441 | #define bc_fieldref all_bands[e_bc_fieldref] |
| 442 | #define bc_methodref all_bands[e_bc_methodref] |
| 443 | #define bc_imethodref all_bands[e_bc_imethodref] |
| 444 | #define bc_thisfield all_bands[e_bc_thisfield] |
| 445 | #define bc_superfield all_bands[e_bc_superfield] |
| 446 | #define bc_thismethod all_bands[e_bc_thismethod] |
| 447 | #define bc_supermethod all_bands[e_bc_supermethod] |
| 448 | #define bc_initref all_bands[e_bc_initref] |
| 449 | #define bc_escref all_bands[e_bc_escref] |
| 450 | #define bc_escrefsize all_bands[e_bc_escrefsize] |
| 451 | #define bc_escsize all_bands[e_bc_escsize] |
| 452 | #define bc_escbyte all_bands[e_bc_escbyte] |
| 453 | #define file_name all_bands[e_file_name] |
| 454 | #define file_size_hi all_bands[e_file_size_hi] |
| 455 | #define file_size_lo all_bands[e_file_size_lo] |
| 456 | #define file_modtime all_bands[e_file_modtime] |
| 457 | #define file_options all_bands[e_file_options] |