X87: harmony-scoping: make assignment to 'const' a late error.
authorChunyang Dai <chunyang.dai@intel.com>
Thu, 27 Nov 2014 07:19:47 +0000 (15:19 +0800)
committerWeiliang Lin <weiliang.lin@intel.com>
Thu, 27 Nov 2014 07:10:51 +0000 (07:10 +0000)
port 6ac4de87a8b01500b066a3e401e921d2d84b42db

original commit message:
  harmony-scoping: make assignment to 'const' a late error.

  Per TC39 Nov 2014 decision. This patch also changes behavior for "legacy const":
  assignments to sloppy const in strict mode is now also a type error. This fixes
  v8:2243 and also brings us in compliance with other engines re assignment to function
  names (see updated webkit test), but might have bigger implications. That change can
  easily be reverted by changing Variable::IsSignallingAssignmentToConst.

BUG=
R=dslomov@chromium.org, weiliang.lin@intel.com

Review URL: https://codereview.chromium.org/763033002

Patch from Chunyang Dai <chunyang.dai@intel.com>.

Cr-Commit-Position: refs/heads/master@{#25532}

src/x87/full-codegen-x87.cc

index fa9088cdf549e3c0e4220fb6ce3581552f648dc6..0f292cc49beec7d05ae333aaa198f9cb984cbeb5 100644 (file)
@@ -2562,7 +2562,6 @@ void FullCodeGenerator::EmitVariableAssignment(Variable* var,
     __ CallRuntime(Runtime::kThrowReferenceError, 1);
     __ bind(&assign);
     EmitStoreToStackLocalOrContextSlot(var, location);
-
   } else if (!var->is_const_mode() || op == Token::INIT_CONST) {
     if (var->IsLookupSlot()) {
       // Assignment to var.
@@ -2584,8 +2583,9 @@ void FullCodeGenerator::EmitVariableAssignment(Variable* var,
       }
       EmitStoreToStackLocalOrContextSlot(var, location);
     }
+  } else if (IsSignallingAssignmentToConst(var, op, strict_mode())) {
+    __ CallRuntime(Runtime::kThrowConstAssignError, 0);
   }
-  // Non-initializing assignments to consts are ignored.
 }