Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(306)

Unified Diff: src/compiler/ast-graph-builder.cc

Issue 1015683002: [turbofan] Fix C++ evaluation order in AstGraphBuilder. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | test/mjsunit/regress/regress-crbug-467531.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler/ast-graph-builder.cc
diff --git a/src/compiler/ast-graph-builder.cc b/src/compiler/ast-graph-builder.cc
index 63696e45cd2e7f2dbe932a2ac415e1c76e30053e..de01e24ab8fd226c59fe0538d72e2a3fd0313eab 100644
--- a/src/compiler/ast-graph-builder.cc
+++ b/src/compiler/ast-graph-builder.cc
@@ -1307,9 +1307,10 @@ void AstGraphBuilder::VisitTryFinallyStatement(TryFinallyStatement* stmt) {
// The result value, dispatch token and message is expected on the operand
// stack (this is in sync with FullCodeGenerator::EnterFinallyBlock).
+ Node* message = BuildLoadExternal(message_object, kMachAnyTagged);
environment()->Push(token); // TODO(mstarzinger): Cook token!
environment()->Push(result);
- environment()->Push(BuildLoadExternal(message_object, kMachAnyTagged));
+ environment()->Push(message);
// Evaluate the finally-block.
Visit(stmt->finally_block());
@@ -1317,9 +1318,10 @@ void AstGraphBuilder::VisitTryFinallyStatement(TryFinallyStatement* stmt) {
// The result value, dispatch token and message is restored from the operand
// stack (this is in sync with FullCodeGenerator::ExitFinallyBlock).
- BuildStoreExternal(message_object, kMachAnyTagged, environment()->Pop());
+ message = environment()->Pop();
result = environment()->Pop();
token = environment()->Pop(); // TODO(mstarzinger): Uncook token!
+ BuildStoreExternal(message_object, kMachAnyTagged, message);
// Dynamic dispatch after the finally-block.
commands->ApplyDeferredCommands(token, result);
@@ -1650,8 +1652,9 @@ void AstGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
environment()->Push(literal); // Duplicate receiver.
VisitForValue(property->key());
- environment()->Push(BuildToName(environment()->Pop(),
- expr->GetIdForProperty(property_index)));
+ Node* name = BuildToName(environment()->Pop(),
+ expr->GetIdForProperty(property_index));
+ environment()->Push(name);
// TODO(mstarzinger): For ObjectLiteral::Property::PROTOTYPE the key should
// not be on the operand stack while the value is being evaluated. Come up
// with a repro for this and fix it. Also find a nice way to do so. :)
@@ -2475,7 +2478,8 @@ Node* AstGraphBuilder::BuildPatchReceiverToGlobalProxy(Node* receiver) {
Node* check = NewNode(javascript()->StrictEqual(), receiver, undefined);
receiver_check.If(check);
receiver_check.Then();
- environment()->Push(BuildLoadGlobalProxy());
+ Node* proxy = BuildLoadGlobalProxy();
+ environment()->Push(proxy);
receiver_check.Else();
environment()->Push(receiver);
receiver_check.End();
@@ -2574,7 +2578,8 @@ Node* AstGraphBuilder::BuildHoleCheckThrow(Node* value, Variable* variable,
Node* check = NewNode(javascript()->StrictEqual(), value, the_hole);
hole_check.If(check);
hole_check.Then();
- environment()->Push(BuildThrowReferenceError(variable, bailout_id));
+ Node* error = BuildThrowReferenceError(variable, bailout_id);
+ environment()->Push(error);
hole_check.Else();
environment()->Push(not_hole);
hole_check.End();
« no previous file with comments | « no previous file | test/mjsunit/regress/regress-crbug-467531.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698