diff options
Diffstat (limited to 'lib/Bytecode')
-rw-r--r-- | lib/Bytecode/Reader/ConstantReader.cpp | 17 | ||||
-rw-r--r-- | lib/Bytecode/Reader/InstructionReader.cpp | 7 | ||||
-rw-r--r-- | lib/Bytecode/Reader/Reader.cpp | 32 | ||||
-rw-r--r-- | lib/Bytecode/Reader/ReaderInternals.h | 26 | ||||
-rw-r--r-- | lib/Bytecode/Writer/ConstantWriter.cpp | 4 | ||||
-rw-r--r-- | lib/Bytecode/Writer/InstructionWriter.cpp | 10 | ||||
-rw-r--r-- | lib/Bytecode/Writer/SlotCalculator.cpp | 5 | ||||
-rw-r--r-- | lib/Bytecode/Writer/SlotCalculator.h | 8 | ||||
-rw-r--r-- | lib/Bytecode/Writer/Writer.cpp | 14 | ||||
-rw-r--r-- | lib/Bytecode/Writer/WriterInternals.h | 8 |
10 files changed, 71 insertions, 60 deletions
diff --git a/lib/Bytecode/Reader/ConstantReader.cpp b/lib/Bytecode/Reader/ConstantReader.cpp index 78da567f01..d5833dbeed 100644 --- a/lib/Bytecode/Reader/ConstantReader.cpp +++ b/lib/Bytecode/Reader/ConstantReader.cpp @@ -14,8 +14,9 @@ #include "llvm/ConstantVals.h" #include "llvm/GlobalVariable.h" #include <algorithm> - - +#include <iostream> +using std::make_pair; +using std::cerr; const Type *BytecodeParser::parseTypeConstant(const uchar *&Buf, const uchar *EndBuf) { @@ -36,7 +37,7 @@ const Type *BytecodeParser::parseTypeConstant(const uchar *&Buf, unsigned NumParams; if (read_vbr(Buf, EndBuf, NumParams)) return failure(Val); - vector<const Type*> Params; + std::vector<const Type*> Params; while (NumParams--) { if (read_vbr(Buf, EndBuf, Typ)) return failure(Val); const Type *Ty = getType(Typ); @@ -59,12 +60,12 @@ const Type *BytecodeParser::parseTypeConstant(const uchar *&Buf, if (read_vbr(Buf, EndBuf, NumElements)) return failure(Val); BCR_TRACE(5, "Array Type Constant #" << ElTyp << " size=" - << NumElements << endl); + << NumElements << "\n"); return ArrayType::get(ElementType, NumElements); } case Type::StructTyID: { unsigned Typ; - vector<const Type*> Elements; + std::vector<const Type*> Elements; if (read_vbr(Buf, EndBuf, Typ)) return failure(Val); while (Typ) { // List is terminated by void/0 typeid @@ -80,7 +81,7 @@ const Type *BytecodeParser::parseTypeConstant(const uchar *&Buf, case Type::PointerTyID: { unsigned ElTyp; if (read_vbr(Buf, EndBuf, ElTyp)) return failure(Val); - BCR_TRACE(5, "Pointer Type Constant #" << (ElTyp-14) << endl); + BCR_TRACE(5, "Pointer Type Constant #" << (ElTyp-14) << "\n"); const Type *ElementType = getType(ElTyp); if (ElementType == 0) return failure(Val); return PointerType::get(ElementType); @@ -241,7 +242,7 @@ bool BytecodeParser::parseConstantValue(const uchar *&Buf, const uchar *EndBuf, const ArrayType *AT = cast<const ArrayType>(Ty); unsigned NumElements = AT->getNumElements(); - vector<Constant*> Elements; + std::vector<Constant*> Elements; while (NumElements--) { // Read all of the elements of the constant. unsigned Slot; if (read_vbr(Buf, EndBuf, Slot)) return failure(true); @@ -257,7 +258,7 @@ bool BytecodeParser::parseConstantValue(const uchar *&Buf, const uchar *EndBuf, const StructType *ST = cast<StructType>(Ty); const StructType::ElementTypes &ET = ST->getElementTypes(); - vector<Constant *> Elements; + std::vector<Constant *> Elements; for (unsigned i = 0; i < ET.size(); ++i) { unsigned Slot; if (read_vbr(Buf, EndBuf, Slot)) return failure(true); diff --git a/lib/Bytecode/Reader/InstructionReader.cpp b/lib/Bytecode/Reader/InstructionReader.cpp index b498ac90c1..8402db5e82 100644 --- a/lib/Bytecode/Reader/InstructionReader.cpp +++ b/lib/Bytecode/Reader/InstructionReader.cpp @@ -16,6 +16,9 @@ #include "llvm/iMemory.h" #include "llvm/iPHINode.h" #include "llvm/iOther.h" +#include <iostream> +using std::vector; +using std::cerr; bool BytecodeParser::ParseRawInst(const uchar *&Buf, const uchar *EndBuf, RawInst &Result) { @@ -107,7 +110,7 @@ bool BytecodeParser::ParseRawInst(const uchar *&Buf, const uchar *EndBuf, #if 0 cerr << "NO: " << Result.NumOperands << " opcode: " << Result.Opcode << " Ty: " << Result.Ty->getDescription() << " arg1: " << Result.Arg1 - << " arg2: " << Result.Arg2 << " arg3: " << Result.Arg3 << endl; + << " arg2: " << Result.Arg2 << " arg3: " << Result.Arg3 << "\n"; #endif return false; } @@ -441,6 +444,6 @@ bool BytecodeParser::ParseInstruction(const uchar *&Buf, const uchar *EndBuf, } // end switch(Raw.Opcode) cerr << "Unrecognized instruction! " << Raw.Opcode - << " ADDR = 0x" << (void*)Buf << endl; + << " ADDR = 0x" << (void*)Buf << "\n"; return failure(true); } diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp index c8be36845a..d0c4d7a5ae 100644 --- a/lib/Bytecode/Reader/Reader.cpp +++ b/lib/Bytecode/Reader/Reader.cpp @@ -20,11 +20,15 @@ #include "llvm/iPHINode.h" #include "llvm/iOther.h" #include <sys/types.h> -#include <sys/mman.h> +typedef int blksize_t; #include <sys/stat.h> +#include <sys/mman.h> #include <fcntl.h> #include <unistd.h> #include <algorithm> +#include <iostream> +using std::cerr; +using std::make_pair; bool BytecodeParser::getTypeSlot(const Type *Ty, unsigned &Slot) { if (Ty->isPrimitiveType()) { @@ -42,7 +46,7 @@ bool BytecodeParser::getTypeSlot(const Type *Ty, unsigned &Slot) { Slot = FirstDerivedTyID + (&*I - &ModuleTypeValues[0]); } } - //cerr << "getTypeSlot '" << Ty->getName() << "' = " << Slot << endl; + //cerr << "getTypeSlot '" << Ty->getName() << "' = " << Slot << "\n"; return false; } @@ -50,7 +54,7 @@ const Type *BytecodeParser::getType(unsigned ID) { const Type *T = Type::getPrimitiveType((Type::PrimitiveID)ID); if (T) return T; - //cerr << "Looking up Type ID: " << ID << endl; + //cerr << "Looking up Type ID: " << ID << "\n"; const Value *D = getValue(Type::TypeTy, ID, false); if (D == 0) return failure<const Type*>(0); @@ -58,7 +62,7 @@ const Type *BytecodeParser::getType(unsigned ID) { return cast<Type>(D); } -int BytecodeParser::insertValue(Value *Val, vector<ValueList> &ValueTab) { +int BytecodeParser::insertValue(Value *Val, std::vector<ValueList> &ValueTab) { unsigned type; if (getTypeSlot(Val->getType(), type)) return failure<int>(-1); assert(type != Type::TypeTyID && "Types should never be insertValue'd!"); @@ -67,7 +71,7 @@ int BytecodeParser::insertValue(Value *Val, vector<ValueList> &ValueTab) { ValueTab.resize(type+1, ValueList()); //cerr << "insertValue Values[" << type << "][" << ValueTab[type].size() - // << "] = " << Val << endl; + // << "] = " << Val << "\n"; ValueTab[type].push_back(Val); return ValueTab[type].size()-1; @@ -115,7 +119,7 @@ Value *BytecodeParser::getValue(const Type *Ty, unsigned oNum, bool Create) { case Type::LabelTyID: d = new BBPHolder(Ty, oNum); break; case Type::MethodTyID: cerr << "Creating method pholder! : " << type << ":" << oNum << " " - << Ty->getName() << endl; + << Ty->getName() << "\n"; d = new MethPHolder(Ty, oNum); if (insertValue(d, LateResolveModuleValues) ==-1) return failure<Value*>(0); return d; @@ -196,17 +200,17 @@ bool BytecodeParser::ParseSymbolTable(const uchar *&Buf, const uchar *EndBuf, // Symtab entry: [def slot #][name] unsigned slot; if (read_vbr(Buf, EndBuf, slot)) return failure(true); - string Name; + std::string Name; if (read(Buf, EndBuf, Name, false)) // Not aligned... return failure(true); Value *D = getValue(Ty, slot, false); // Find mapping... if (D == 0) { - BCR_TRACE(3, "FAILED LOOKUP: Slot #" << slot << endl); + BCR_TRACE(3, "FAILED LOOKUP: Slot #" << slot << "\n"); return failure(true); } BCR_TRACE(4, "Map: '" << Name << "' to #" << slot << ":" << D; - if (!isa<Instruction>(D)) cerr << endl); + if (!isa<Instruction>(D)) cerr << "\n"); D->setName(Name, ST); } @@ -272,7 +276,7 @@ bool BytecodeParser::ParseMethod(const uchar *&Buf, const uchar *EndBuf, MethodSignatureList.pop_front(); Method *M = new Method(MTy, isInternal != 0); - BCR_TRACE(2, "METHOD TYPE: " << MTy << endl); + BCR_TRACE(2, "METHOD TYPE: " << MTy << "\n"); const MethodType::ParamTypes &Params = MTy->getParamTypes(); for (MethodType::ParamTypes::const_iterator It = Params.begin(); @@ -418,7 +422,7 @@ bool BytecodeParser::ParseModuleGlobalInfo(const uchar *&Buf, const uchar *End, DeclareNewGlobalValue(GV, unsigned(DestSlot)); BCR_TRACE(2, "Global Variable of type: " << PTy->getDescription() - << " into slot #" << DestSlot << endl); + << " into slot #" << DestSlot << "\n"); if (read_vbr(Buf, End, VarType)) return failure(true); } @@ -459,7 +463,7 @@ bool BytecodeParser::ParseModuleGlobalInfo(const uchar *&Buf, const uchar *End, MethodSignatureList.push_back( make_pair(cast<const PointerType>(Val->getType()), SlotNo)); if (read_vbr(Buf, End, MethSignature)) return failure(true); - BCR_TRACE(2, "Method of type: " << Ty << endl); + BCR_TRACE(2, "Method of type: " << Ty << "\n"); } if (align32(Buf, End)) return failure(true); @@ -566,11 +570,11 @@ Module *ParseBytecodeBuffer(const uchar *Buffer, unsigned Length) { // Parse and return a class file... // -Module *ParseBytecodeFile(const string &Filename, string *ErrorStr) { +Module *ParseBytecodeFile(const std::string &Filename, std::string *ErrorStr) { struct stat StatBuf; Module *Result = 0; - if (Filename != string("-")) { // Read from a file... + if (Filename != std::string("-")) { // Read from a file... int FD = open(Filename.c_str(), O_RDONLY); if (FD == -1) { if (ErrorStr) *ErrorStr = "Error opening file!"; diff --git a/lib/Bytecode/Reader/ReaderInternals.h b/lib/Bytecode/Reader/ReaderInternals.h index 6abaa2e56b..8a7297a8b3 100644 --- a/lib/Bytecode/Reader/ReaderInternals.h +++ b/lib/Bytecode/Reader/ReaderInternals.h @@ -21,7 +21,7 @@ #if TRACE_LEVEL // ByteCodeReading_TRACEer #include "llvm/Assembly/Writer.h" -#define BCR_TRACE(n, X) if (n < TRACE_LEVEL) cerr << string(n*2, ' ') << X +#define BCR_TRACE(n, X) if (n < TRACE_LEVEL) cerr << std::string(n*2, ' ') << X #else #define BCR_TRACE(n, X) #endif @@ -41,12 +41,12 @@ struct RawInst { // The raw fields out of the bytecode stream... unsigned Arg1, Arg2; union { unsigned Arg3; - vector<unsigned> *VarArgs; // Contains arg #3,4,5... if NumOperands > 3 + std::vector<unsigned> *VarArgs; // Contains arg #3,4,5... if NumOperands > 3 }; }; class BytecodeParser : public AbstractTypeUser { - string Error; // Error message string goes here... + std::string Error; // Error message string goes here... public: BytecodeParser() { // Define this in case we don't see a ModuleGlobalInfo block. @@ -55,13 +55,13 @@ public: Module *ParseBytecode(const uchar *Buf, const uchar *EndBuf); - string getError() const { return Error; } + std::string getError() const { return Error; } private: // All of this data is transient across calls to ParseBytecode Module *TheModule; // Current Module being read into... - typedef vector<Value *> ValueList; - typedef vector<ValueList> ValueTable; + typedef std::vector<Value *> ValueList; + typedef std::vector<ValueList> ValueTable; ValueTable Values, LateResolveValues; ValueTable ModuleValues, LateResolveModuleValues; @@ -70,14 +70,14 @@ private: // All of this data is transient across calls to ParseBytecode // are defined, and if so, the temporary object that they represent is held // here. // - typedef map<pair<const PointerType *, unsigned>, GlobalVariable*> - GlobalRefsType; + typedef std::map<std::pair<const PointerType *, unsigned>, + GlobalVariable*> GlobalRefsType; GlobalRefsType GlobalRefs; // TypesLoaded - This vector mirrors the Values[TypeTyID] plane. It is used // to deal with forward references to types. // - typedef vector<PATypeHandle<Type> > TypeValuesListTy; + typedef std::vector<PATypeHandle<Type> > TypeValuesListTy; TypeValuesListTy ModuleTypeValues; TypeValuesListTy MethodTypeValues; @@ -89,11 +89,11 @@ private: // All of this data is transient across calls to ParseBytecode // into its slot to reserve it. When the method is loaded, this placeholder // is replaced. // - list<pair<const PointerType *, unsigned> > MethodSignatureList; + std::list<std::pair<const PointerType *, unsigned> > MethodSignatureList; private: - bool ParseModule (const uchar * Buf, const uchar *End, Module *&); - bool ParseModuleGlobalInfo (const uchar *&Buf, const uchar *End, Module *); + bool ParseModule (const uchar * Buf, const uchar *End, Module *&); + bool ParseModuleGlobalInfo(const uchar *&Buf, const uchar *End, Module *); bool ParseSymbolTable (const uchar *&Buf, const uchar *End, SymbolTable *); bool ParseMethod (const uchar *&Buf, const uchar *End, Module *); bool ParseBasicBlock (const uchar *&Buf, const uchar *End, BasicBlock *&); @@ -111,7 +111,7 @@ private: Value *getValue(const Type *Ty, unsigned num, bool Create = true); const Type *getType(unsigned ID); - int insertValue(Value *D, vector<ValueList> &D); // -1 = Failure + int insertValue(Value *D, std::vector<ValueList> &D); // -1 = Failure bool postResolveValues(ValueTable &ValTab); bool getTypeSlot(const Type *Ty, unsigned &Slot); diff --git a/lib/Bytecode/Writer/ConstantWriter.cpp b/lib/Bytecode/Writer/ConstantWriter.cpp index bcfa976573..73130f3ee8 100644 --- a/lib/Bytecode/Writer/ConstantWriter.cpp +++ b/lib/Bytecode/Writer/ConstantWriter.cpp @@ -13,6 +13,8 @@ #include "llvm/ConstantVals.h" #include "llvm/SymbolTable.h" #include "llvm/DerivedTypes.h" +#include <iostream> +using std::cerr; void BytecodeWriter::outputType(const Type *T) { output_vbr((unsigned)T->getPrimitiveID(), Out); @@ -134,7 +136,7 @@ bool BytecodeWriter::outputConstant(const Constant *CPV) { case Type::StructTyID: { const ConstantStruct *CPS = cast<const ConstantStruct>(CPV); - const vector<Use> &Vals = CPS->getValues(); + const std::vector<Use> &Vals = CPS->getValues(); for (unsigned i = 0; i < Vals.size(); ++i) { int Slot = Table.getValSlot(Vals[i]); diff --git a/lib/Bytecode/Writer/InstructionWriter.cpp b/lib/Bytecode/Writer/InstructionWriter.cpp index 825fde6a16..f047ab5e1c 100644 --- a/lib/Bytecode/Writer/InstructionWriter.cpp +++ b/lib/Bytecode/Writer/InstructionWriter.cpp @@ -28,7 +28,7 @@ typedef unsigned char uchar; // static void outputInstructionFormat0(const Instruction *I, const SlotCalculator &Table, - unsigned Type, deque<uchar> &Out) { + unsigned Type, std::deque<uchar> &Out) { // Opcode must have top two bits clear... output_vbr(I->getOpcode() << 2, Out); // Instruction Opcode ID output_vbr(Type, Out); // Result type @@ -63,7 +63,7 @@ static void outputInstructionFormat0(const Instruction *I, // static void outputInstrVarArgsCall(const Instruction *I, const SlotCalculator &Table, unsigned Type, - deque<uchar> &Out) { + std::deque<uchar> &Out) { assert(isa<CallInst>(I) || isa<InvokeInst>(I)); // Opcode must have top two bits clear... output_vbr(I->getOpcode() << 2, Out); // Instruction Opcode ID @@ -106,7 +106,7 @@ static void outputInstrVarArgsCall(const Instruction *I, // static void outputInstructionFormat1(const Instruction *I, const SlotCalculator &Table, int *Slots, - unsigned Type, deque<uchar> &Out) { + unsigned Type, std::deque<uchar> &Out) { unsigned Opcode = I->getOpcode(); // Instruction Opcode ID // bits Instruction format: @@ -127,7 +127,7 @@ static void outputInstructionFormat1(const Instruction *I, // static void outputInstructionFormat2(const Instruction *I, const SlotCalculator &Table, int *Slots, - unsigned Type, deque<uchar> &Out) { + unsigned Type, std::deque<uchar> &Out) { unsigned Opcode = I->getOpcode(); // Instruction Opcode ID // bits Instruction format: @@ -151,7 +151,7 @@ static void outputInstructionFormat2(const Instruction *I, // static void outputInstructionFormat3(const Instruction *I, const SlotCalculator &Table, int *Slots, - unsigned Type, deque<uchar> &Out) { + unsigned Type, std::deque<uchar> &Out) { unsigned Opcode = I->getOpcode(); // Instruction Opcode ID // bits Instruction format: diff --git a/lib/Bytecode/Writer/SlotCalculator.cpp b/lib/Bytecode/Writer/SlotCalculator.cpp index ede822846d..4738f712a1 100644 --- a/lib/Bytecode/Writer/SlotCalculator.cpp +++ b/lib/Bytecode/Writer/SlotCalculator.cpp @@ -196,7 +196,8 @@ void SlotCalculator::purgeMethod() { while (CurPlane.size() != ModuleSize) { //SC_DEBUG(" Removing [" << i << "] Value=" << CurPlane.back() << "\n"); - map<const Value *, unsigned>::iterator NI = NodeMap.find(CurPlane.back()); + std::map<const Value *, unsigned>::iterator NI = + NodeMap.find(CurPlane.back()); assert(NI != NodeMap.end() && "Node not in nodemap?"); NodeMap.erase(NI); // Erase from nodemap CurPlane.pop_back(); // Shrink plane @@ -223,7 +224,7 @@ void SlotCalculator::purgeMethod() { } int SlotCalculator::getValSlot(const Value *D) const { - map<const Value*, unsigned>::const_iterator I = NodeMap.find(D); + std::map<const Value*, unsigned>::const_iterator I = NodeMap.find(D); if (I == NodeMap.end()) return -1; return (int)I->second; diff --git a/lib/Bytecode/Writer/SlotCalculator.h b/lib/Bytecode/Writer/SlotCalculator.h index c7b3149054..95282447a5 100644 --- a/lib/Bytecode/Writer/SlotCalculator.h +++ b/lib/Bytecode/Writer/SlotCalculator.h @@ -23,14 +23,14 @@ class SlotCalculator { const Module *TheModule; bool IgnoreNamedNodes; // Shall we not count named nodes? - typedef vector<const Value*> TypePlane; - vector<TypePlane> Table; - map<const Value *, unsigned> NodeMap; + typedef std::vector<const Value*> TypePlane; + std::vector<TypePlane> Table; + std::map<const Value *, unsigned> NodeMap; // ModuleLevel - Used to keep track of which values belong to the module, // and which values belong to the currently incorporated method. // - vector<unsigned> ModuleLevel; + std::vector<unsigned> ModuleLevel; public: SlotCalculator(const Module *M, bool IgnoreNamed); diff --git a/lib/Bytecode/Writer/Writer.cpp b/lib/Bytecode/Writer/Writer.cpp index 3091384722..9ea5d37451 100644 --- a/lib/Bytecode/Writer/Writer.cpp +++ b/lib/Bytecode/Writer/Writer.cpp @@ -34,7 +34,7 @@ #include <string.h> #include <algorithm> -BytecodeWriter::BytecodeWriter(deque<unsigned char> &o, const Module *M) +BytecodeWriter::BytecodeWriter(std::deque<unsigned char> &o, const Module *M) : Out(o), Table(M, false) { outputSignature(); @@ -66,7 +66,7 @@ void BytecodeWriter::outputConstants(bool isMethod) { unsigned NumPlanes = Table.getNumPlanes(); for (unsigned pno = 0; pno < NumPlanes; pno++) { - const vector<const Value*> &Plane = Table.getPlane(pno); + const std::vector<const Value*> &Plane = Table.getPlane(pno); if (Plane.empty()) continue; // Skip empty type planes... unsigned ValNo = 0; @@ -95,8 +95,8 @@ void BytecodeWriter::outputConstants(bool isMethod) { assert (Slot != -1 && "Type in constant pool but not in method!!"); output_vbr((unsigned)Slot, Out); - //cout << "Emitting " << NC << " constants of type '" - // << Plane.front()->getType()->getName() << "' = Slot #" << Slot << endl; + //cerr << "Emitting " << NC << " constants of type '" + // << Plane.front()->getType()->getName() << "' = Slot #" << Slot << "\n"; for (unsigned i = ValNo; i < ValNo+NC; ++i) { const Value *V = Plane[i]; @@ -211,7 +211,7 @@ void BytecodeWriter::outputSymbolTable(const SymbolTable &MST) { void WriteBytecodeToFile(const Module *C, ostream &Out) { assert(C && "You can't write a null module!!"); - deque<unsigned char> Buffer; + std::deque<unsigned char> Buffer; // This object populates buffer for us... BytecodeWriter BCW(Buffer, C); @@ -220,7 +220,7 @@ void WriteBytecodeToFile(const Module *C, ostream &Out) { // sequential in memory, however, so write out as much as possible in big // chunks, until we're done. // - deque<unsigned char>::const_iterator I = Buffer.begin(), E = Buffer.end(); + std::deque<unsigned char>::const_iterator I = Buffer.begin(),E = Buffer.end(); while (I != E) { // Loop until it's all written // Scan to see how big this chunk is... const unsigned char *ChunkPtr = &*I; @@ -235,7 +235,7 @@ void WriteBytecodeToFile(const Module *C, ostream &Out) { } // Write out the chunk... - Out.write(ChunkPtr, LastPtr-ChunkPtr); + Out.write((char*)ChunkPtr, LastPtr-ChunkPtr); } Out.flush(); diff --git a/lib/Bytecode/Writer/WriterInternals.h b/lib/Bytecode/Writer/WriterInternals.h index 8a929870f4..10170305b3 100644 --- a/lib/Bytecode/Writer/WriterInternals.h +++ b/lib/Bytecode/Writer/WriterInternals.h @@ -20,10 +20,10 @@ #include <deque> class BytecodeWriter { - deque<unsigned char> &Out; + std::deque<unsigned char> &Out; SlotCalculator Table; public: - BytecodeWriter(deque<unsigned char> &o, const Module *M); + BytecodeWriter(std::deque<unsigned char> &o, const Module *M); protected: void outputConstants(bool isMethod); @@ -51,12 +51,12 @@ private : // class BytecodeBlock { unsigned Loc; - deque<unsigned char> &Out; + std::deque<unsigned char> &Out; BytecodeBlock(const BytecodeBlock &); // do not implement void operator=(const BytecodeBlock &); // do not implement public: - inline BytecodeBlock(unsigned ID, deque<unsigned char> &o) : Out(o) { + inline BytecodeBlock(unsigned ID, std::deque<unsigned char> &o) : Out(o) { output(ID, Out); output((unsigned)0, Out); // Reserve the space for the block size... Loc = Out.size(); |