| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <cmath> | 5 #include <cmath> |
| 6 | 6 |
| 7 #include "src/allocation.h" | 7 #include "src/allocation.h" |
| 8 #include "src/base/logging.h" | 8 #include "src/base/logging.h" |
| 9 #include "src/conversions-inl.h" | 9 #include "src/conversions-inl.h" |
| 10 #include "src/conversions.h" | 10 #include "src/conversions.h" |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 bool use_strict_found = statement.IsUseStrictLiteral(); | 255 bool use_strict_found = statement.IsUseStrictLiteral(); |
| 256 bool use_strong_found = | 256 bool use_strong_found = |
| 257 statement.IsUseStrongLiteral() && allow_strong_mode(); | 257 statement.IsUseStrongLiteral() && allow_strong_mode(); |
| 258 | 258 |
| 259 if (use_strict_found) { | 259 if (use_strict_found) { |
| 260 scope_->SetLanguageMode( | 260 scope_->SetLanguageMode( |
| 261 static_cast<LanguageMode>(scope_->language_mode() | STRICT)); | 261 static_cast<LanguageMode>(scope_->language_mode() | STRICT)); |
| 262 } else if (use_strong_found) { | 262 } else if (use_strong_found) { |
| 263 scope_->SetLanguageMode(static_cast<LanguageMode>( | 263 scope_->SetLanguageMode(static_cast<LanguageMode>( |
| 264 scope_->language_mode() | STRONG)); | 264 scope_->language_mode() | STRONG)); |
| 265 if (i::IsConstructor(function_state_->kind())) { |
| 266 // "use strong" cannot occur in a class constructor body, to avoid |
| 267 // unintuitive strong class object semantics. |
| 268 PreParserTraits::ReportMessageAt( |
| 269 token_loc, MessageTemplate::kStrongConstructorDirective); |
| 270 *ok = false; |
| 271 return; |
| 272 } |
| 265 } else if (!statement.IsStringLiteral()) { | 273 } else if (!statement.IsStringLiteral()) { |
| 266 directive_prologue = false; | 274 directive_prologue = false; |
| 267 } | 275 } |
| 268 | 276 |
| 269 if ((use_strict_found || use_strong_found) && | 277 if ((use_strict_found || use_strong_found) && |
| 270 !scope_->HasSimpleParameters()) { | 278 !scope_->HasSimpleParameters()) { |
| 271 // TC39 deemed "use strict" directives to be an error when occurring | 279 // TC39 deemed "use strict" directives to be an error when occurring |
| 272 // in the body of a function with non-simple parameter list, on | 280 // in the body of a function with non-simple parameter list, on |
| 273 // 29/7/2015. https://goo.gl/ueA7Ln | 281 // 29/7/2015. https://goo.gl/ueA7Ln |
| 274 // | 282 // |
| (...skipping 948 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1223 | 1231 |
| 1224 DCHECK(!spread_pos.IsValid()); | 1232 DCHECK(!spread_pos.IsValid()); |
| 1225 | 1233 |
| 1226 return Expression::Default(); | 1234 return Expression::Default(); |
| 1227 } | 1235 } |
| 1228 | 1236 |
| 1229 #undef CHECK_OK | 1237 #undef CHECK_OK |
| 1230 | 1238 |
| 1231 | 1239 |
| 1232 } } // v8::internal | 1240 } } // v8::internal |
| OLD | NEW |