blob: 24889e8176b8de10903071d6996b57c82332ade1 [file] [log] [blame]
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -07001// Copyright 2011 Google Inc. All Rights Reserved.
2
3#ifndef ART_SRC_COMPILER_H_
4#define ART_SRC_COMPILER_H_
5
Ian Rogers2c8f6532011-09-02 17:16:34 -07006#include "constants.h"
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -07007#include "dex_file.h"
Ian Rogers2c8f6532011-09-02 17:16:34 -07008#include "jni_compiler.h"
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -07009#include "object.h"
10
11namespace art {
12
13class Compiler {
14 public:
Shih-wei Liaoc486c112011-09-13 16:43:52 -070015 explicit Compiler(InstructionSet insns);
Ian Rogers2c8f6532011-09-02 17:16:34 -070016
Brian Carlstrom8a487412011-08-29 20:08:52 -070017 // Compile all Methods of all the Classes of all the DexFiles that are part of a ClassLoader.
18 void CompileAll(const ClassLoader* class_loader);
19
20 // Compile a single Method
21 void CompileOne(Method* method);
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -070022
23 private:
24 // Attempt to resolve all type, methods, fields, and strings
25 // referenced from code in the dex file following PathClassLoader
26 // ordering semantics.
27 void Resolve(const ClassLoader* class_loader);
28 void ResolveDexFile(const ClassLoader* class_loader, const DexFile& dex_file);
29
Brian Carlstrom83db7722011-08-26 17:32:56 -070030 void Compile(const ClassLoader* class_loader);
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -070031 void CompileDexFile(const ClassLoader* class_loader, const DexFile& dex_file);
32 void CompileClass(Class* klass);
33 void CompileMethod(Method* klass);
Brian Carlstrom83db7722011-08-26 17:32:56 -070034
35 // After compiling, walk all the DexCaches and set the code and
Brian Carlstrom9cc262e2011-08-28 12:45:30 -070036 // method pointers of CodeAndDirectMethods entries in the DexCaches.
37 void SetCodeAndDirectMethods(const ClassLoader* class_loader);
Brian Carlstrom8a487412011-08-29 20:08:52 -070038 void SetCodeAndDirectMethodsDexFile(const DexFile& dex_file);
Ian Rogers2c8f6532011-09-02 17:16:34 -070039
40 InstructionSet instruction_set_;
41 JniCompiler jni_compiler_;
Shih-wei Liaoc486c112011-09-13 16:43:52 -070042 ByteArray* abstract_method_error_stub_;
Ian Rogers2c8f6532011-09-02 17:16:34 -070043
44 DISALLOW_COPY_AND_ASSIGN(Compiler);
Brian Carlstrom9ea1cb12011-08-24 23:18:18 -070045};
46
47} // namespace art
48
49#endif // ART_SRC_COMPILER_H_