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

#ifndef __java_lang_VMCompiler__
#define __java_lang_VMCompiler__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
        namespace hash
        {
            class MD5;
        }
      }
    }
  }
  namespace java
  {
    namespace security
    {
        class ProtectionDomain;
    }
  }
}

class java::lang::VMCompiler : public ::java::lang::Object
{

public:
  static jboolean precompiles();
private:
  VMCompiler();
  static ::java::lang::Class * loadSharedLibrary(::java::lang::ClassLoader *, ::java::lang::String *, ::java::security::ProtectionDomain *, ::java::lang::String *);
public:
  static ::java::lang::Class * compileClass(::java::lang::ClassLoader *, ::java::lang::String *, JArray< jbyte > *, jint, jint, ::java::security::ProtectionDomain *);
  static jboolean compileClass(::java::lang::Class *);
  static jboolean compileClasses(::java::lang::String *);
  static ::java::lang::Object * command(::java::lang::Object *);
  static void enable();
  static void disable();
  static jboolean useCompiler;
  static jboolean canUseCompiler;
  static ::java::lang::String * gcjJitCompiler;
  static ::java::lang::String * gcjJitCompilerOptions;
  static ::java::lang::String * gcjJitTmpdir;
private:
  static ::java::util::WeakHashMap * sharedHelperMap;
  static ::java::util::Vector * precompiledMapFiles;
  static ::gnu::java::security::hash::MD5 * md5Digest;
public:
  static ::java::lang::Class class$;
};

#endif // __java_lang_VMCompiler__
