Fix crash in arm conditional expression code generation.
Review URL: http://codereview.chromium.org/155234 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2399 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
8f73ae0325
commit
0be6a72cc1
@ -2424,13 +2424,23 @@ void CodeGenerator::VisitConditional(Conditional* node) {
|
|||||||
JumpTarget exit;
|
JumpTarget exit;
|
||||||
LoadConditionAndSpill(node->condition(), NOT_INSIDE_TYPEOF,
|
LoadConditionAndSpill(node->condition(), NOT_INSIDE_TYPEOF,
|
||||||
&then, &else_, true);
|
&then, &else_, true);
|
||||||
Branch(false, &else_);
|
if (frame_ != NULL) {
|
||||||
then.Bind();
|
Branch(false, &else_);
|
||||||
LoadAndSpill(node->then_expression(), typeof_state());
|
}
|
||||||
exit.Jump();
|
if (frame_ != NULL || then.is_linked()) {
|
||||||
else_.Bind();
|
then.Bind();
|
||||||
LoadAndSpill(node->else_expression(), typeof_state());
|
LoadAndSpill(node->then_expression(), typeof_state());
|
||||||
exit.Bind();
|
}
|
||||||
|
if (frame_ != NULL) {
|
||||||
|
exit.Jump();
|
||||||
|
}
|
||||||
|
if (else_.is_linked()) {
|
||||||
|
else_.Bind();
|
||||||
|
LoadAndSpill(node->else_expression(), typeof_state());
|
||||||
|
}
|
||||||
|
if (exit.is_linked()) {
|
||||||
|
exit.Bind();
|
||||||
|
}
|
||||||
ASSERT(frame_->height() == original_height + 1);
|
ASSERT(frame_->height() == original_height + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user