Revision: 13250
Author: [email protected]
Date: Thu Dec 20 01:47:09 2012
Log: Refactoring only: Move stuff to DeoptimizerData where it belongs.
Use "for".
Review URL: https://codereview.chromium.org/11637034
http://code.google.com/p/v8/source/detail?r=13250
Modified:
/branches/bleeding_edge/src/deoptimizer.cc
/branches/bleeding_edge/src/deoptimizer.h
=======================================
--- /branches/bleeding_edge/src/deoptimizer.cc Tue Dec 18 23:36:38 2012
+++ /branches/bleeding_edge/src/deoptimizer.cc Thu Dec 20 01:47:09 2012
@@ -79,6 +79,36 @@
#endif
+Code* DeoptimizerData::FindDeoptimizingCode(Address addr) {
+ for (DeoptimizingCodeListNode* node = deoptimizing_code_list_;
+ node != NULL;
+ node = node->next()) {
+ if (node->code()->contains(addr)) return *node->code();
+ }
+ return NULL;
+}
+
+
+void DeoptimizerData::RemoveDeoptimizingCode(Code* code) {
+ for (DeoptimizingCodeListNode *prev = NULL, *cur =
deoptimizing_code_list_;
+ cur != NULL;
+ prev = cur, cur = cur->next()) {
+ if (*cur->code() == code) {
+ if (prev == NULL) {
+ deoptimizing_code_list_ = cur->next();
+ } else {
+ prev->set_next(cur->next());
+ }
+ delete cur;
+ return;
+ }
+ }
+ // Deoptimizing code is removed through weak callback. Each object is
expected
+ // to be removed once and only once.
+ UNREACHABLE();
+}
+
+
// We rely on this function not causing a GC. It is called from generated
code
// without having a real stack frame in place.
Deoptimizer* Deoptimizer::New(JSFunction* function,
@@ -426,16 +456,17 @@
}
-void Deoptimizer::HandleWeakDeoptimizedCode(
- v8::Persistent<v8::Value> obj, void* data) {
+void Deoptimizer::HandleWeakDeoptimizedCode(v8::Persistent<v8::Value> obj,
+ void* parameter) {
DeoptimizingCodeListNode* node =
- reinterpret_cast<DeoptimizingCodeListNode*>(data);
- RemoveDeoptimizingCode(*node->code());
+ reinterpret_cast<DeoptimizingCodeListNode*>(parameter);
+ DeoptimizerData* data = Isolate::Current()->deoptimizer_data();
+ data->RemoveDeoptimizingCode(*node->code());
#ifdef DEBUG
- node = Isolate::Current()->deoptimizer_data()->deoptimizing_code_list_;
- while (node != NULL) {
- ASSERT(node != reinterpret_cast<DeoptimizingCodeListNode*>(data));
- node = node->next();
+ for (DeoptimizingCodeListNode* current = data->deoptimizing_code_list_;
+ current != NULL;
+ current = current->next()) {
+ ASSERT(current != node);
}
#endif
}
@@ -519,7 +550,7 @@
}
}
} else if (type == LAZY) {
- compiled_code_ = FindDeoptimizingCodeFromAddress(from);
+ compiled_code_ =
isolate->deoptimizer_data()->FindDeoptimizingCode(from);
if (compiled_code_ == NULL) {
compiled_code_ =
static_cast<Code*>(isolate->heap()->FindCodeObject(from));
@@ -1532,44 +1563,6 @@
data->lazy_deoptimization_entry_code_entries_ = entry_count;
}
}
-
-
-Code* Deoptimizer::FindDeoptimizingCodeFromAddress(Address addr) {
- DeoptimizingCodeListNode* node =
- Isolate::Current()->deoptimizer_data()->deoptimizing_code_list_;
- while (node != NULL) {
- if (node->code()->contains(addr)) return *node->code();
- node = node->next();
- }
- return NULL;
-}
-
-
-void Deoptimizer::RemoveDeoptimizingCode(Code* code) {
- DeoptimizerData* data = Isolate::Current()->deoptimizer_data();
- ASSERT(data->deoptimizing_code_list_ != NULL);
- // Run through the code objects to find this one and remove it.
- DeoptimizingCodeListNode* prev = NULL;
- DeoptimizingCodeListNode* current = data->deoptimizing_code_list_;
- while (current != NULL) {
- if (*current->code() == code) {
- // Unlink from list. If prev is NULL we are looking at the first
element.
- if (prev == NULL) {
- data->deoptimizing_code_list_ = current->next();
- } else {
- prev->set_next(current->next());
- }
- delete current;
- return;
- }
- // Move to next in list.
- prev = current;
- current = current->next();
- }
- // Deoptimizing code is removed through weak callback. Each object is
expected
- // to be removed once and only once.
- UNREACHABLE();
-}
void Deoptimizer::ReplaceCodeForRelatedFunctions(JSFunction* function,
=======================================
--- /branches/bleeding_edge/src/deoptimizer.h Tue Dec 18 08:25:45 2012
+++ /branches/bleeding_edge/src/deoptimizer.h Thu Dec 20 01:47:09 2012
@@ -107,6 +107,9 @@
void Iterate(ObjectVisitor* v);
#endif
+ Code* FindDeoptimizingCode(Address addr);
+ void RemoveDeoptimizingCode(Code* code);
+
private:
int eager_deoptimization_entry_code_entries_;
int lazy_deoptimization_entry_code_entries_;
@@ -365,8 +368,6 @@
// Weak handle callback for deoptimizing code objects.
static void HandleWeakDeoptimizedCode(
v8::Persistent<v8::Value> obj, void* data);
- static Code* FindDeoptimizingCodeFromAddress(Address addr);
- static void RemoveDeoptimizingCode(Code* code);
// Deoptimize function assuming that function->next_function_link()
points
// to a list that contains all functions that share the same optimized
code.
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev