Index: runtime/vm/kernel_binary.cc |
diff --git a/runtime/vm/kernel_binary.cc b/runtime/vm/kernel_binary.cc |
index 1f56c09be4e28396926cbec1b9673725f9df2d19..ec71cd838da1887d5715c868118aa40ec8a3ae88 100644 |
--- a/runtime/vm/kernel_binary.cc |
+++ b/runtime/vm/kernel_binary.cc |
@@ -3,12 +3,11 @@ |
// BSD-style license that can be found in the LICENSE file. |
#if !defined(DART_PRECOMPILED_RUNTIME) |
-#include <map> |
-#include <vector> |
- |
#include "platform/globals.h" |
#include "vm/flags.h" |
+#include "vm/growable_array.h" |
#include "vm/kernel.h" |
+#include "vm/kernel_to_il.h" |
#include "vm/os.h" |
#if defined(DEBUG) |
@@ -153,47 +152,47 @@ class BlockStack { |
BlockStack() : current_count_(0) {} |
void EnterScope() { |
- variable_count_.push_back(current_count_); |
+ variable_count_.Add(current_count_); |
current_count_ = 0; |
} |
void LeaveScope() { |
- variables_.resize(variables_.size() - current_count_); |
- current_count_ = variable_count_[variable_count_.size() - 1]; |
- variable_count_.pop_back(); |
+ variables_.TruncateTo(variables_.length() - current_count_); |
+ current_count_ = variable_count_[variable_count_.length() - 1]; |
+ variable_count_.RemoveLast(); |
} |
T* Lookup(int index) { |
- ASSERT(static_cast<unsigned>(index) < variables_.size()); |
+ ASSERT(index < variables_.length()); |
return variables_[index]; |
} |
void Push(T* v) { |
- variables_.push_back(v); |
+ variables_.Add(v); |
current_count_++; |
} |
void Push(List<T>* decl) { |
for (int i = 0; i < decl->length(); i++) { |
- variables_.push_back(decl[i]); |
+ variables_.Add(decl[i]); |
current_count_++; |
} |
} |
void Pop(T* decl) { |
- variables_.resize(variables_.size() - 1); |
+ variables_.RemoveLast(); |
current_count_--; |
} |
void Pop(List<T>* decl) { |
- variables_.resize(variables_.size() - decl->length()); |
+ variables_.TruncateTo(variables_.length() - decl->length()); |
current_count_ -= decl->length(); |
} |
private: |
int current_count_; |
- std::vector<T*> variables_; |
- std::vector<int> variable_count_; |
+ GrowableArray<T*> variables_; |
+ GrowableArray<int> variable_count_; |
}; |
@@ -203,29 +202,35 @@ class BlockMap { |
BlockMap() : current_count_(0), stack_height_(0) {} |
void EnterScope() { |
- variable_count_.push_back(current_count_); |
+ variable_count_.Add(current_count_); |
current_count_ = 0; |
} |
void LeaveScope() { |
stack_height_ -= current_count_; |
- current_count_ = variable_count_[variable_count_.size() - 1]; |
- variable_count_.pop_back(); |
+ current_count_ = variable_count_[variable_count_.length() - 1]; |
+ variable_count_.RemoveLast(); |
} |
int Lookup(T* object) { |
- ASSERT(variables_.find(object) != variables_.end()); |
- if (variables_.find(object) == variables_.end()) FATAL("lookup failure"); |
- return variables_[object]; |
+ typename Map<T, int>::Pair* result = variables_.LookupPair(object); |
+ ASSERT(result != NULL); |
+ if (result == NULL) FATAL("lookup failure"); |
+ return RawPointerKeyValueTrait<T, int>::ValueOf(*result); |
} |
void Push(T* v) { |
+ ASSERT(variables_.LookupPair(v) == NULL); |
int index = stack_height_++; |
- variables_[v] = index; |
+ variables_.Insert(v, index); |
current_count_++; |
} |
- void Set(T* v, int index) { variables_[v] = index; } |
+ void Set(T* v, int index) { |
+ typename Map<T, int>::Pair* entry = variables_.LookupPair(v); |
+ ASSERT(entry != NULL); |
+ entry->value = index; |
+ } |
void Push(List<T>* decl) { |
for (int i = 0; i < decl->length(); i++) { |
@@ -241,8 +246,8 @@ class BlockMap { |
private: |
int current_count_; |
int stack_height_; |
- std::map<T*, int> variables_; |
- std::vector<int> variable_count_; |
+ Map<T, int> variables_; |
+ GrowableArray<int> variable_count_; |
}; |