Index: runtime/vm/precompiler.h |
diff --git a/runtime/vm/precompiler.h b/runtime/vm/precompiler.h |
index 38e16fefd32dd9988c35a995b53b59abe1bb3b32..e5d4742e7d2f8f4ad0f9181363df0125e7294048 100644 |
--- a/runtime/vm/precompiler.h |
+++ b/runtime/vm/precompiler.h |
@@ -259,13 +259,47 @@ class InstanceKeyValueTrait { |
typedef DirectChainedHashMap<InstanceKeyValueTrait> InstanceSet; |
+struct FieldTypePair { |
+ // Typedefs needed for the DirectChainedHashMap template. |
+ typedef const Field* Key; |
+ typedef intptr_t Value; |
+ typedef FieldTypePair Pair; |
+ |
+ static Key KeyOf(Pair kv) { return kv.field_; } |
+ |
+ static Value ValueOf(Pair kv) { return kv.cid_; } |
+ |
+ static inline intptr_t Hashcode(Key key) { |
+ return key->token_pos().value(); |
+ } |
+ |
+ static inline bool IsKeyEqual(Pair pair, Key key) { |
+ return pair.field_->raw() == key->raw(); |
+ } |
+ |
+ FieldTypePair(const Field* f, intptr_t cid) : field_(f), cid_(cid) { } |
+ |
+ FieldTypePair() : field_(NULL), cid_(-1) { } |
+ |
+ void Print() const; |
+ |
+ const Field* field_; |
+ intptr_t cid_; |
+}; |
+ |
+typedef DirectChainedHashMap<FieldTypePair> FieldTypeMap; |
+ |
+ |
class Precompiler : public ValueObject { |
public: |
static RawError* CompileAll( |
Dart_QualifiedFunctionName embedder_entry_points[], |
bool reset_fields); |
- static RawError* CompileFunction(Thread* thread, const Function& function); |
+ static RawError* CompileFunction(Thread* thread, |
+ Zone* zone, |
+ const Function& function, |
+ FieldTypeMap* field_type_map = NULL); |
static RawObject* EvaluateStaticInitializer(const Field& field); |
static RawObject* ExecuteOnce(SequenceNode* fragment); |
@@ -276,7 +310,6 @@ class Precompiler : public ValueObject { |
private: |
Precompiler(Thread* thread, bool reset_fields); |
- |
void DoCompileAll(Dart_QualifiedFunctionName embedder_entry_points[]); |
void ClearAllCode(); |
void AddRoots(Dart_QualifiedFunctionName embedder_entry_points[]); |
@@ -321,6 +354,7 @@ class Precompiler : public ValueObject { |
void CollectDynamicFunctionNames(); |
void PrecompileStaticInitializers(); |
+ void PrecompileConstructors(); |
template<typename T> |
class Visitor : public ValueObject { |
@@ -369,6 +403,7 @@ class Precompiler : public ValueObject { |
TypeArgumentsSet typeargs_to_retain_; |
AbstractTypeSet types_to_retain_; |
InstanceSet consts_to_retain_; |
+ FieldTypeMap field_type_map_; |
Error& error_; |
}; |