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 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 "x --> is eol-comment\nvar y = 37;\n", | 138 "x --> is eol-comment\nvar y = 37;\n", |
139 "\"\\n\" --> is eol-comment\nvar y = 37;\n", | 139 "\"\\n\" --> is eol-comment\nvar y = 37;\n", |
140 "x/* precomment */ --> is eol-comment\nvar y = 37;\n", | 140 "x/* precomment */ --> is eol-comment\nvar y = 37;\n", |
141 "x/* precomment\n */ --> is eol-comment\nvar y = 37;\n", | 141 "x/* precomment\n */ --> is eol-comment\nvar y = 37;\n", |
142 "var x = 42; --> is eol-comment\nvar y = 37;\n", | 142 "var x = 42; --> is eol-comment\nvar y = 37;\n", |
143 "var x = 42; /* precomment\n */ --> is eol-comment\nvar y = 37;\n", | 143 "var x = 42; /* precomment\n */ --> is eol-comment\nvar y = 37;\n", |
144 NULL | 144 NULL |
145 }; | 145 }; |
146 | 146 |
147 // Parser/Scanner needs a stack limit. | 147 // Parser/Scanner needs a stack limit. |
148 CcTest::i_isolate()->stack_guard()->SetStackLimit(GetCurrentStackPosition() - | 148 CcTest::i_isolate()->stack_guard()->SetStackLimit( |
149 128 * 1024); | 149 i::GetCurrentStackPosition() - 128 * 1024); |
150 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); | 150 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); |
151 for (int i = 0; tests[i]; i++) { | 151 for (int i = 0; tests[i]; i++) { |
152 const i::byte* source = | 152 const i::byte* source = |
153 reinterpret_cast<const i::byte*>(tests[i]); | 153 reinterpret_cast<const i::byte*>(tests[i]); |
154 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(tests[i])); | 154 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(tests[i])); |
155 i::CompleteParserRecorder log; | 155 i::CompleteParserRecorder log; |
156 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 156 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
157 scanner.Initialize(&stream); | 157 scanner.Initialize(&stream); |
158 i::PreParser preparser(&scanner, &log, stack_limit); | 158 i::PreParser preparser(&scanner, &log, stack_limit); |
159 preparser.set_allow_lazy(true); | 159 preparser.set_allow_lazy(true); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 const char* data_; | 191 const char* data_; |
192 size_t length_; | 192 size_t length_; |
193 }; | 193 }; |
194 | 194 |
195 | 195 |
196 TEST(UsingCachedData) { | 196 TEST(UsingCachedData) { |
197 v8::Isolate* isolate = CcTest::isolate(); | 197 v8::Isolate* isolate = CcTest::isolate(); |
198 v8::HandleScope handles(isolate); | 198 v8::HandleScope handles(isolate); |
199 v8::Local<v8::Context> context = v8::Context::New(isolate); | 199 v8::Local<v8::Context> context = v8::Context::New(isolate); |
200 v8::Context::Scope context_scope(context); | 200 v8::Context::Scope context_scope(context); |
201 CcTest::i_isolate()->stack_guard()->SetStackLimit(GetCurrentStackPosition() - | 201 CcTest::i_isolate()->stack_guard()->SetStackLimit( |
202 128 * 1024); | 202 i::GetCurrentStackPosition() - 128 * 1024); |
203 | 203 |
204 // Source containing functions that might be lazily compiled and all types | 204 // Source containing functions that might be lazily compiled and all types |
205 // of symbols (string, propertyName, regexp). | 205 // of symbols (string, propertyName, regexp). |
206 const char* source = | 206 const char* source = |
207 "var x = 42;" | 207 "var x = 42;" |
208 "function foo(a) { return function nolazy(b) { return a + b; } }" | 208 "function foo(a) { return function nolazy(b) { return a + b; } }" |
209 "function bar(a) { if (a) return function lazy(b) { return b; } }" | 209 "function bar(a) { if (a) return function lazy(b) { return b; } }" |
210 "var z = {'string': 'string literal', bareword: 'propertyName', " | 210 "var z = {'string': 'string literal', bareword: 'propertyName', " |
211 " 42: 'number literal', for: 'keyword as propertyName', " | 211 " 42: 'number literal', for: 'keyword as propertyName', " |
212 " f\\u006fr: 'keyword propertyname with escape'};" | 212 " f\\u006fr: 'keyword propertyname with escape'};" |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 // preparser. | 244 // preparser. |
245 | 245 |
246 // Make preparsing work for short scripts. | 246 // Make preparsing work for short scripts. |
247 i::FLAG_min_preparse_length = 0; | 247 i::FLAG_min_preparse_length = 0; |
248 i::FLAG_harmony_arrow_functions = true; | 248 i::FLAG_harmony_arrow_functions = true; |
249 | 249 |
250 v8::Isolate* isolate = CcTest::isolate(); | 250 v8::Isolate* isolate = CcTest::isolate(); |
251 v8::HandleScope handles(isolate); | 251 v8::HandleScope handles(isolate); |
252 v8::Local<v8::Context> context = v8::Context::New(isolate); | 252 v8::Local<v8::Context> context = v8::Context::New(isolate); |
253 v8::Context::Scope context_scope(context); | 253 v8::Context::Scope context_scope(context); |
254 CcTest::i_isolate()->stack_guard()->SetStackLimit(GetCurrentStackPosition() - | 254 CcTest::i_isolate()->stack_guard()->SetStackLimit( |
255 128 * 1024); | 255 i::GetCurrentStackPosition() - 128 * 1024); |
256 | 256 |
257 const char* good_code[] = { | 257 const char* good_code[] = { |
258 "function this_is_lazy() { var a; } function foo() { return 25; } foo();", | 258 "function this_is_lazy() { var a; } function foo() { return 25; } foo();", |
259 "var this_is_lazy = () => { var a; }; var foo = () => 25; foo();", | 259 "var this_is_lazy = () => { var a; }; var foo = () => 25; foo();", |
260 }; | 260 }; |
261 | 261 |
262 // Insert a syntax error inside the lazy function. | 262 // Insert a syntax error inside the lazy function. |
263 const char* bad_code[] = { | 263 const char* bad_code[] = { |
264 "function this_is_lazy() { if ( } function foo() { return 25; } foo();", | 264 "function this_is_lazy() { if ( } function foo() { return 25; } foo();", |
265 "var this_is_lazy = () => { if ( }; var foo = () => 25; foo();", | 265 "var this_is_lazy = () => { if ( }; var foo = () => 25; foo();", |
(...skipping 19 matching lines...) Expand all Loading... |
285 v8::ScriptCompiler::Compile(isolate, &bad_source)->Run(); | 285 v8::ScriptCompiler::Compile(isolate, &bad_source)->Run(); |
286 CHECK(result->IsInt32()); | 286 CHECK(result->IsInt32()); |
287 CHECK_EQ(25, result->Int32Value()); | 287 CHECK_EQ(25, result->Int32Value()); |
288 } | 288 } |
289 } | 289 } |
290 | 290 |
291 | 291 |
292 TEST(StandAlonePreParser) { | 292 TEST(StandAlonePreParser) { |
293 v8::V8::Initialize(); | 293 v8::V8::Initialize(); |
294 | 294 |
295 CcTest::i_isolate()->stack_guard()->SetStackLimit(GetCurrentStackPosition() - | 295 CcTest::i_isolate()->stack_guard()->SetStackLimit( |
296 128 * 1024); | 296 i::GetCurrentStackPosition() - 128 * 1024); |
297 | 297 |
298 const char* programs[] = { | 298 const char* programs[] = { |
299 "{label: 42}", | 299 "{label: 42}", |
300 "var x = 42;", | 300 "var x = 42;", |
301 "function foo(x, y) { return x + y; }", | 301 "function foo(x, y) { return x + y; }", |
302 "%ArgleBargle(glop);", | 302 "%ArgleBargle(glop);", |
303 "var x = new new Function('this.x = 42');", | 303 "var x = new new Function('this.x = 42');", |
304 "var f = (x, y) => x + y;", | 304 "var f = (x, y) => x + y;", |
305 NULL | 305 NULL |
306 }; | 306 }; |
(...skipping 15 matching lines...) Expand all Loading... |
322 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 322 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
323 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 323 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
324 CHECK(!log.HasError()); | 324 CHECK(!log.HasError()); |
325 } | 325 } |
326 } | 326 } |
327 | 327 |
328 | 328 |
329 TEST(StandAlonePreParserNoNatives) { | 329 TEST(StandAlonePreParserNoNatives) { |
330 v8::V8::Initialize(); | 330 v8::V8::Initialize(); |
331 | 331 |
332 CcTest::i_isolate()->stack_guard()->SetStackLimit(GetCurrentStackPosition() - | 332 CcTest::i_isolate()->stack_guard()->SetStackLimit( |
333 128 * 1024); | 333 i::GetCurrentStackPosition() - 128 * 1024); |
334 | 334 |
335 const char* programs[] = { | 335 const char* programs[] = { |
336 "%ArgleBargle(glop);", | 336 "%ArgleBargle(glop);", |
337 "var x = %_IsSmi(42);", | 337 "var x = %_IsSmi(42);", |
338 NULL | 338 NULL |
339 }; | 339 }; |
340 | 340 |
341 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); | 341 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); |
342 for (int i = 0; programs[i]; i++) { | 342 for (int i = 0; programs[i]; i++) { |
343 const char* program = programs[i]; | 343 const char* program = programs[i]; |
(...skipping 14 matching lines...) Expand all Loading... |
358 } | 358 } |
359 | 359 |
360 | 360 |
361 TEST(PreparsingObjectLiterals) { | 361 TEST(PreparsingObjectLiterals) { |
362 // Regression test for a bug where the symbol stream produced by PreParser | 362 // Regression test for a bug where the symbol stream produced by PreParser |
363 // didn't match what Parser wanted to consume. | 363 // didn't match what Parser wanted to consume. |
364 v8::Isolate* isolate = CcTest::isolate(); | 364 v8::Isolate* isolate = CcTest::isolate(); |
365 v8::HandleScope handles(isolate); | 365 v8::HandleScope handles(isolate); |
366 v8::Local<v8::Context> context = v8::Context::New(isolate); | 366 v8::Local<v8::Context> context = v8::Context::New(isolate); |
367 v8::Context::Scope context_scope(context); | 367 v8::Context::Scope context_scope(context); |
368 CcTest::i_isolate()->stack_guard()->SetStackLimit(GetCurrentStackPosition() - | 368 CcTest::i_isolate()->stack_guard()->SetStackLimit( |
369 128 * 1024); | 369 i::GetCurrentStackPosition() - 128 * 1024); |
370 | 370 |
371 { | 371 { |
372 const char* source = "var myo = {if: \"foo\"}; myo.if;"; | 372 const char* source = "var myo = {if: \"foo\"}; myo.if;"; |
373 v8::Local<v8::Value> result = ParserCacheCompileRun(source); | 373 v8::Local<v8::Value> result = ParserCacheCompileRun(source); |
374 CHECK(result->IsString()); | 374 CHECK(result->IsString()); |
375 v8::String::Utf8Value utf8(result); | 375 v8::String::Utf8Value utf8(result); |
376 CHECK_EQ("foo", *utf8); | 376 CHECK_EQ("foo", *utf8); |
377 } | 377 } |
378 | 378 |
379 { | 379 { |
(...skipping 11 matching lines...) Expand all Loading... |
391 v8::String::Utf8Value utf8(result); | 391 v8::String::Utf8Value utf8(result); |
392 CHECK_EQ("foo", *utf8); | 392 CHECK_EQ("foo", *utf8); |
393 } | 393 } |
394 } | 394 } |
395 | 395 |
396 | 396 |
397 TEST(RegressChromium62639) { | 397 TEST(RegressChromium62639) { |
398 v8::V8::Initialize(); | 398 v8::V8::Initialize(); |
399 i::Isolate* isolate = CcTest::i_isolate(); | 399 i::Isolate* isolate = CcTest::i_isolate(); |
400 | 400 |
401 isolate->stack_guard()->SetStackLimit(GetCurrentStackPosition() - 128 * 1024); | 401 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - |
| 402 128 * 1024); |
402 | 403 |
403 const char* program = "var x = 'something';\n" | 404 const char* program = "var x = 'something';\n" |
404 "escape: function() {}"; | 405 "escape: function() {}"; |
405 // Fails parsing expecting an identifier after "function". | 406 // Fails parsing expecting an identifier after "function". |
406 // Before fix, didn't check *ok after Expect(Token::Identifier, ok), | 407 // Before fix, didn't check *ok after Expect(Token::Identifier, ok), |
407 // and then used the invalid currently scanned literal. This always | 408 // and then used the invalid currently scanned literal. This always |
408 // failed in debug mode, and sometimes crashed in release mode. | 409 // failed in debug mode, and sometimes crashed in release mode. |
409 | 410 |
410 i::Utf8ToUtf16CharacterStream stream( | 411 i::Utf8ToUtf16CharacterStream stream( |
411 reinterpret_cast<const i::byte*>(program), | 412 reinterpret_cast<const i::byte*>(program), |
(...skipping 13 matching lines...) Expand all Loading... |
425 | 426 |
426 TEST(Regress928) { | 427 TEST(Regress928) { |
427 v8::V8::Initialize(); | 428 v8::V8::Initialize(); |
428 i::Isolate* isolate = CcTest::i_isolate(); | 429 i::Isolate* isolate = CcTest::i_isolate(); |
429 i::Factory* factory = isolate->factory(); | 430 i::Factory* factory = isolate->factory(); |
430 | 431 |
431 // Preparsing didn't consider the catch clause of a try statement | 432 // Preparsing didn't consider the catch clause of a try statement |
432 // as with-content, which made it assume that a function inside | 433 // as with-content, which made it assume that a function inside |
433 // the block could be lazily compiled, and an extra, unexpected, | 434 // the block could be lazily compiled, and an extra, unexpected, |
434 // entry was added to the data. | 435 // entry was added to the data. |
435 isolate->stack_guard()->SetStackLimit(GetCurrentStackPosition() - 128 * 1024); | 436 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - |
| 437 128 * 1024); |
436 | 438 |
437 const char* program = | 439 const char* program = |
438 "try { } catch (e) { var foo = function () { /* first */ } }" | 440 "try { } catch (e) { var foo = function () { /* first */ } }" |
439 "var bar = function () { /* second */ }"; | 441 "var bar = function () { /* second */ }"; |
440 | 442 |
441 v8::HandleScope handles(CcTest::isolate()); | 443 v8::HandleScope handles(CcTest::isolate()); |
442 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(program); | 444 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(program); |
443 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); | 445 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); |
444 i::CompleteParserRecorder log; | 446 i::CompleteParserRecorder log; |
445 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 447 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
(...skipping 22 matching lines...) Expand all Loading... |
468 i::FunctionEntry entry2 = pd.GetFunctionEntry(second_lbrace); | 470 i::FunctionEntry entry2 = pd.GetFunctionEntry(second_lbrace); |
469 CHECK(entry2.is_valid()); | 471 CHECK(entry2.is_valid()); |
470 CHECK_EQ('}', program[entry2.end_pos() - 1]); | 472 CHECK_EQ('}', program[entry2.end_pos() - 1]); |
471 delete sd; | 473 delete sd; |
472 } | 474 } |
473 | 475 |
474 | 476 |
475 TEST(PreParseOverflow) { | 477 TEST(PreParseOverflow) { |
476 v8::V8::Initialize(); | 478 v8::V8::Initialize(); |
477 | 479 |
478 CcTest::i_isolate()->stack_guard()->SetStackLimit(GetCurrentStackPosition() - | 480 CcTest::i_isolate()->stack_guard()->SetStackLimit( |
479 128 * 1024); | 481 i::GetCurrentStackPosition() - 128 * 1024); |
480 | 482 |
481 size_t kProgramSize = 1024 * 1024; | 483 size_t kProgramSize = 1024 * 1024; |
482 i::SmartArrayPointer<char> program(i::NewArray<char>(kProgramSize + 1)); | 484 i::SmartArrayPointer<char> program(i::NewArray<char>(kProgramSize + 1)); |
483 memset(program.get(), '(', kProgramSize); | 485 memset(program.get(), '(', kProgramSize); |
484 program[kProgramSize] = '\0'; | 486 program[kProgramSize] = '\0'; |
485 | 487 |
486 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); | 488 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); |
487 | 489 |
488 i::Utf8ToUtf16CharacterStream stream( | 490 i::Utf8ToUtf16CharacterStream stream( |
489 reinterpret_cast<const i::byte*>(program.get()), | 491 reinterpret_cast<const i::byte*>(program.get()), |
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1098 { NULL, NULL, NULL, i::EVAL_SCOPE, i::SLOPPY } | 1100 { NULL, NULL, NULL, i::EVAL_SCOPE, i::SLOPPY } |
1099 }; | 1101 }; |
1100 | 1102 |
1101 i::Isolate* isolate = CcTest::i_isolate(); | 1103 i::Isolate* isolate = CcTest::i_isolate(); |
1102 i::Factory* factory = isolate->factory(); | 1104 i::Factory* factory = isolate->factory(); |
1103 | 1105 |
1104 v8::HandleScope handles(CcTest::isolate()); | 1106 v8::HandleScope handles(CcTest::isolate()); |
1105 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); | 1107 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); |
1106 v8::Context::Scope context_scope(context); | 1108 v8::Context::Scope context_scope(context); |
1107 | 1109 |
1108 isolate->stack_guard()->SetStackLimit(GetCurrentStackPosition() - 128 * 1024); | 1110 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - |
| 1111 128 * 1024); |
1109 | 1112 |
1110 for (int i = 0; source_data[i].outer_prefix; i++) { | 1113 for (int i = 0; source_data[i].outer_prefix; i++) { |
1111 int kPrefixLen = Utf8LengthHelper(source_data[i].outer_prefix); | 1114 int kPrefixLen = Utf8LengthHelper(source_data[i].outer_prefix); |
1112 int kInnerLen = Utf8LengthHelper(source_data[i].inner_source); | 1115 int kInnerLen = Utf8LengthHelper(source_data[i].inner_source); |
1113 int kSuffixLen = Utf8LengthHelper(source_data[i].outer_suffix); | 1116 int kSuffixLen = Utf8LengthHelper(source_data[i].outer_suffix); |
1114 int kPrefixByteLen = i::StrLength(source_data[i].outer_prefix); | 1117 int kPrefixByteLen = i::StrLength(source_data[i].outer_prefix); |
1115 int kInnerByteLen = i::StrLength(source_data[i].inner_source); | 1118 int kInnerByteLen = i::StrLength(source_data[i].inner_source); |
1116 int kSuffixByteLen = i::StrLength(source_data[i].outer_suffix); | 1119 int kSuffixByteLen = i::StrLength(source_data[i].outer_suffix); |
1117 int kProgramSize = kPrefixLen + kInnerLen + kSuffixLen; | 1120 int kProgramSize = kPrefixLen + kInnerLen + kSuffixLen; |
1118 int kProgramByteSize = kPrefixByteLen + kInnerByteLen + kSuffixByteLen; | 1121 int kProgramByteSize = kPrefixByteLen + kInnerByteLen + kSuffixByteLen; |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1433 "\n", | 1436 "\n", |
1434 ";\n", | 1437 ";\n", |
1435 "\n;", | 1438 "\n;", |
1436 NULL | 1439 NULL |
1437 }; | 1440 }; |
1438 | 1441 |
1439 v8::HandleScope handles(CcTest::isolate()); | 1442 v8::HandleScope handles(CcTest::isolate()); |
1440 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); | 1443 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); |
1441 v8::Context::Scope context_scope(context); | 1444 v8::Context::Scope context_scope(context); |
1442 | 1445 |
1443 CcTest::i_isolate()->stack_guard()->SetStackLimit(GetCurrentStackPosition() - | 1446 CcTest::i_isolate()->stack_guard()->SetStackLimit( |
1444 128 * 1024); | 1447 i::GetCurrentStackPosition() - 128 * 1024); |
1445 | 1448 |
1446 static const ParserFlag flags1[] = {kAllowLazy, kAllowHarmonyScoping, | 1449 static const ParserFlag flags1[] = {kAllowLazy, kAllowHarmonyScoping, |
1447 kAllowModules, kAllowGenerators, | 1450 kAllowModules, kAllowGenerators, |
1448 kAllowArrowFunctions}; | 1451 kAllowArrowFunctions}; |
1449 for (int i = 0; context_data[i][0] != NULL; ++i) { | 1452 for (int i = 0; context_data[i][0] != NULL; ++i) { |
1450 for (int j = 0; statement_data[j] != NULL; ++j) { | 1453 for (int j = 0; statement_data[j] != NULL; ++j) { |
1451 for (int k = 0; termination_data[k] != NULL; ++k) { | 1454 for (int k = 0; termination_data[k] != NULL; ++k) { |
1452 int kPrefixLen = i::StrLength(context_data[i][0]); | 1455 int kPrefixLen = i::StrLength(context_data[i][0]); |
1453 int kStatementLen = i::StrLength(statement_data[j]); | 1456 int kStatementLen = i::StrLength(statement_data[j]); |
1454 int kTerminationLen = i::StrLength(termination_data[k]); | 1457 int kTerminationLen = i::StrLength(termination_data[k]); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1509 const char* statement_data[], | 1512 const char* statement_data[], |
1510 ParserSyncTestResult result, | 1513 ParserSyncTestResult result, |
1511 const ParserFlag* flags = NULL, | 1514 const ParserFlag* flags = NULL, |
1512 int flags_len = 0, | 1515 int flags_len = 0, |
1513 const ParserFlag* always_true_flags = NULL, | 1516 const ParserFlag* always_true_flags = NULL, |
1514 int always_true_flags_len = 0) { | 1517 int always_true_flags_len = 0) { |
1515 v8::HandleScope handles(CcTest::isolate()); | 1518 v8::HandleScope handles(CcTest::isolate()); |
1516 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); | 1519 v8::Handle<v8::Context> context = v8::Context::New(CcTest::isolate()); |
1517 v8::Context::Scope context_scope(context); | 1520 v8::Context::Scope context_scope(context); |
1518 | 1521 |
1519 CcTest::i_isolate()->stack_guard()->SetStackLimit(GetCurrentStackPosition() - | 1522 CcTest::i_isolate()->stack_guard()->SetStackLimit( |
1520 128 * 1024); | 1523 i::GetCurrentStackPosition() - 128 * 1024); |
1521 | 1524 |
1522 static const ParserFlag default_flags[] = { | 1525 static const ParserFlag default_flags[] = { |
1523 kAllowLazy, kAllowHarmonyScoping, kAllowModules, | 1526 kAllowLazy, kAllowHarmonyScoping, kAllowModules, |
1524 kAllowGenerators, kAllowNativesSyntax, kAllowArrowFunctions, | 1527 kAllowGenerators, kAllowNativesSyntax, kAllowArrowFunctions, |
1525 kAllowClasses}; | 1528 kAllowClasses}; |
1526 ParserFlag* generated_flags = NULL; | 1529 ParserFlag* generated_flags = NULL; |
1527 if (flags == NULL) { | 1530 if (flags == NULL) { |
1528 flags = default_flags; | 1531 flags = default_flags; |
1529 flags_len = arraysize(default_flags); | 1532 flags_len = arraysize(default_flags); |
1530 if (always_true_flags != NULL) { | 1533 if (always_true_flags != NULL) { |
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2244 } | 2247 } |
2245 | 2248 |
2246 | 2249 |
2247 TEST(DontRegressPreParserDataSizes) { | 2250 TEST(DontRegressPreParserDataSizes) { |
2248 // These tests make sure that Parser doesn't start producing less "preparse | 2251 // These tests make sure that Parser doesn't start producing less "preparse |
2249 // data" (data which the embedder can cache). | 2252 // data" (data which the embedder can cache). |
2250 v8::V8::Initialize(); | 2253 v8::V8::Initialize(); |
2251 v8::Isolate* isolate = CcTest::isolate(); | 2254 v8::Isolate* isolate = CcTest::isolate(); |
2252 v8::HandleScope handles(isolate); | 2255 v8::HandleScope handles(isolate); |
2253 | 2256 |
2254 CcTest::i_isolate()->stack_guard()->SetStackLimit(GetCurrentStackPosition() - | 2257 CcTest::i_isolate()->stack_guard()->SetStackLimit( |
2255 128 * 1024); | 2258 i::GetCurrentStackPosition() - 128 * 1024); |
2256 | 2259 |
2257 struct TestCase { | 2260 struct TestCase { |
2258 const char* program; | 2261 const char* program; |
2259 int functions; | 2262 int functions; |
2260 } test_cases[] = { | 2263 } test_cases[] = { |
2261 // No functions. | 2264 // No functions. |
2262 {"var x = 42;", 0}, | 2265 {"var x = 42;", 0}, |
2263 // Functions. | 2266 // Functions. |
2264 {"function foo() {}", 1}, {"function foo() {} function bar() {}", 2}, | 2267 {"function foo() {}", 1}, {"function foo() {} function bar() {}", 2}, |
2265 // Getter / setter functions are recorded as functions if they're on the top | 2268 // Getter / setter functions are recorded as functions if they're on the top |
(...skipping 1116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3382 const char* statement_data[] = { | 3385 const char* statement_data[] = { |
3383 "super = x", | 3386 "super = x", |
3384 "y = super", | 3387 "y = super", |
3385 "f(super)", | 3388 "f(super)", |
3386 NULL}; | 3389 NULL}; |
3387 | 3390 |
3388 static const ParserFlag always_flags[] = {kAllowClasses}; | 3391 static const ParserFlag always_flags[] = {kAllowClasses}; |
3389 RunParserSyncTest(context_data, statement_data, kError, NULL, 0, | 3392 RunParserSyncTest(context_data, statement_data, kError, NULL, 0, |
3390 always_flags, arraysize(always_flags)); | 3393 always_flags, arraysize(always_flags)); |
3391 } | 3394 } |
OLD | NEW |