OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/api.h" | 7 #include "src/api.h" |
8 #include "src/ast.h" | 8 #include "src/ast.h" |
9 #include "src/ast-literal-reindexer.h" | 9 #include "src/ast-literal-reindexer.h" |
10 #include "src/bailout-reason.h" | 10 #include "src/bailout-reason.h" |
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 int materialized_literal_count = -1; | 339 int materialized_literal_count = -1; |
340 int expected_property_count = -1; | 340 int expected_property_count = -1; |
341 int parameter_count = 0; | 341 int parameter_count = 0; |
342 const AstRawString* name = ast_value_factory()->empty_string(); | 342 const AstRawString* name = ast_value_factory()->empty_string(); |
343 | 343 |
344 | 344 |
345 FunctionKind kind = call_super ? FunctionKind::kDefaultSubclassConstructor | 345 FunctionKind kind = call_super ? FunctionKind::kDefaultSubclassConstructor |
346 : FunctionKind::kDefaultBaseConstructor; | 346 : FunctionKind::kDefaultBaseConstructor; |
347 Scope* function_scope = NewScope(scope, FUNCTION_SCOPE, kind); | 347 Scope* function_scope = NewScope(scope, FUNCTION_SCOPE, kind); |
348 function_scope->SetLanguageMode( | 348 function_scope->SetLanguageMode( |
349 static_cast<LanguageMode>(language_mode | STRICT_BIT)); | 349 static_cast<LanguageMode>(language_mode | STRICT)); |
350 // Set start and end position to the same value | 350 // Set start and end position to the same value |
351 function_scope->set_start_position(pos); | 351 function_scope->set_start_position(pos); |
352 function_scope->set_end_position(pos); | 352 function_scope->set_end_position(pos); |
353 ZoneList<Statement*>* body = NULL; | 353 ZoneList<Statement*>* body = NULL; |
354 | 354 |
355 { | 355 { |
356 AstNodeFactory function_factory(ast_value_factory()); | 356 AstNodeFactory function_factory(ast_value_factory()); |
357 FunctionState function_state(&function_state_, &scope_, function_scope, | 357 FunctionState function_state(&function_state_, &scope_, function_scope, |
358 kind, &function_factory); | 358 kind, &function_factory); |
359 | 359 |
(...skipping 960 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1320 allow_strong_mode() && | 1320 allow_strong_mode() && |
1321 literal->raw_value()->AsString() == | 1321 literal->raw_value()->AsString() == |
1322 ast_value_factory()->use_strong_string() && | 1322 ast_value_factory()->use_strong_string() && |
1323 token_loc.end_pos - token_loc.beg_pos == | 1323 token_loc.end_pos - token_loc.beg_pos == |
1324 ast_value_factory()->use_strong_string()->length() + 2; | 1324 ast_value_factory()->use_strong_string()->length() + 2; |
1325 if (use_strict_found || use_strong_found) { | 1325 if (use_strict_found || use_strong_found) { |
1326 // Strong mode implies strict mode. If there are several "use strict" | 1326 // Strong mode implies strict mode. If there are several "use strict" |
1327 // / "use strong" directives, do the strict mode changes only once. | 1327 // / "use strong" directives, do the strict mode changes only once. |
1328 if (is_sloppy(scope_->language_mode())) { | 1328 if (is_sloppy(scope_->language_mode())) { |
1329 scope_->SetLanguageMode(static_cast<LanguageMode>( | 1329 scope_->SetLanguageMode(static_cast<LanguageMode>( |
1330 scope_->language_mode() | STRICT_BIT)); | 1330 scope_->language_mode() | STRICT)); |
1331 } | 1331 } |
1332 | 1332 |
1333 if (use_strong_found) { | 1333 if (use_strong_found) { |
1334 scope_->SetLanguageMode(static_cast<LanguageMode>( | 1334 scope_->SetLanguageMode(static_cast<LanguageMode>( |
1335 scope_->language_mode() | STRONG_BIT)); | 1335 scope_->language_mode() | STRONG)); |
1336 } | 1336 } |
1337 // Because declarations in strict eval code don't leak into the scope | 1337 // Because declarations in strict eval code don't leak into the scope |
1338 // of the eval call, it is likely that functions declared in strict | 1338 // of the eval call, it is likely that functions declared in strict |
1339 // eval code will be used within the eval code, so lazy parsing is | 1339 // eval code will be used within the eval code, so lazy parsing is |
1340 // probably not a win. Also, resolution of "var" bindings defined in | 1340 // probably not a win. Also, resolution of "var" bindings defined in |
1341 // strict eval code from within nested functions is currently broken | 1341 // strict eval code from within nested functions is currently broken |
1342 // with the pre-parser; lazy parsing of strict eval code causes | 1342 // with the pre-parser; lazy parsing of strict eval code causes |
1343 // regress/regress-crbug-135066.js to fail. | 1343 // regress/regress-crbug-135066.js to fail. |
1344 if (scope_->is_eval_scope()) mode_ = PARSE_EAGERLY; | 1344 if (scope_->is_eval_scope()) mode_ = PARSE_EAGERLY; |
1345 } else if (literal->raw_value()->AsString() == | 1345 } else if (literal->raw_value()->AsString() == |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1425 void* Parser::ParseModuleItemList(ZoneList<Statement*>* body, bool* ok) { | 1425 void* Parser::ParseModuleItemList(ZoneList<Statement*>* body, bool* ok) { |
1426 // (Ecma 262 6th Edition, 15.2): | 1426 // (Ecma 262 6th Edition, 15.2): |
1427 // Module : | 1427 // Module : |
1428 // ModuleBody? | 1428 // ModuleBody? |
1429 // | 1429 // |
1430 // ModuleBody : | 1430 // ModuleBody : |
1431 // ModuleItem* | 1431 // ModuleItem* |
1432 | 1432 |
1433 DCHECK(scope_->is_module_scope()); | 1433 DCHECK(scope_->is_module_scope()); |
1434 scope_->SetLanguageMode( | 1434 scope_->SetLanguageMode( |
1435 static_cast<LanguageMode>(scope_->language_mode() | STRICT_BIT)); | 1435 static_cast<LanguageMode>(scope_->language_mode() | STRICT)); |
1436 | 1436 |
1437 while (peek() != Token::EOS) { | 1437 while (peek() != Token::EOS) { |
1438 Statement* stat = ParseModuleItem(CHECK_OK); | 1438 Statement* stat = ParseModuleItem(CHECK_OK); |
1439 if (stat && !stat->IsEmpty()) { | 1439 if (stat && !stat->IsEmpty()) { |
1440 body->Add(stat, zone()); | 1440 body->Add(stat, zone()); |
1441 } | 1441 } |
1442 } | 1442 } |
1443 | 1443 |
1444 // Check that all exports are bound. | 1444 // Check that all exports are bound. |
1445 ModuleDescriptor* descriptor = scope_->module(); | 1445 ModuleDescriptor* descriptor = scope_->module(); |
(...skipping 3061 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4507 } | 4507 } |
4508 if (is_strong(language_mode()) && IsUndefined(name)) { | 4508 if (is_strong(language_mode()) && IsUndefined(name)) { |
4509 ReportMessageAt(class_name_location, MessageTemplate::kStrongUndefined); | 4509 ReportMessageAt(class_name_location, MessageTemplate::kStrongUndefined); |
4510 *ok = false; | 4510 *ok = false; |
4511 return NULL; | 4511 return NULL; |
4512 } | 4512 } |
4513 | 4513 |
4514 Scope* block_scope = NewScope(scope_, BLOCK_SCOPE); | 4514 Scope* block_scope = NewScope(scope_, BLOCK_SCOPE); |
4515 BlockState block_state(&scope_, block_scope); | 4515 BlockState block_state(&scope_, block_scope); |
4516 scope_->SetLanguageMode( | 4516 scope_->SetLanguageMode( |
4517 static_cast<LanguageMode>(scope_->language_mode() | STRICT_BIT)); | 4517 static_cast<LanguageMode>(scope_->language_mode() | STRICT)); |
4518 scope_->SetScopeName(name); | 4518 scope_->SetScopeName(name); |
4519 | 4519 |
4520 VariableProxy* proxy = NULL; | 4520 VariableProxy* proxy = NULL; |
4521 if (name != NULL) { | 4521 if (name != NULL) { |
4522 proxy = NewUnresolved(name, CONST); | 4522 proxy = NewUnresolved(name, CONST); |
4523 const bool is_class_declaration = true; | 4523 const bool is_class_declaration = true; |
4524 Declaration* declaration = factory()->NewVariableDeclaration( | 4524 Declaration* declaration = factory()->NewVariableDeclaration( |
4525 proxy, CONST, block_scope, pos, is_class_declaration, | 4525 proxy, CONST, block_scope, pos, is_class_declaration, |
4526 scope_->class_declaration_group_start()); | 4526 scope_->class_declaration_group_start()); |
4527 Declare(declaration, DeclarationDescriptor::NORMAL, true, CHECK_OK); | 4527 Declare(declaration, DeclarationDescriptor::NORMAL, true, CHECK_OK); |
(...skipping 1463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5991 Expression* Parser::SpreadCallNew(Expression* function, | 5991 Expression* Parser::SpreadCallNew(Expression* function, |
5992 ZoneList<v8::internal::Expression*>* args, | 5992 ZoneList<v8::internal::Expression*>* args, |
5993 int pos) { | 5993 int pos) { |
5994 args->InsertAt(0, function, zone()); | 5994 args->InsertAt(0, function, zone()); |
5995 | 5995 |
5996 return factory()->NewCallRuntime( | 5996 return factory()->NewCallRuntime( |
5997 ast_value_factory()->reflect_construct_string(), NULL, args, pos); | 5997 ast_value_factory()->reflect_construct_string(), NULL, args, pos); |
5998 } | 5998 } |
5999 } // namespace internal | 5999 } // namespace internal |
6000 } // namespace v8 | 6000 } // namespace v8 |
OLD | NEW |