public byte[] toByteArray(XCodeGen codeGen, XCompilerOptions options){
		codes.add(codeGen);
		for(int i=0; i<codes.size(); i++){
			XCodeGen code = codes.get(i);
			baos = new ByteArrayOutputStream();
			code.getCode(this, options);
			bytes.add(baos.toByteArray());
		}
		baos = new ByteArrayOutputStream();
		DataOutputStream dos = new DataOutputStream(baos);
		try{
			dos.writeShort(ints.size());
			for(Integer i:ints){
				dos.writeInt(i);
			}
			dos.writeShort(longs.size());
			for(Long l:longs){
				dos.writeLong(l);
			}
			dos.writeShort(floats.size());
			for(Float f:floats){
				dos.writeFloat(f);
			}
			dos.writeShort(doubles.size());
			for(Double d:doubles){
				dos.writeDouble(d);
			}
			dos.writeShort(strings.size());
			for(String s:strings){
				dos.writeUTF(s);
			}
			dos.writeShort(bytes.size());
			for(byte[] b:bytes){
				if(b.length>=65535)
					throw new IllegalStateException();
				dos.writeShort(b.length);
				dos.write(b);
			}
		}catch(IOException e){
			throw new AssertionError();
		}
		return baos.toByteArray();
	}