Move rest of code related blobs from Method to oat
Change-Id: I55041b564ab65317c8b1f863005f20ba650a0322
diff --git a/src/compiler.h b/src/compiler.h
index 0f6f02f..6059a2a 100644
--- a/src/compiler.h
+++ b/src/compiler.h
@@ -3,30 +3,37 @@
#ifndef ART_SRC_COMPILER_H_
#define ART_SRC_COMPILER_H_
+#include "compiled_method.h"
#include "constants.h"
#include "dex_file.h"
#include "jni_compiler.h"
+#include "oat_file.h"
#include "object.h"
#include "runtime.h"
-
-int oatVRegOffsetFromMethod(art::Method* method, int reg);
+#include "unordered_map.h"
namespace art {
class Compiler {
public:
- explicit Compiler(InstructionSet insns);
+ explicit Compiler(InstructionSet instruction_set);
+
+ ~Compiler();
// Compile all Methods of all the Classes of all the DexFiles that are part of a ClassLoader.
void CompileAll(const ClassLoader* class_loader);
// Compile a single Method
- void CompileOne(Method* method);
+ void CompileOne(const Method* method);
void SetVerbose(bool verbose) {
verbose_ = verbose;
}
+ InstructionSet GetInstructionSet() const {
+ return instruction_set_;
+ }
+
bool IsVerbose() const {
return verbose_;
}
@@ -34,10 +41,14 @@
// Stub to throw AbstractMethodError
static ByteArray* CreateAbstractMethodErrorStub(InstructionSet instruction_set);
+
// Generate the trampoline that's invoked by unresolved direct methods
static ByteArray* CreateResolutionStub(InstructionSet instruction_set,
Runtime::TrampolineType type);
+ const CompiledMethod* GetCompiledMethod(const Method* method) const;
+ const CompiledInvokeStub* GetCompiledInvokeStub(const Method* method) const;
+
private:
// Attempt to resolve all type, methods, fields, and strings
// referenced from code in the dex file following PathClassLoader
@@ -53,8 +64,8 @@
void Compile(const ClassLoader* class_loader);
void CompileDexFile(const ClassLoader* class_loader, const DexFile& dex_file);
- void CompileClass(Class* klass);
- void CompileMethod(Method* klass);
+ void CompileClass(const Class* klass);
+ void CompileMethod(const Method* method);
// After compiling, walk all the DexCaches and set the code and
// method pointers of CodeAndDirectMethods entries in the DexCaches.
@@ -64,6 +75,12 @@
InstructionSet instruction_set_;
JniCompiler jni_compiler_;
+ typedef std::tr1::unordered_map<const Method*, CompiledMethod*, ObjectIdentityHash> MethodTable;
+ MethodTable compiled_methods_;
+
+ typedef std::tr1::unordered_map<const Method*, CompiledInvokeStub*, ObjectIdentityHash> InvokeStubTable;
+ InvokeStubTable compiled_invoke_stubs_;
+
bool verbose_;
DISALLOW_COPY_AND_ASSIGN(Compiler);