
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_lang_reflect_Proxy$ClassFactory__
#define __java_lang_reflect_Proxy$ClassFactory__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>


class java::lang::reflect::Proxy$ClassFactory : public ::java::lang::Object
{

public: // actually package-private
  Proxy$ClassFactory(::java::lang::reflect::Proxy$ProxyData *);
private:
  void emitMethod(jint, JArray< ::java::lang::Class * > *);
public: // actually package-private
  ::java::lang::Class * generate(::java::lang::ClassLoader *);
private:
  void putU1(jint);
  void putU2(jint);
  void putU4(jint);
  void putConst(jint);
  void putLoad(jint, ::java::lang::Class *);
  ::java::lang::String * wrapper(::java::lang::Class *);
  jchar utf8Info(::java::lang::String *);
  jchar classInfo(::java::lang::String *);
  jchar classInfo(::java::lang::Class *);
  jchar refInfo(jbyte, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *);
  jchar nameAndTypeInfo(::java::lang::String *, ::java::lang::String *);
  ::java::lang::String * toUtf8(::java::lang::String *);
  jchar poolIndex(::java::lang::String *);
  static const jbyte FIELD = 1;
  static const jbyte METHOD = 2;
  static const jbyte INTERFACE = 3;
  static ::java::lang::String * CTOR_SIG;
  static ::java::lang::String * INVOKE_SIG;
  static const jchar ACONST_NULL = 1;
  static const jchar ICONST_0 = 3;
  static const jchar BIPUSH = 16;
  static const jchar SIPUSH = 17;
  static const jchar ILOAD = 21;
  static const jchar ILOAD_0 = 26;
  static const jchar ALOAD_0 = 42;
  static const jchar ALOAD_1 = 43;
  static const jchar AALOAD = 50;
  static const jchar AASTORE = 83;
  static const jchar DUP = 89;
  static const jchar DUP_X1 = 90;
  static const jchar SWAP = 95;
  static const jchar IRETURN = 172;
  static const jchar LRETURN = 173;
  static const jchar FRETURN = 174;
  static const jchar DRETURN = 175;
  static const jchar ARETURN = 176;
  static const jchar RETURN = 177;
  static const jchar GETSTATIC = 178;
  static const jchar GETFIELD = 180;
  static const jchar INVOKEVIRTUAL = 182;
  static const jchar INVOKESPECIAL = 183;
  static const jchar INVOKEINTERFACE = 185;
  static const jchar NEW = 187;
  static const jchar ANEWARRAY = 189;
  static const jchar ATHROW = 191;
  static const jchar CHECKCAST = 192;
  ::java::lang::StringBuffer * __attribute__((aligned(__alignof__( ::java::lang::Object)))) pool;
  ::java::lang::StringBuffer * stream;
  ::java::util::Map * poolEntries;
  ::java::lang::String * qualName;
  JArray< ::java::lang::reflect::Method * > * methods;
public:
  static ::java::lang::Class class$;
};

#endif // __java_lang_reflect_Proxy$ClassFactory__
