OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
146 CcTest::i_isolate()->stack_guard()->SetStackLimit( | 146 CcTest::i_isolate()->stack_guard()->SetStackLimit( |
147 i::GetCurrentStackPosition() - 128 * 1024); | 147 i::GetCurrentStackPosition() - 128 * 1024); |
148 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); | 148 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); |
149 for (int i = 0; tests[i]; i++) { | 149 for (int i = 0; tests[i]; i++) { |
150 const i::byte* source = | 150 const i::byte* source = |
151 reinterpret_cast<const i::byte*>(tests[i]); | 151 reinterpret_cast<const i::byte*>(tests[i]); |
152 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(tests[i])); | 152 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(tests[i])); |
153 i::CompleteParserRecorder log; | 153 i::CompleteParserRecorder log; |
154 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 154 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
155 scanner.Initialize(&stream); | 155 scanner.Initialize(&stream); |
156 i::Zone zone; | 156 i::Zone zone(CcTest::i_isolate()->allocator()); |
157 i::AstValueFactory ast_value_factory( | 157 i::AstValueFactory ast_value_factory( |
158 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 158 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
159 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, | 159 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
160 stack_limit); | 160 stack_limit); |
161 preparser.set_allow_lazy(true); | 161 preparser.set_allow_lazy(true); |
162 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 162 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
163 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 163 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
164 CHECK(!log.HasError()); | 164 CHECK(!log.HasError()); |
165 } | 165 } |
166 | 166 |
167 for (int i = 0; fail_tests[i]; i++) { | 167 for (int i = 0; fail_tests[i]; i++) { |
168 const i::byte* source = | 168 const i::byte* source = |
169 reinterpret_cast<const i::byte*>(fail_tests[i]); | 169 reinterpret_cast<const i::byte*>(fail_tests[i]); |
170 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(fail_tests[i])); | 170 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(fail_tests[i])); |
171 i::CompleteParserRecorder log; | 171 i::CompleteParserRecorder log; |
172 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 172 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
173 scanner.Initialize(&stream); | 173 scanner.Initialize(&stream); |
174 i::Zone zone; | 174 i::Zone zone(CcTest::i_isolate()->allocator()); |
175 i::AstValueFactory ast_value_factory( | 175 i::AstValueFactory ast_value_factory( |
176 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 176 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
177 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, | 177 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
178 stack_limit); | 178 stack_limit); |
179 preparser.set_allow_lazy(true); | 179 preparser.set_allow_lazy(true); |
180 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 180 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
181 // Even in the case of a syntax error, kPreParseSuccess is returned. | 181 // Even in the case of a syntax error, kPreParseSuccess is returned. |
182 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 182 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
183 CHECK(log.HasError()); | 183 CHECK(log.HasError()); |
184 } | 184 } |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); | 325 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); |
326 for (int i = 0; programs[i]; i++) { | 326 for (int i = 0; programs[i]; i++) { |
327 const char* program = programs[i]; | 327 const char* program = programs[i]; |
328 i::Utf8ToUtf16CharacterStream stream( | 328 i::Utf8ToUtf16CharacterStream stream( |
329 reinterpret_cast<const i::byte*>(program), | 329 reinterpret_cast<const i::byte*>(program), |
330 static_cast<unsigned>(strlen(program))); | 330 static_cast<unsigned>(strlen(program))); |
331 i::CompleteParserRecorder log; | 331 i::CompleteParserRecorder log; |
332 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 332 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
333 scanner.Initialize(&stream); | 333 scanner.Initialize(&stream); |
334 | 334 |
335 i::Zone zone; | 335 i::Zone zone(CcTest::i_isolate()->allocator()); |
336 i::AstValueFactory ast_value_factory( | 336 i::AstValueFactory ast_value_factory( |
337 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 337 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
338 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, | 338 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
339 stack_limit); | 339 stack_limit); |
340 preparser.set_allow_lazy(true); | 340 preparser.set_allow_lazy(true); |
341 preparser.set_allow_natives(true); | 341 preparser.set_allow_natives(true); |
342 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 342 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
343 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 343 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
344 CHECK(!log.HasError()); | 344 CHECK(!log.HasError()); |
345 } | 345 } |
(...skipping 16 matching lines...) Expand all Loading... |
362 for (int i = 0; programs[i]; i++) { | 362 for (int i = 0; programs[i]; i++) { |
363 const char* program = programs[i]; | 363 const char* program = programs[i]; |
364 i::Utf8ToUtf16CharacterStream stream( | 364 i::Utf8ToUtf16CharacterStream stream( |
365 reinterpret_cast<const i::byte*>(program), | 365 reinterpret_cast<const i::byte*>(program), |
366 static_cast<unsigned>(strlen(program))); | 366 static_cast<unsigned>(strlen(program))); |
367 i::CompleteParserRecorder log; | 367 i::CompleteParserRecorder log; |
368 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 368 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
369 scanner.Initialize(&stream); | 369 scanner.Initialize(&stream); |
370 | 370 |
371 // Preparser defaults to disallowing natives syntax. | 371 // Preparser defaults to disallowing natives syntax. |
372 i::Zone zone; | 372 i::Zone zone(CcTest::i_isolate()->allocator()); |
373 i::AstValueFactory ast_value_factory( | 373 i::AstValueFactory ast_value_factory( |
374 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 374 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
375 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, | 375 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
376 stack_limit); | 376 stack_limit); |
377 preparser.set_allow_lazy(true); | 377 preparser.set_allow_lazy(true); |
378 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 378 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
379 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 379 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
380 CHECK(log.HasError()); | 380 CHECK(log.HasError()); |
381 } | 381 } |
382 } | 382 } |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 // Before fix, didn't check *ok after Expect(Token::Identifier, ok), | 431 // Before fix, didn't check *ok after Expect(Token::Identifier, ok), |
432 // and then used the invalid currently scanned literal. This always | 432 // and then used the invalid currently scanned literal. This always |
433 // failed in debug mode, and sometimes crashed in release mode. | 433 // failed in debug mode, and sometimes crashed in release mode. |
434 | 434 |
435 i::Utf8ToUtf16CharacterStream stream( | 435 i::Utf8ToUtf16CharacterStream stream( |
436 reinterpret_cast<const i::byte*>(program), | 436 reinterpret_cast<const i::byte*>(program), |
437 static_cast<unsigned>(strlen(program))); | 437 static_cast<unsigned>(strlen(program))); |
438 i::CompleteParserRecorder log; | 438 i::CompleteParserRecorder log; |
439 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 439 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
440 scanner.Initialize(&stream); | 440 scanner.Initialize(&stream); |
441 i::Zone zone; | 441 i::Zone zone(CcTest::i_isolate()->allocator()); |
442 i::AstValueFactory ast_value_factory(&zone, | 442 i::AstValueFactory ast_value_factory(&zone, |
443 CcTest::i_isolate()->heap()->HashSeed()); | 443 CcTest::i_isolate()->heap()->HashSeed()); |
444 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, | 444 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
445 CcTest::i_isolate()->stack_guard()->real_climit()); | 445 CcTest::i_isolate()->stack_guard()->real_climit()); |
446 preparser.set_allow_lazy(true); | 446 preparser.set_allow_lazy(true); |
447 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 447 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
448 // Even in the case of a syntax error, kPreParseSuccess is returned. | 448 // Even in the case of a syntax error, kPreParseSuccess is returned. |
449 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 449 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
450 CHECK(log.HasError()); | 450 CHECK(log.HasError()); |
451 } | 451 } |
(...skipping 14 matching lines...) Expand all Loading... |
466 const char* program = | 466 const char* program = |
467 "try { } catch (e) { var foo = function () { /* first */ } }" | 467 "try { } catch (e) { var foo = function () { /* first */ } }" |
468 "var bar = function () { /* second */ }"; | 468 "var bar = function () { /* second */ }"; |
469 | 469 |
470 v8::HandleScope handles(CcTest::isolate()); | 470 v8::HandleScope handles(CcTest::isolate()); |
471 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(program); | 471 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(program); |
472 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); | 472 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); |
473 i::CompleteParserRecorder log; | 473 i::CompleteParserRecorder log; |
474 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 474 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
475 scanner.Initialize(&stream); | 475 scanner.Initialize(&stream); |
476 i::Zone zone; | 476 i::Zone zone(CcTest::i_isolate()->allocator()); |
477 i::AstValueFactory ast_value_factory(&zone, | 477 i::AstValueFactory ast_value_factory(&zone, |
478 CcTest::i_isolate()->heap()->HashSeed()); | 478 CcTest::i_isolate()->heap()->HashSeed()); |
479 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, | 479 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
480 CcTest::i_isolate()->stack_guard()->real_climit()); | 480 CcTest::i_isolate()->stack_guard()->real_climit()); |
481 preparser.set_allow_lazy(true); | 481 preparser.set_allow_lazy(true); |
482 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 482 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
483 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 483 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
484 i::ScriptData* sd = log.GetScriptData(); | 484 i::ScriptData* sd = log.GetScriptData(); |
485 i::ParseData* pd = i::ParseData::FromCachedData(sd); | 485 i::ParseData* pd = i::ParseData::FromCachedData(sd); |
486 pd->Initialize(); | 486 pd->Initialize(); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
519 | 519 |
520 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); | 520 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); |
521 | 521 |
522 i::Utf8ToUtf16CharacterStream stream( | 522 i::Utf8ToUtf16CharacterStream stream( |
523 reinterpret_cast<const i::byte*>(program.get()), | 523 reinterpret_cast<const i::byte*>(program.get()), |
524 static_cast<unsigned>(kProgramSize)); | 524 static_cast<unsigned>(kProgramSize)); |
525 i::CompleteParserRecorder log; | 525 i::CompleteParserRecorder log; |
526 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 526 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
527 scanner.Initialize(&stream); | 527 scanner.Initialize(&stream); |
528 | 528 |
529 i::Zone zone; | 529 i::Zone zone(CcTest::i_isolate()->allocator()); |
530 i::AstValueFactory ast_value_factory(&zone, | 530 i::AstValueFactory ast_value_factory(&zone, |
531 CcTest::i_isolate()->heap()->HashSeed()); | 531 CcTest::i_isolate()->heap()->HashSeed()); |
532 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, | 532 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
533 stack_limit); | 533 stack_limit); |
534 preparser.set_allow_lazy(true); | 534 preparser.set_allow_lazy(true); |
535 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 535 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
536 CHECK_EQ(i::PreParser::kPreParseStackOverflow, result); | 536 CHECK_EQ(i::PreParser::kPreParseStackOverflow, result); |
537 } | 537 } |
538 | 538 |
539 | 539 |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
836 reinterpret_cast<const i::byte*>(re_source), | 836 reinterpret_cast<const i::byte*>(re_source), |
837 static_cast<unsigned>(strlen(re_source))); | 837 static_cast<unsigned>(strlen(re_source))); |
838 i::HandleScope scope(CcTest::i_isolate()); | 838 i::HandleScope scope(CcTest::i_isolate()); |
839 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 839 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
840 scanner.Initialize(&stream); | 840 scanner.Initialize(&stream); |
841 | 841 |
842 i::Token::Value start = scanner.peek(); | 842 i::Token::Value start = scanner.peek(); |
843 CHECK(start == i::Token::DIV || start == i::Token::ASSIGN_DIV); | 843 CHECK(start == i::Token::DIV || start == i::Token::ASSIGN_DIV); |
844 CHECK(scanner.ScanRegExpPattern(start == i::Token::ASSIGN_DIV)); | 844 CHECK(scanner.ScanRegExpPattern(start == i::Token::ASSIGN_DIV)); |
845 scanner.Next(); // Current token is now the regexp literal. | 845 scanner.Next(); // Current token is now the regexp literal. |
846 i::Zone zone; | 846 i::Zone zone(CcTest::i_isolate()->allocator()); |
847 i::AstValueFactory ast_value_factory(&zone, | 847 i::AstValueFactory ast_value_factory(&zone, |
848 CcTest::i_isolate()->heap()->HashSeed()); | 848 CcTest::i_isolate()->heap()->HashSeed()); |
849 ast_value_factory.Internalize(CcTest::i_isolate()); | 849 ast_value_factory.Internalize(CcTest::i_isolate()); |
850 i::Handle<i::String> val = | 850 i::Handle<i::String> val = |
851 scanner.CurrentSymbol(&ast_value_factory)->string(); | 851 scanner.CurrentSymbol(&ast_value_factory)->string(); |
852 i::DisallowHeapAllocation no_alloc; | 852 i::DisallowHeapAllocation no_alloc; |
853 i::String::FlatContent content = val->GetFlatContent(); | 853 i::String::FlatContent content = val->GetFlatContent(); |
854 CHECK(content.IsOneByte()); | 854 CHECK(content.IsOneByte()); |
855 i::Vector<const uint8_t> actual = content.ToOneByteVector(); | 855 i::Vector<const uint8_t> actual = content.ToOneByteVector(); |
856 for (int i = 0; i < actual.length(); i++) { | 856 for (int i = 0; i < actual.length(); i++) { |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1060 int kProgramByteSize = i::StrLength(surroundings[j].prefix) + | 1060 int kProgramByteSize = i::StrLength(surroundings[j].prefix) + |
1061 i::StrLength(surroundings[j].suffix) + | 1061 i::StrLength(surroundings[j].suffix) + |
1062 i::StrLength(source_data[i].body); | 1062 i::StrLength(source_data[i].body); |
1063 i::ScopedVector<char> program(kProgramByteSize + 1); | 1063 i::ScopedVector<char> program(kProgramByteSize + 1); |
1064 i::SNPrintF(program, "%s%s%s", surroundings[j].prefix, | 1064 i::SNPrintF(program, "%s%s%s", surroundings[j].prefix, |
1065 source_data[i].body, surroundings[j].suffix); | 1065 source_data[i].body, surroundings[j].suffix); |
1066 i::Handle<i::String> source = | 1066 i::Handle<i::String> source = |
1067 factory->NewStringFromUtf8(i::CStrVector(program.start())) | 1067 factory->NewStringFromUtf8(i::CStrVector(program.start())) |
1068 .ToHandleChecked(); | 1068 .ToHandleChecked(); |
1069 i::Handle<i::Script> script = factory->NewScript(source); | 1069 i::Handle<i::Script> script = factory->NewScript(source); |
1070 i::Zone zone; | 1070 i::Zone zone(CcTest::i_isolate()->allocator()); |
1071 i::ParseInfo info(&zone, script); | 1071 i::ParseInfo info(&zone, script); |
1072 i::Parser parser(&info); | 1072 i::Parser parser(&info); |
1073 parser.set_allow_harmony_sloppy(true); | 1073 parser.set_allow_harmony_sloppy(true); |
1074 info.set_global(); | 1074 info.set_global(); |
1075 CHECK(parser.Parse(&info)); | 1075 CHECK(parser.Parse(&info)); |
1076 CHECK(i::Rewriter::Rewrite(&info)); | 1076 CHECK(i::Rewriter::Rewrite(&info)); |
1077 CHECK(i::Scope::Analyze(&info)); | 1077 CHECK(i::Scope::Analyze(&info)); |
1078 CHECK(info.literal() != NULL); | 1078 CHECK(info.literal() != NULL); |
1079 | 1079 |
1080 i::Scope* script_scope = info.literal()->scope(); | 1080 i::Scope* script_scope = info.literal()->scope(); |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1378 i::SNPrintF(program, "%s%s%s", | 1378 i::SNPrintF(program, "%s%s%s", |
1379 source_data[i].outer_prefix, | 1379 source_data[i].outer_prefix, |
1380 source_data[i].inner_source, | 1380 source_data[i].inner_source, |
1381 source_data[i].outer_suffix); | 1381 source_data[i].outer_suffix); |
1382 | 1382 |
1383 // Parse program source. | 1383 // Parse program source. |
1384 i::Handle<i::String> source = factory->NewStringFromUtf8( | 1384 i::Handle<i::String> source = factory->NewStringFromUtf8( |
1385 i::CStrVector(program.start())).ToHandleChecked(); | 1385 i::CStrVector(program.start())).ToHandleChecked(); |
1386 CHECK_EQ(source->length(), kProgramSize); | 1386 CHECK_EQ(source->length(), kProgramSize); |
1387 i::Handle<i::Script> script = factory->NewScript(source); | 1387 i::Handle<i::Script> script = factory->NewScript(source); |
1388 i::Zone zone; | 1388 i::Zone zone(CcTest::i_isolate()->allocator()); |
1389 i::ParseInfo info(&zone, script); | 1389 i::ParseInfo info(&zone, script); |
1390 i::Parser parser(&info); | 1390 i::Parser parser(&info); |
1391 parser.set_allow_lazy(true); | 1391 parser.set_allow_lazy(true); |
1392 info.set_global(); | 1392 info.set_global(); |
1393 info.set_language_mode(source_data[i].language_mode); | 1393 info.set_language_mode(source_data[i].language_mode); |
1394 parser.Parse(&info); | 1394 parser.Parse(&info); |
1395 CHECK(info.literal() != NULL); | 1395 CHECK(info.literal() != NULL); |
1396 | 1396 |
1397 // Check scope types and positions. | 1397 // Check scope types and positions. |
1398 i::Scope* scope = info.literal()->scope(); | 1398 i::Scope* scope = info.literal()->scope(); |
(...skipping 28 matching lines...) Expand all Loading... |
1427 i::Isolate* isolate = CcTest::i_isolate(); | 1427 i::Isolate* isolate = CcTest::i_isolate(); |
1428 i::Factory* factory = isolate->factory(); | 1428 i::Factory* factory = isolate->factory(); |
1429 v8::HandleScope handles(CcTest::isolate()); | 1429 v8::HandleScope handles(CcTest::isolate()); |
1430 i::FunctionLiteral* function; | 1430 i::FunctionLiteral* function; |
1431 | 1431 |
1432 for (int i = 0; discard_sources[i]; i++) { | 1432 for (int i = 0; discard_sources[i]; i++) { |
1433 const char* source = discard_sources[i]; | 1433 const char* source = discard_sources[i]; |
1434 i::Handle<i::String> source_code = | 1434 i::Handle<i::String> source_code = |
1435 factory->NewStringFromUtf8(i::CStrVector(source)).ToHandleChecked(); | 1435 factory->NewStringFromUtf8(i::CStrVector(source)).ToHandleChecked(); |
1436 i::Handle<i::Script> script = factory->NewScript(source_code); | 1436 i::Handle<i::Script> script = factory->NewScript(source_code); |
1437 i::Zone zone; | 1437 i::Zone zone(CcTest::i_isolate()->allocator()); |
1438 i::ParseInfo info(&zone, script); | 1438 i::ParseInfo info(&zone, script); |
1439 info.set_allow_lazy_parsing(); | 1439 info.set_allow_lazy_parsing(); |
1440 i::Parser parser(&info); | 1440 i::Parser parser(&info); |
1441 parser.set_allow_harmony_sloppy(true); | 1441 parser.set_allow_harmony_sloppy(true); |
1442 parser.Parse(&info); | 1442 parser.Parse(&info); |
1443 function = info.literal(); | 1443 function = info.literal(); |
1444 CHECK_NOT_NULL(function); | 1444 CHECK_NOT_NULL(function); |
1445 CHECK_NOT_NULL(function->body()); | 1445 CHECK_NOT_NULL(function->body()); |
1446 CHECK_EQ(1, function->body()->length()); | 1446 CHECK_EQ(1, function->body()->length()); |
1447 i::FunctionLiteral* inner = | 1447 i::FunctionLiteral* inner = |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1549 uintptr_t stack_limit = isolate->stack_guard()->real_climit(); | 1549 uintptr_t stack_limit = isolate->stack_guard()->real_climit(); |
1550 int preparser_materialized_literals = -1; | 1550 int preparser_materialized_literals = -1; |
1551 int parser_materialized_literals = -2; | 1551 int parser_materialized_literals = -2; |
1552 bool test_preparser = !is_module; | 1552 bool test_preparser = !is_module; |
1553 | 1553 |
1554 // Preparse the data. | 1554 // Preparse the data. |
1555 i::CompleteParserRecorder log; | 1555 i::CompleteParserRecorder log; |
1556 if (test_preparser) { | 1556 if (test_preparser) { |
1557 i::Scanner scanner(isolate->unicode_cache()); | 1557 i::Scanner scanner(isolate->unicode_cache()); |
1558 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); | 1558 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); |
1559 i::Zone zone; | 1559 i::Zone zone(CcTest::i_isolate()->allocator()); |
1560 i::AstValueFactory ast_value_factory( | 1560 i::AstValueFactory ast_value_factory( |
1561 &zone, CcTest::i_isolate()->heap()->HashSeed()); | 1561 &zone, CcTest::i_isolate()->heap()->HashSeed()); |
1562 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, | 1562 i::PreParser preparser(&zone, &scanner, &ast_value_factory, &log, |
1563 stack_limit); | 1563 stack_limit); |
1564 SetParserFlags(&preparser, flags); | 1564 SetParserFlags(&preparser, flags); |
1565 scanner.Initialize(&stream); | 1565 scanner.Initialize(&stream); |
1566 i::PreParser::PreParseResult result = preparser.PreParseProgram( | 1566 i::PreParser::PreParseResult result = preparser.PreParseProgram( |
1567 &preparser_materialized_literals); | 1567 &preparser_materialized_literals); |
1568 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 1568 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
1569 } | 1569 } |
1570 bool preparse_error = log.HasError(); | 1570 bool preparse_error = log.HasError(); |
1571 | 1571 |
1572 // Parse the data | 1572 // Parse the data |
1573 i::FunctionLiteral* function; | 1573 i::FunctionLiteral* function; |
1574 { | 1574 { |
1575 i::Handle<i::Script> script = factory->NewScript(source); | 1575 i::Handle<i::Script> script = factory->NewScript(source); |
1576 i::Zone zone; | 1576 i::Zone zone(CcTest::i_isolate()->allocator()); |
1577 i::ParseInfo info(&zone, script); | 1577 i::ParseInfo info(&zone, script); |
1578 i::Parser parser(&info); | 1578 i::Parser parser(&info); |
1579 SetParserFlags(&parser, flags); | 1579 SetParserFlags(&parser, flags); |
1580 if (is_module) { | 1580 if (is_module) { |
1581 info.set_module(); | 1581 info.set_module(); |
1582 } else { | 1582 } else { |
1583 info.set_global(); | 1583 info.set_global(); |
1584 } | 1584 } |
1585 parser.Parse(&info); | 1585 parser.Parse(&info); |
1586 function = info.literal(); | 1586 function = info.literal(); |
(...skipping 1068 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2655 {"function lazy() { var x = {get foo(){} } }", 1}, | 2655 {"function lazy() { var x = {get foo(){} } }", 1}, |
2656 {NULL, 0} | 2656 {NULL, 0} |
2657 }; | 2657 }; |
2658 | 2658 |
2659 for (int i = 0; test_cases[i].program; i++) { | 2659 for (int i = 0; test_cases[i].program; i++) { |
2660 const char* program = test_cases[i].program; | 2660 const char* program = test_cases[i].program; |
2661 i::Factory* factory = CcTest::i_isolate()->factory(); | 2661 i::Factory* factory = CcTest::i_isolate()->factory(); |
2662 i::Handle<i::String> source = | 2662 i::Handle<i::String> source = |
2663 factory->NewStringFromUtf8(i::CStrVector(program)).ToHandleChecked(); | 2663 factory->NewStringFromUtf8(i::CStrVector(program)).ToHandleChecked(); |
2664 i::Handle<i::Script> script = factory->NewScript(source); | 2664 i::Handle<i::Script> script = factory->NewScript(source); |
2665 i::Zone zone; | 2665 i::Zone zone(CcTest::i_isolate()->allocator()); |
2666 i::ParseInfo info(&zone, script); | 2666 i::ParseInfo info(&zone, script); |
2667 i::ScriptData* sd = NULL; | 2667 i::ScriptData* sd = NULL; |
2668 info.set_cached_data(&sd); | 2668 info.set_cached_data(&sd); |
2669 info.set_compile_options(v8::ScriptCompiler::kProduceParserCache); | 2669 info.set_compile_options(v8::ScriptCompiler::kProduceParserCache); |
2670 info.set_allow_lazy_parsing(); | 2670 info.set_allow_lazy_parsing(); |
2671 i::Parser::ParseStatic(&info); | 2671 i::Parser::ParseStatic(&info); |
2672 i::ParseData* pd = i::ParseData::FromCachedData(sd); | 2672 i::ParseData* pd = i::ParseData::FromCachedData(sd); |
2673 | 2673 |
2674 if (pd->FunctionCount() != test_cases[i].functions) { | 2674 if (pd->FunctionCount() != test_cases[i].functions) { |
2675 v8::base::OS::Print( | 2675 v8::base::OS::Print( |
(...skipping 605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3281 " assertResult([2]);" | 3281 " assertResult([2]);" |
3282 " return f;" | 3282 " return f;" |
3283 "};" | 3283 "};" |
3284 "h();"; | 3284 "h();"; |
3285 | 3285 |
3286 i::ScopedVector<char> program(Utf8LengthHelper(src) + 1); | 3286 i::ScopedVector<char> program(Utf8LengthHelper(src) + 1); |
3287 i::SNPrintF(program, "%s", src); | 3287 i::SNPrintF(program, "%s", src); |
3288 i::Handle<i::String> source = factory->InternalizeUtf8String(program.start()); | 3288 i::Handle<i::String> source = factory->InternalizeUtf8String(program.start()); |
3289 source->PrintOn(stdout); | 3289 source->PrintOn(stdout); |
3290 printf("\n"); | 3290 printf("\n"); |
3291 i::Zone zone; | 3291 i::Zone zone(CcTest::i_isolate()->allocator()); |
3292 v8::Local<v8::Value> v = CompileRun(src); | 3292 v8::Local<v8::Value> v = CompileRun(src); |
3293 i::Handle<i::Object> o = v8::Utils::OpenHandle(*v); | 3293 i::Handle<i::Object> o = v8::Utils::OpenHandle(*v); |
3294 i::Handle<i::JSFunction> f = i::Handle<i::JSFunction>::cast(o); | 3294 i::Handle<i::JSFunction> f = i::Handle<i::JSFunction>::cast(o); |
3295 i::Context* context = f->context(); | 3295 i::Context* context = f->context(); |
3296 i::AstValueFactory avf(&zone, isolate->heap()->HashSeed()); | 3296 i::AstValueFactory avf(&zone, isolate->heap()->HashSeed()); |
3297 avf.Internalize(isolate); | 3297 avf.Internalize(isolate); |
3298 const i::AstRawString* name = avf.GetOneByteString("result"); | 3298 const i::AstRawString* name = avf.GetOneByteString("result"); |
3299 i::Handle<i::String> str = name->string(); | 3299 i::Handle<i::String> str = name->string(); |
3300 CHECK(str->IsInternalizedString()); | 3300 CHECK(str->IsInternalizedString()); |
3301 i::Scope* script_scope = | 3301 i::Scope* script_scope = |
(...skipping 29 matching lines...) Expand all Loading... |
3331 " };" | 3331 " };" |
3332 " return g;" | 3332 " return g;" |
3333 " }" | 3333 " }" |
3334 "f(0);"; | 3334 "f(0);"; |
3335 | 3335 |
3336 i::ScopedVector<char> program(Utf8LengthHelper(src) + 1); | 3336 i::ScopedVector<char> program(Utf8LengthHelper(src) + 1); |
3337 i::SNPrintF(program, "%s", src); | 3337 i::SNPrintF(program, "%s", src); |
3338 i::Handle<i::String> source = factory->InternalizeUtf8String(program.start()); | 3338 i::Handle<i::String> source = factory->InternalizeUtf8String(program.start()); |
3339 source->PrintOn(stdout); | 3339 source->PrintOn(stdout); |
3340 printf("\n"); | 3340 printf("\n"); |
3341 i::Zone zone; | 3341 i::Zone zone(CcTest::i_isolate()->allocator()); |
3342 v8::Local<v8::Value> v = CompileRun(src); | 3342 v8::Local<v8::Value> v = CompileRun(src); |
3343 i::Handle<i::Object> o = v8::Utils::OpenHandle(*v); | 3343 i::Handle<i::Object> o = v8::Utils::OpenHandle(*v); |
3344 i::Handle<i::JSFunction> f = i::Handle<i::JSFunction>::cast(o); | 3344 i::Handle<i::JSFunction> f = i::Handle<i::JSFunction>::cast(o); |
3345 i::Context* context = f->context(); | 3345 i::Context* context = f->context(); |
3346 i::AstValueFactory avf(&zone, isolate->heap()->HashSeed()); | 3346 i::AstValueFactory avf(&zone, isolate->heap()->HashSeed()); |
3347 avf.Internalize(isolate); | 3347 avf.Internalize(isolate); |
3348 | 3348 |
3349 i::Scope* script_scope = | 3349 i::Scope* script_scope = |
3350 new (&zone) i::Scope(&zone, NULL, i::SCRIPT_SCOPE, &avf); | 3350 new (&zone) i::Scope(&zone, NULL, i::SCRIPT_SCOPE, &avf); |
3351 script_scope->Initialize(); | 3351 script_scope->Initialize(); |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3475 i::ScopedVector<char> program(len + 1); | 3475 i::ScopedVector<char> program(len + 1); |
3476 | 3476 |
3477 i::SNPrintF(program, "%s%s%s%s%s%s%s", prefix, outer_comment, outer, | 3477 i::SNPrintF(program, "%s%s%s%s%s%s%s", prefix, outer_comment, outer, |
3478 midfix, inner_comment, inner, suffix); | 3478 midfix, inner_comment, inner, suffix); |
3479 i::Handle<i::String> source = | 3479 i::Handle<i::String> source = |
3480 factory->InternalizeUtf8String(program.start()); | 3480 factory->InternalizeUtf8String(program.start()); |
3481 source->PrintOn(stdout); | 3481 source->PrintOn(stdout); |
3482 printf("\n"); | 3482 printf("\n"); |
3483 | 3483 |
3484 i::Handle<i::Script> script = factory->NewScript(source); | 3484 i::Handle<i::Script> script = factory->NewScript(source); |
3485 i::Zone zone; | 3485 i::Zone zone(CcTest::i_isolate()->allocator()); |
3486 i::ParseInfo info(&zone, script); | 3486 i::ParseInfo info(&zone, script); |
3487 i::Parser parser(&info); | 3487 i::Parser parser(&info); |
3488 CHECK(parser.Parse(&info)); | 3488 CHECK(parser.Parse(&info)); |
3489 CHECK(i::Compiler::Analyze(&info)); | 3489 CHECK(i::Compiler::Analyze(&info)); |
3490 CHECK(info.literal() != NULL); | 3490 CHECK(info.literal() != NULL); |
3491 | 3491 |
3492 i::Scope* scope = info.literal()->scope(); | 3492 i::Scope* scope = info.literal()->scope(); |
3493 CHECK_EQ(scope->inner_scopes()->length(), 1); | 3493 CHECK_EQ(scope->inner_scopes()->length(), 1); |
3494 i::Scope* inner_scope = scope->inner_scopes()->at(0); | 3494 i::Scope* inner_scope = scope->inner_scopes()->at(0); |
3495 const i::AstRawString* var_name = | 3495 const i::AstRawString* var_name = |
(...skipping 2124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5620 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - | 5620 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - |
5621 128 * 1024); | 5621 128 * 1024); |
5622 | 5622 |
5623 for (unsigned i = 0; i < arraysize(kSources); ++i) { | 5623 for (unsigned i = 0; i < arraysize(kSources); ++i) { |
5624 i::Handle<i::String> source = | 5624 i::Handle<i::String> source = |
5625 factory->NewStringFromAsciiChecked(kSources[i]); | 5625 factory->NewStringFromAsciiChecked(kSources[i]); |
5626 | 5626 |
5627 // Show that parsing as a module works | 5627 // Show that parsing as a module works |
5628 { | 5628 { |
5629 i::Handle<i::Script> script = factory->NewScript(source); | 5629 i::Handle<i::Script> script = factory->NewScript(source); |
5630 i::Zone zone; | 5630 i::Zone zone(CcTest::i_isolate()->allocator()); |
5631 i::ParseInfo info(&zone, script); | 5631 i::ParseInfo info(&zone, script); |
5632 i::Parser parser(&info); | 5632 i::Parser parser(&info); |
5633 info.set_module(); | 5633 info.set_module(); |
5634 if (!parser.Parse(&info)) { | 5634 if (!parser.Parse(&info)) { |
5635 i::Handle<i::JSObject> exception_handle( | 5635 i::Handle<i::JSObject> exception_handle( |
5636 i::JSObject::cast(isolate->pending_exception())); | 5636 i::JSObject::cast(isolate->pending_exception())); |
5637 i::Handle<i::String> message_string = i::Handle<i::String>::cast( | 5637 i::Handle<i::String> message_string = i::Handle<i::String>::cast( |
5638 i::JSReceiver::GetProperty(isolate, exception_handle, "message") | 5638 i::JSReceiver::GetProperty(isolate, exception_handle, "message") |
5639 .ToHandleChecked()); | 5639 .ToHandleChecked()); |
5640 | 5640 |
5641 v8::base::OS::Print( | 5641 v8::base::OS::Print( |
5642 "Parser failed on:\n" | 5642 "Parser failed on:\n" |
5643 "\t%s\n" | 5643 "\t%s\n" |
5644 "with error:\n" | 5644 "with error:\n" |
5645 "\t%s\n" | 5645 "\t%s\n" |
5646 "However, we expected no error.", | 5646 "However, we expected no error.", |
5647 source->ToCString().get(), message_string->ToCString().get()); | 5647 source->ToCString().get(), message_string->ToCString().get()); |
5648 CHECK(false); | 5648 CHECK(false); |
5649 } | 5649 } |
5650 } | 5650 } |
5651 | 5651 |
5652 // And that parsing a script does not. | 5652 // And that parsing a script does not. |
5653 { | 5653 { |
5654 i::Handle<i::Script> script = factory->NewScript(source); | 5654 i::Handle<i::Script> script = factory->NewScript(source); |
5655 i::Zone zone; | 5655 i::Zone zone(CcTest::i_isolate()->allocator()); |
5656 i::ParseInfo info(&zone, script); | 5656 i::ParseInfo info(&zone, script); |
5657 i::Parser parser(&info); | 5657 i::Parser parser(&info); |
5658 info.set_global(); | 5658 info.set_global(); |
5659 CHECK(!parser.Parse(&info)); | 5659 CHECK(!parser.Parse(&info)); |
5660 } | 5660 } |
5661 } | 5661 } |
5662 } | 5662 } |
5663 | 5663 |
5664 | 5664 |
5665 TEST(ImportExportParsingErrors) { | 5665 TEST(ImportExportParsingErrors) { |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5735 v8::Context::Scope context_scope(context); | 5735 v8::Context::Scope context_scope(context); |
5736 | 5736 |
5737 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - | 5737 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - |
5738 128 * 1024); | 5738 128 * 1024); |
5739 | 5739 |
5740 for (unsigned i = 0; i < arraysize(kErrorSources); ++i) { | 5740 for (unsigned i = 0; i < arraysize(kErrorSources); ++i) { |
5741 i::Handle<i::String> source = | 5741 i::Handle<i::String> source = |
5742 factory->NewStringFromAsciiChecked(kErrorSources[i]); | 5742 factory->NewStringFromAsciiChecked(kErrorSources[i]); |
5743 | 5743 |
5744 i::Handle<i::Script> script = factory->NewScript(source); | 5744 i::Handle<i::Script> script = factory->NewScript(source); |
5745 i::Zone zone; | 5745 i::Zone zone(CcTest::i_isolate()->allocator()); |
5746 i::ParseInfo info(&zone, script); | 5746 i::ParseInfo info(&zone, script); |
5747 i::Parser parser(&info); | 5747 i::Parser parser(&info); |
5748 info.set_module(); | 5748 info.set_module(); |
5749 CHECK(!parser.Parse(&info)); | 5749 CHECK(!parser.Parse(&info)); |
5750 } | 5750 } |
5751 } | 5751 } |
5752 | 5752 |
5753 | 5753 |
5754 TEST(ModuleParsingInternals) { | 5754 TEST(ModuleParsingInternals) { |
5755 i::Isolate* isolate = CcTest::i_isolate(); | 5755 i::Isolate* isolate = CcTest::i_isolate(); |
5756 i::Factory* factory = isolate->factory(); | 5756 i::Factory* factory = isolate->factory(); |
5757 v8::HandleScope handles(CcTest::isolate()); | 5757 v8::HandleScope handles(CcTest::isolate()); |
5758 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate()); | 5758 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate()); |
5759 v8::Context::Scope context_scope(context); | 5759 v8::Context::Scope context_scope(context); |
5760 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - | 5760 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - |
5761 128 * 1024); | 5761 128 * 1024); |
5762 | 5762 |
5763 static const char kSource[] = | 5763 static const char kSource[] = |
5764 "let x = 5;" | 5764 "let x = 5;" |
5765 "export { x as y };" | 5765 "export { x as y };" |
5766 "import { q as z } from 'm.js';" | 5766 "import { q as z } from 'm.js';" |
5767 "import n from 'n.js';" | 5767 "import n from 'n.js';" |
5768 "export { a as b } from 'm.js';" | 5768 "export { a as b } from 'm.js';" |
5769 "export * from 'p.js';" | 5769 "export * from 'p.js';" |
5770 "import 'q.js'"; | 5770 "import 'q.js'"; |
5771 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(kSource); | 5771 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(kSource); |
5772 i::Handle<i::Script> script = factory->NewScript(source); | 5772 i::Handle<i::Script> script = factory->NewScript(source); |
5773 i::Zone zone; | 5773 i::Zone zone(CcTest::i_isolate()->allocator()); |
5774 i::ParseInfo info(&zone, script); | 5774 i::ParseInfo info(&zone, script); |
5775 i::Parser parser(&info); | 5775 i::Parser parser(&info); |
5776 info.set_module(); | 5776 info.set_module(); |
5777 CHECK(parser.Parse(&info)); | 5777 CHECK(parser.Parse(&info)); |
5778 CHECK(i::Compiler::Analyze(&info)); | 5778 CHECK(i::Compiler::Analyze(&info)); |
5779 i::FunctionLiteral* func = info.literal(); | 5779 i::FunctionLiteral* func = info.literal(); |
5780 i::Scope* module_scope = func->scope(); | 5780 i::Scope* module_scope = func->scope(); |
5781 i::Scope* outer_scope = module_scope->outer_scope(); | 5781 i::Scope* outer_scope = module_scope->outer_scope(); |
5782 CHECK(outer_scope->is_script_scope()); | 5782 CHECK(outer_scope->is_script_scope()); |
5783 CHECK_NULL(outer_scope->outer_scope()); | 5783 CHECK_NULL(outer_scope->outer_scope()); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5876 i::Isolate* isolate = CcTest::i_isolate(); | 5876 i::Isolate* isolate = CcTest::i_isolate(); |
5877 i::Factory* factory = isolate->factory(); | 5877 i::Factory* factory = isolate->factory(); |
5878 v8::HandleScope handles(CcTest::isolate()); | 5878 v8::HandleScope handles(CcTest::isolate()); |
5879 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate()); | 5879 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate()); |
5880 v8::Context::Scope context_scope(context); | 5880 v8::Context::Scope context_scope(context); |
5881 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - | 5881 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - |
5882 128 * 1024); | 5882 128 * 1024); |
5883 | 5883 |
5884 i::Handle<i::Script> script = | 5884 i::Handle<i::Script> script = |
5885 factory->NewScript(factory->NewStringFromAsciiChecked(source)); | 5885 factory->NewScript(factory->NewStringFromAsciiChecked(source)); |
5886 i::Zone zone; | 5886 i::Zone zone(CcTest::i_isolate()->allocator()); |
5887 i::ParseInfo info(&zone, script); | 5887 i::ParseInfo info(&zone, script); |
5888 i::Parser parser(&info); | 5888 i::Parser parser(&info); |
5889 info.set_global(); | 5889 info.set_global(); |
5890 parser.Parse(&info); | 5890 parser.Parse(&info); |
5891 CHECK(info.literal() != NULL); | 5891 CHECK(info.literal() != NULL); |
5892 CHECK_EQ(expected_language_mode, info.literal()->language_mode()); | 5892 CHECK_EQ(expected_language_mode, info.literal()->language_mode()); |
5893 } | 5893 } |
5894 | 5894 |
5895 | 5895 |
5896 TEST(LanguageModeDirectives) { | 5896 TEST(LanguageModeDirectives) { |
(...skipping 1483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7380 // "Array() **= 10", | 7380 // "Array() **= 10", |
7381 NULL | 7381 NULL |
7382 }; | 7382 }; |
7383 // clang-format on | 7383 // clang-format on |
7384 | 7384 |
7385 static const ParserFlag always_flags[] = { | 7385 static const ParserFlag always_flags[] = { |
7386 kAllowHarmonyExponentiationOperator}; | 7386 kAllowHarmonyExponentiationOperator}; |
7387 RunParserSyncTest(context_data, error_data, kError, NULL, 0, always_flags, | 7387 RunParserSyncTest(context_data, error_data, kError, NULL, 0, always_flags, |
7388 arraysize(always_flags)); | 7388 arraysize(always_flags)); |
7389 } | 7389 } |
OLD | NEW |