/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
// -*- C++ -*-
struct entry;
struct cpindex;
struct unpacker;
struct band {
#ifndef PRODUCT
const char* name;
#endif
unpacker* u; // back pointer
// properties for attribute layout elements:
// Note: EK_CASE elements use hist0 to record union tags.
u = u_;
}
}
}
void expectMoreLength(int l) {
assert((int)l >= 0); // no overflow
length += l;
}
// Parse the band and its meta-coding header.
void readData(int expectedLength = 0);
// Reset the band for another pass (Cf. Java Band.resetForSecondPass.)
void rewind() {
}
}
int getIntTotal();
int getIntCount(int tag);
static void initIndexes(unpacker* u);
#ifndef PRODUCT
void dump();
#endif
bool aborting(); //{ return u->aborting(); }
};
band* band_temp = all_bands; \
band* all_bands = band_temp */
// Band schema:
enum band_number {
//e_archive_magic,
//e_archive_header,
//e_band_headers,
// constant pool contents
// bands which define transmission of attributes
// band for hardwired InnerClasses attribute (shared across the package)
// These bands contain data only where flags sets ACC_IC_LONG_FORM:
// bands for carrying class schema information:
// bands for class members
// code attributes
// bands for bytecodes
// remaining bands provide typed opcode fields required by the bc_codes
// ldc* operands:
// _self_linker_op family
// bc_invokeinit family:
// bytecode escape sequences
// file attributes and contents
//e_file_bits, // handled specially as an appendix
};
// Symbolic names for bands, as if in a giant global struct:
//#define archive_magic all_bands[e_archive_magic]
//#define archive_header all_bands[e_archive_header]
//#define band_headers all_bands[e_band_headers]