Revision: 11890
Author: [email protected]
Date: Wed Jun 20 12:36:29 2012
Log: Back port r11886: Fix GC bug with missing handle. Bug=133618
Review URL: https://chromiumcodereview.appspot.com/10584030
http://code.google.com/p/v8/source/detail?r=11890
Modified:
/branches/3.11/src/arm/lithium-codegen-arm.cc
/branches/3.11/src/ia32/lithium-codegen-ia32.cc
/branches/3.11/src/mips/lithium-codegen-mips.cc
/branches/3.11/src/version.cc
/branches/3.11/src/x64/lithium-codegen-x64.cc
=======================================
--- /branches/3.11/src/arm/lithium-codegen-arm.cc Wed Jun 13 04:51:58 2012
+++ /branches/3.11/src/arm/lithium-codegen-arm.cc Wed Jun 20 12:36:29 2012
@@ -2594,15 +2594,15 @@
} else {
// Negative lookup.
// Check prototypes.
- HeapObject* current = HeapObject::cast((*type)->prototype());
+ Handle<HeapObject> current(HeapObject::cast((*type)->prototype()));
Heap* heap = type->GetHeap();
- while (current != heap->null_value()) {
- Handle<HeapObject> link(current);
- __ LoadHeapObject(result, link);
+ while (*current != heap->null_value()) {
+ __ LoadHeapObject(result, current);
__ ldr(result, FieldMemOperand(result, HeapObject::kMapOffset));
- __ cmp(result, Operand(Handle<Map>(JSObject::cast(current)->map())));
+ __ cmp(result, Operand(Handle<Map>(current->map())));
DeoptimizeIf(ne, env);
- current = HeapObject::cast(current->map()->prototype());
+ current =
+
Handle<HeapObject>(HeapObject::cast(current->map()->prototype()));
}
__ LoadRoot(result, Heap::kUndefinedValueRootIndex);
}
=======================================
--- /branches/3.11/src/ia32/lithium-codegen-ia32.cc Wed Jun 13 04:51:58 2012
+++ /branches/3.11/src/ia32/lithium-codegen-ia32.cc Wed Jun 20 12:36:29 2012
@@ -2325,15 +2325,15 @@
} else {
// Negative lookup.
// Check prototypes.
- HeapObject* current = HeapObject::cast((*type)->prototype());
+ Handle<HeapObject> current(HeapObject::cast((*type)->prototype()));
Heap* heap = type->GetHeap();
- while (current != heap->null_value()) {
- Handle<HeapObject> link(current);
- __ LoadHeapObject(result, link);
+ while (*current != heap->null_value()) {
+ __ LoadHeapObject(result, current);
__ cmp(FieldOperand(result, HeapObject::kMapOffset),
- Handle<Map>(JSObject::cast(current)->map()));
+ Handle<Map>(current->map()));
DeoptimizeIf(not_equal, env);
- current = HeapObject::cast(current->map()->prototype());
+ current =
+
Handle<HeapObject>(HeapObject::cast(current->map()->prototype()));
}
__ mov(result, factory()->undefined_value());
}
=======================================
--- /branches/3.11/src/mips/lithium-codegen-mips.cc Wed Jun 13 04:51:58 2012
+++ /branches/3.11/src/mips/lithium-codegen-mips.cc Wed Jun 20 12:36:29 2012
@@ -2338,15 +2338,14 @@
} else {
// Negative lookup.
// Check prototypes.
- HeapObject* current = HeapObject::cast((*type)->prototype());
+ Handle<HeapObject> current(HeapObject::cast((*type)->prototype()));
Heap* heap = type->GetHeap();
- while (current != heap->null_value()) {
- Handle<HeapObject> link(current);
- __ LoadHeapObject(result, link);
+ while (*current != heap->null_value()) {
+ __ LoadHeapObject(result, current);
__ lw(result, FieldMemOperand(result, HeapObject::kMapOffset));
- DeoptimizeIf(ne, env,
- result, Operand(Handle<Map>(JSObject::cast(current)->map())));
- current = HeapObject::cast(current->map()->prototype());
+ DeoptimizeIf(ne, env, result, Operand(Handle<Map>(current->map())));
+ current =
+
Handle<HeapObject>(HeapObject::cast(current->map()->prototype()));
}
__ LoadRoot(result, Heap::kUndefinedValueRootIndex);
}
=======================================
--- /branches/3.11/src/version.cc Wed Jun 20 04:09:42 2012
+++ /branches/3.11/src/version.cc Wed Jun 20 12:36:29 2012
@@ -35,7 +35,7 @@
#define MAJOR_VERSION 3
#define MINOR_VERSION 11
#define BUILD_NUMBER 10
-#define PATCH_LEVEL 9
+#define PATCH_LEVEL 10
// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
#define IS_CANDIDATE_VERSION 0
=======================================
--- /branches/3.11/src/x64/lithium-codegen-x64.cc Wed Jun 13 04:51:58 2012
+++ /branches/3.11/src/x64/lithium-codegen-x64.cc Wed Jun 20 12:36:29 2012
@@ -2218,15 +2218,15 @@
} else {
// Negative lookup.
// Check prototypes.
- HeapObject* current = HeapObject::cast((*type)->prototype());
+ Handle<HeapObject> current(HeapObject::cast((*type)->prototype()));
Heap* heap = type->GetHeap();
- while (current != heap->null_value()) {
- Handle<HeapObject> link(current);
- __ LoadHeapObject(result, link);
+ while (*current != heap->null_value()) {
+ __ LoadHeapObject(result, current);
__ Cmp(FieldOperand(result, HeapObject::kMapOffset),
- Handle<Map>(JSObject::cast(current)->map()));
+ Handle<Map>(current->map()));
DeoptimizeIf(not_equal, env);
- current = HeapObject::cast(current->map()->prototype());
+ current =
+
Handle<HeapObject>(HeapObject::cast(current->map()->prototype()));
}
__ LoadRoot(result, Heap::kUndefinedValueRootIndex);
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev