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 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 CcTest::i_isolate()->stack_guard()->SetStackLimit( | 150 CcTest::i_isolate()->stack_guard()->SetStackLimit( |
151 i::GetCurrentStackPosition() - 128 * 1024); | 151 i::GetCurrentStackPosition() - 128 * 1024); |
152 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); | 152 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); |
153 for (int i = 0; tests[i]; i++) { | 153 for (int i = 0; tests[i]; i++) { |
154 const i::byte* source = | 154 const i::byte* source = |
155 reinterpret_cast<const i::byte*>(tests[i]); | 155 reinterpret_cast<const i::byte*>(tests[i]); |
156 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(tests[i])); | 156 i::Utf8ToUtf16CharacterStream stream(source, i::StrLength(tests[i])); |
157 i::CompleteParserRecorder log; | 157 i::CompleteParserRecorder log; |
158 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 158 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
159 scanner.Initialize(&stream); | 159 scanner.Initialize(&stream); |
160 i::PreParser preparser(&scanner, &log, stack_limit); | 160 i::PreParser preparser(CcTest::i_isolate(), &scanner, &log, 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::PreParser preparser(&scanner, &log, stack_limit); | 174 i::PreParser preparser(CcTest::i_isolate(), &scanner, &log, stack_limit); |
175 preparser.set_allow_lazy(true); | 175 preparser.set_allow_lazy(true); |
176 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 176 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
177 // Even in the case of a syntax error, kPreParseSuccess is returned. | 177 // Even in the case of a syntax error, kPreParseSuccess is returned. |
178 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 178 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
179 CHECK(log.HasError()); | 179 CHECK(log.HasError()); |
180 } | 180 } |
181 } | 181 } |
182 | 182 |
183 | 183 |
184 class ScriptResource : public v8::String::ExternalOneByteStringResource { | 184 class ScriptResource : public v8::String::ExternalOneByteStringResource { |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
310 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); | 310 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); |
311 for (int i = 0; programs[i]; i++) { | 311 for (int i = 0; programs[i]; i++) { |
312 const char* program = programs[i]; | 312 const char* program = programs[i]; |
313 i::Utf8ToUtf16CharacterStream stream( | 313 i::Utf8ToUtf16CharacterStream stream( |
314 reinterpret_cast<const i::byte*>(program), | 314 reinterpret_cast<const i::byte*>(program), |
315 static_cast<unsigned>(strlen(program))); | 315 static_cast<unsigned>(strlen(program))); |
316 i::CompleteParserRecorder log; | 316 i::CompleteParserRecorder log; |
317 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 317 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
318 scanner.Initialize(&stream); | 318 scanner.Initialize(&stream); |
319 | 319 |
320 i::PreParser preparser(&scanner, &log, stack_limit); | 320 i::PreParser preparser(CcTest::i_isolate(), &scanner, &log, stack_limit); |
321 preparser.set_allow_lazy(true); | 321 preparser.set_allow_lazy(true); |
322 preparser.set_allow_natives(true); | 322 preparser.set_allow_natives(true); |
323 preparser.set_allow_harmony_arrow_functions(true); | 323 preparser.set_allow_harmony_arrow_functions(true); |
324 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 324 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
325 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 325 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
326 CHECK(!log.HasError()); | 326 CHECK(!log.HasError()); |
327 } | 327 } |
328 } | 328 } |
329 | 329 |
330 | 330 |
(...skipping 13 matching lines...) Expand all Loading... |
344 for (int i = 0; programs[i]; i++) { | 344 for (int i = 0; programs[i]; i++) { |
345 const char* program = programs[i]; | 345 const char* program = programs[i]; |
346 i::Utf8ToUtf16CharacterStream stream( | 346 i::Utf8ToUtf16CharacterStream stream( |
347 reinterpret_cast<const i::byte*>(program), | 347 reinterpret_cast<const i::byte*>(program), |
348 static_cast<unsigned>(strlen(program))); | 348 static_cast<unsigned>(strlen(program))); |
349 i::CompleteParserRecorder log; | 349 i::CompleteParserRecorder log; |
350 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 350 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
351 scanner.Initialize(&stream); | 351 scanner.Initialize(&stream); |
352 | 352 |
353 // Preparser defaults to disallowing natives syntax. | 353 // Preparser defaults to disallowing natives syntax. |
354 i::PreParser preparser(&scanner, &log, stack_limit); | 354 i::PreParser preparser(CcTest::i_isolate(), &scanner, &log, stack_limit); |
355 preparser.set_allow_lazy(true); | 355 preparser.set_allow_lazy(true); |
356 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 356 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
357 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 357 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
358 CHECK(log.HasError()); | 358 CHECK(log.HasError()); |
359 } | 359 } |
360 } | 360 } |
361 | 361 |
362 | 362 |
363 TEST(PreparsingObjectLiterals) { | 363 TEST(PreparsingObjectLiterals) { |
364 // Regression test for a bug where the symbol stream produced by PreParser | 364 // Regression test for a bug where the symbol stream produced by PreParser |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
409 // Before fix, didn't check *ok after Expect(Token::Identifier, ok), | 409 // Before fix, didn't check *ok after Expect(Token::Identifier, ok), |
410 // and then used the invalid currently scanned literal. This always | 410 // and then used the invalid currently scanned literal. This always |
411 // failed in debug mode, and sometimes crashed in release mode. | 411 // failed in debug mode, and sometimes crashed in release mode. |
412 | 412 |
413 i::Utf8ToUtf16CharacterStream stream( | 413 i::Utf8ToUtf16CharacterStream stream( |
414 reinterpret_cast<const i::byte*>(program), | 414 reinterpret_cast<const i::byte*>(program), |
415 static_cast<unsigned>(strlen(program))); | 415 static_cast<unsigned>(strlen(program))); |
416 i::CompleteParserRecorder log; | 416 i::CompleteParserRecorder log; |
417 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 417 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
418 scanner.Initialize(&stream); | 418 scanner.Initialize(&stream); |
419 i::PreParser preparser(&scanner, &log, | 419 i::PreParser preparser(CcTest::i_isolate(), &scanner, &log, |
420 CcTest::i_isolate()->stack_guard()->real_climit()); | 420 CcTest::i_isolate()->stack_guard()->real_climit()); |
421 preparser.set_allow_lazy(true); | 421 preparser.set_allow_lazy(true); |
422 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 422 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
423 // Even in the case of a syntax error, kPreParseSuccess is returned. | 423 // Even in the case of a syntax error, kPreParseSuccess is returned. |
424 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 424 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
425 CHECK(log.HasError()); | 425 CHECK(log.HasError()); |
426 } | 426 } |
427 | 427 |
428 | 428 |
429 TEST(Regress928) { | 429 TEST(Regress928) { |
(...skipping 11 matching lines...) Expand all Loading... |
441 const char* program = | 441 const char* program = |
442 "try { } catch (e) { var foo = function () { /* first */ } }" | 442 "try { } catch (e) { var foo = function () { /* first */ } }" |
443 "var bar = function () { /* second */ }"; | 443 "var bar = function () { /* second */ }"; |
444 | 444 |
445 v8::HandleScope handles(CcTest::isolate()); | 445 v8::HandleScope handles(CcTest::isolate()); |
446 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(program); | 446 i::Handle<i::String> source = factory->NewStringFromAsciiChecked(program); |
447 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); | 447 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); |
448 i::CompleteParserRecorder log; | 448 i::CompleteParserRecorder log; |
449 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 449 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
450 scanner.Initialize(&stream); | 450 scanner.Initialize(&stream); |
451 i::PreParser preparser(&scanner, &log, | 451 i::PreParser preparser(CcTest::i_isolate(), &scanner, &log, |
452 CcTest::i_isolate()->stack_guard()->real_climit()); | 452 CcTest::i_isolate()->stack_guard()->real_climit()); |
453 preparser.set_allow_lazy(true); | 453 preparser.set_allow_lazy(true); |
454 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 454 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
455 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 455 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
456 i::ScriptData* sd = log.GetScriptData(); | 456 i::ScriptData* sd = log.GetScriptData(); |
457 i::ParseData* pd = i::ParseData::FromCachedData(sd); | 457 i::ParseData* pd = i::ParseData::FromCachedData(sd); |
458 pd->Initialize(); | 458 pd->Initialize(); |
459 | 459 |
460 int first_function = | 460 int first_function = |
461 static_cast<int>(strstr(program, "function") - program); | 461 static_cast<int>(strstr(program, "function") - program); |
(...skipping 28 matching lines...) Expand all Loading... |
490 | 490 |
491 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); | 491 uintptr_t stack_limit = CcTest::i_isolate()->stack_guard()->real_climit(); |
492 | 492 |
493 i::Utf8ToUtf16CharacterStream stream( | 493 i::Utf8ToUtf16CharacterStream stream( |
494 reinterpret_cast<const i::byte*>(program.get()), | 494 reinterpret_cast<const i::byte*>(program.get()), |
495 static_cast<unsigned>(kProgramSize)); | 495 static_cast<unsigned>(kProgramSize)); |
496 i::CompleteParserRecorder log; | 496 i::CompleteParserRecorder log; |
497 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 497 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
498 scanner.Initialize(&stream); | 498 scanner.Initialize(&stream); |
499 | 499 |
500 i::PreParser preparser(&scanner, &log, stack_limit); | 500 i::PreParser preparser(CcTest::i_isolate(), &scanner, &log, stack_limit); |
501 preparser.set_allow_lazy(true); | 501 preparser.set_allow_lazy(true); |
502 preparser.set_allow_harmony_arrow_functions(true); | 502 preparser.set_allow_harmony_arrow_functions(true); |
503 i::PreParser::PreParseResult result = preparser.PreParseProgram(); | 503 i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
504 CHECK_EQ(i::PreParser::kPreParseStackOverflow, result); | 504 CHECK_EQ(i::PreParser::kPreParseStackOverflow, result); |
505 } | 505 } |
506 | 506 |
507 | 507 |
508 class TestExternalResource: public v8::String::ExternalStringResource { | 508 class TestExternalResource: public v8::String::ExternalStringResource { |
509 public: | 509 public: |
510 explicit TestExternalResource(uint16_t* data, int length) | 510 explicit TestExternalResource(uint16_t* data, int length) |
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
798 reinterpret_cast<const i::byte*>(re_source), | 798 reinterpret_cast<const i::byte*>(re_source), |
799 static_cast<unsigned>(strlen(re_source))); | 799 static_cast<unsigned>(strlen(re_source))); |
800 i::HandleScope scope(CcTest::i_isolate()); | 800 i::HandleScope scope(CcTest::i_isolate()); |
801 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); | 801 i::Scanner scanner(CcTest::i_isolate()->unicode_cache()); |
802 scanner.Initialize(&stream); | 802 scanner.Initialize(&stream); |
803 | 803 |
804 i::Token::Value start = scanner.peek(); | 804 i::Token::Value start = scanner.peek(); |
805 CHECK(start == i::Token::DIV || start == i::Token::ASSIGN_DIV); | 805 CHECK(start == i::Token::DIV || start == i::Token::ASSIGN_DIV); |
806 CHECK(scanner.ScanRegExpPattern(start == i::Token::ASSIGN_DIV)); | 806 CHECK(scanner.ScanRegExpPattern(start == i::Token::ASSIGN_DIV)); |
807 scanner.Next(); // Current token is now the regexp literal. | 807 scanner.Next(); // Current token is now the regexp literal. |
808 i::Zone zone(CcTest::i_isolate()); | 808 i::Zone zone; |
809 i::AstValueFactory ast_value_factory(&zone, | 809 i::AstValueFactory ast_value_factory(&zone, |
810 CcTest::i_isolate()->heap()->HashSeed()); | 810 CcTest::i_isolate()->heap()->HashSeed()); |
811 ast_value_factory.Internalize(CcTest::i_isolate()); | 811 ast_value_factory.Internalize(CcTest::i_isolate()); |
812 i::Handle<i::String> val = | 812 i::Handle<i::String> val = |
813 scanner.CurrentSymbol(&ast_value_factory)->string(); | 813 scanner.CurrentSymbol(&ast_value_factory)->string(); |
814 i::DisallowHeapAllocation no_alloc; | 814 i::DisallowHeapAllocation no_alloc; |
815 i::String::FlatContent content = val->GetFlatContent(); | 815 i::String::FlatContent content = val->GetFlatContent(); |
816 CHECK(content.IsOneByte()); | 816 CHECK(content.IsOneByte()); |
817 i::Vector<const uint8_t> actual = content.ToOneByteVector(); | 817 i::Vector<const uint8_t> actual = content.ToOneByteVector(); |
818 for (int i = 0; i < actual.length(); i++) { | 818 for (int i = 0; i < actual.length(); i++) { |
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1399 | 1399 |
1400 uintptr_t stack_limit = isolate->stack_guard()->real_climit(); | 1400 uintptr_t stack_limit = isolate->stack_guard()->real_climit(); |
1401 int preparser_materialized_literals = -1; | 1401 int preparser_materialized_literals = -1; |
1402 int parser_materialized_literals = -2; | 1402 int parser_materialized_literals = -2; |
1403 | 1403 |
1404 // Preparse the data. | 1404 // Preparse the data. |
1405 i::CompleteParserRecorder log; | 1405 i::CompleteParserRecorder log; |
1406 { | 1406 { |
1407 i::Scanner scanner(isolate->unicode_cache()); | 1407 i::Scanner scanner(isolate->unicode_cache()); |
1408 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); | 1408 i::GenericStringUtf16CharacterStream stream(source, 0, source->length()); |
1409 i::PreParser preparser(&scanner, &log, stack_limit); | 1409 i::PreParser preparser(CcTest::i_isolate(), &scanner, &log, stack_limit); |
1410 SetParserFlags(&preparser, flags); | 1410 SetParserFlags(&preparser, flags); |
1411 scanner.Initialize(&stream); | 1411 scanner.Initialize(&stream); |
1412 i::PreParser::PreParseResult result = preparser.PreParseProgram( | 1412 i::PreParser::PreParseResult result = preparser.PreParseProgram( |
1413 &preparser_materialized_literals); | 1413 &preparser_materialized_literals); |
1414 CHECK_EQ(i::PreParser::kPreParseSuccess, result); | 1414 CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
1415 } | 1415 } |
1416 | 1416 |
1417 bool preparse_error = log.HasError(); | 1417 bool preparse_error = log.HasError(); |
1418 | 1418 |
1419 // Parse the data | 1419 // Parse the data |
(...skipping 1669 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3089 " assertResult([2]);" | 3089 " assertResult([2]);" |
3090 " return f;" | 3090 " return f;" |
3091 "};" | 3091 "};" |
3092 "h();"; | 3092 "h();"; |
3093 | 3093 |
3094 i::ScopedVector<char> program(Utf8LengthHelper(src) + 1); | 3094 i::ScopedVector<char> program(Utf8LengthHelper(src) + 1); |
3095 i::SNPrintF(program, "%s", src); | 3095 i::SNPrintF(program, "%s", src); |
3096 i::Handle<i::String> source = factory->InternalizeUtf8String(program.start()); | 3096 i::Handle<i::String> source = factory->InternalizeUtf8String(program.start()); |
3097 source->PrintOn(stdout); | 3097 source->PrintOn(stdout); |
3098 printf("\n"); | 3098 printf("\n"); |
3099 i::Zone zone(isolate); | 3099 i::Zone zone; |
3100 v8::Local<v8::Value> v = CompileRun(src); | 3100 v8::Local<v8::Value> v = CompileRun(src); |
3101 i::Handle<i::Object> o = v8::Utils::OpenHandle(*v); | 3101 i::Handle<i::Object> o = v8::Utils::OpenHandle(*v); |
3102 i::Handle<i::JSFunction> f = i::Handle<i::JSFunction>::cast(o); | 3102 i::Handle<i::JSFunction> f = i::Handle<i::JSFunction>::cast(o); |
3103 i::Context* context = f->context(); | 3103 i::Context* context = f->context(); |
3104 i::AstValueFactory avf(&zone, isolate->heap()->HashSeed()); | 3104 i::AstValueFactory avf(&zone, isolate->heap()->HashSeed()); |
3105 avf.Internalize(isolate); | 3105 avf.Internalize(isolate); |
3106 const i::AstRawString* name = avf.GetOneByteString("result"); | 3106 const i::AstRawString* name = avf.GetOneByteString("result"); |
3107 i::Handle<i::String> str = name->string(); | 3107 i::Handle<i::String> str = name->string(); |
3108 CHECK(str->IsInternalizedString()); | 3108 CHECK(str->IsInternalizedString()); |
3109 i::Scope* script_scope = | 3109 i::Scope* script_scope = |
3110 new (&zone) i::Scope(NULL, i::SCRIPT_SCOPE, &avf, &zone); | 3110 new (&zone) i::Scope(isolate, &zone, NULL, i::SCRIPT_SCOPE, &avf); |
3111 script_scope->Initialize(); | 3111 script_scope->Initialize(); |
3112 i::Scope* s = i::Scope::DeserializeScopeChain(context, script_scope, &zone); | 3112 i::Scope* s = |
| 3113 i::Scope::DeserializeScopeChain(isolate, &zone, context, script_scope); |
3113 DCHECK(s != script_scope); | 3114 DCHECK(s != script_scope); |
3114 DCHECK(name != NULL); | 3115 DCHECK(name != NULL); |
3115 | 3116 |
3116 // Get result from h's function context (that is f's context) | 3117 // Get result from h's function context (that is f's context) |
3117 i::Variable* var = s->Lookup(name); | 3118 i::Variable* var = s->Lookup(name); |
3118 | 3119 |
3119 CHECK(var != NULL); | 3120 CHECK(var != NULL); |
3120 // Maybe assigned should survive deserialization | 3121 // Maybe assigned should survive deserialization |
3121 CHECK(var->maybe_assigned() == i::kMaybeAssigned); | 3122 CHECK(var->maybe_assigned() == i::kMaybeAssigned); |
3122 // TODO(sigurds) Figure out if is_used should survive context serialization. | 3123 // TODO(sigurds) Figure out if is_used should survive context serialization. |
(...skipping 15 matching lines...) Expand all Loading... |
3138 " };" | 3139 " };" |
3139 " return g;" | 3140 " return g;" |
3140 " }" | 3141 " }" |
3141 "f(0);"; | 3142 "f(0);"; |
3142 | 3143 |
3143 i::ScopedVector<char> program(Utf8LengthHelper(src) + 1); | 3144 i::ScopedVector<char> program(Utf8LengthHelper(src) + 1); |
3144 i::SNPrintF(program, "%s", src); | 3145 i::SNPrintF(program, "%s", src); |
3145 i::Handle<i::String> source = factory->InternalizeUtf8String(program.start()); | 3146 i::Handle<i::String> source = factory->InternalizeUtf8String(program.start()); |
3146 source->PrintOn(stdout); | 3147 source->PrintOn(stdout); |
3147 printf("\n"); | 3148 printf("\n"); |
3148 i::Zone zone(isolate); | 3149 i::Zone zone; |
3149 v8::Local<v8::Value> v = CompileRun(src); | 3150 v8::Local<v8::Value> v = CompileRun(src); |
3150 i::Handle<i::Object> o = v8::Utils::OpenHandle(*v); | 3151 i::Handle<i::Object> o = v8::Utils::OpenHandle(*v); |
3151 i::Handle<i::JSFunction> f = i::Handle<i::JSFunction>::cast(o); | 3152 i::Handle<i::JSFunction> f = i::Handle<i::JSFunction>::cast(o); |
3152 i::Context* context = f->context(); | 3153 i::Context* context = f->context(); |
3153 i::AstValueFactory avf(&zone, isolate->heap()->HashSeed()); | 3154 i::AstValueFactory avf(&zone, isolate->heap()->HashSeed()); |
3154 avf.Internalize(isolate); | 3155 avf.Internalize(isolate); |
3155 | 3156 |
3156 i::Scope* script_scope = | 3157 i::Scope* script_scope = |
3157 new (&zone) i::Scope(NULL, i::SCRIPT_SCOPE, &avf, &zone); | 3158 new (&zone) i::Scope(isolate, &zone, NULL, i::SCRIPT_SCOPE, &avf); |
3158 script_scope->Initialize(); | 3159 script_scope->Initialize(); |
3159 i::Scope* s = i::Scope::DeserializeScopeChain(context, script_scope, &zone); | 3160 i::Scope* s = |
| 3161 i::Scope::DeserializeScopeChain(isolate, &zone, context, script_scope); |
3160 DCHECK(s != script_scope); | 3162 DCHECK(s != script_scope); |
3161 const i::AstRawString* name_x = avf.GetOneByteString("x"); | 3163 const i::AstRawString* name_x = avf.GetOneByteString("x"); |
3162 | 3164 |
3163 // Get result from f's function context (that is g's outer context) | 3165 // Get result from f's function context (that is g's outer context) |
3164 i::Variable* var_x = s->Lookup(name_x); | 3166 i::Variable* var_x = s->Lookup(name_x); |
3165 CHECK(var_x != NULL); | 3167 CHECK(var_x != NULL); |
3166 CHECK(var_x->maybe_assigned() == i::kMaybeAssigned); | 3168 CHECK(var_x->maybe_assigned() == i::kMaybeAssigned); |
3167 } | 3169 } |
3168 | 3170 |
3169 | 3171 |
(...skipping 15 matching lines...) Expand all Loading... |
3185 " module B {}" | 3187 " module B {}" |
3186 " export module C {}" | 3188 " export module C {}" |
3187 "};" | 3189 "};" |
3188 "A.f"; | 3190 "A.f"; |
3189 | 3191 |
3190 i::ScopedVector<char> program(Utf8LengthHelper(src) + 1); | 3192 i::ScopedVector<char> program(Utf8LengthHelper(src) + 1); |
3191 i::SNPrintF(program, "%s", src); | 3193 i::SNPrintF(program, "%s", src); |
3192 i::Handle<i::String> source = factory->InternalizeUtf8String(program.start()); | 3194 i::Handle<i::String> source = factory->InternalizeUtf8String(program.start()); |
3193 source->PrintOn(stdout); | 3195 source->PrintOn(stdout); |
3194 printf("\n"); | 3196 printf("\n"); |
3195 i::Zone zone(isolate); | 3197 i::Zone zone; |
3196 v8::Local<v8::Value> v = CompileRun(src); | 3198 v8::Local<v8::Value> v = CompileRun(src); |
3197 i::Handle<i::Object> o = v8::Utils::OpenHandle(*v); | 3199 i::Handle<i::Object> o = v8::Utils::OpenHandle(*v); |
3198 i::Handle<i::JSFunction> f = i::Handle<i::JSFunction>::cast(o); | 3200 i::Handle<i::JSFunction> f = i::Handle<i::JSFunction>::cast(o); |
3199 i::Context* context = f->context(); | 3201 i::Context* context = f->context(); |
3200 i::AstValueFactory avf(&zone, isolate->heap()->HashSeed()); | 3202 i::AstValueFactory avf(&zone, isolate->heap()->HashSeed()); |
3201 avf.Internalize(isolate); | 3203 avf.Internalize(isolate); |
3202 | 3204 |
3203 i::Scope* script_scope = | 3205 i::Scope* script_scope = |
3204 new (&zone) i::Scope(NULL, i::SCRIPT_SCOPE, &avf, &zone); | 3206 new (&zone) i::Scope(isolate, &zone, NULL, i::SCRIPT_SCOPE, &avf); |
3205 script_scope->Initialize(); | 3207 script_scope->Initialize(); |
3206 i::Scope* s = i::Scope::DeserializeScopeChain(context, script_scope, &zone); | 3208 i::Scope* s = |
| 3209 i::Scope::DeserializeScopeChain(isolate, &zone, context, script_scope); |
3207 DCHECK(s != script_scope); | 3210 DCHECK(s != script_scope); |
3208 const i::AstRawString* name_x = avf.GetOneByteString("x"); | 3211 const i::AstRawString* name_x = avf.GetOneByteString("x"); |
3209 const i::AstRawString* name_f = avf.GetOneByteString("f"); | 3212 const i::AstRawString* name_f = avf.GetOneByteString("f"); |
3210 const i::AstRawString* name_y = avf.GetOneByteString("y"); | 3213 const i::AstRawString* name_y = avf.GetOneByteString("y"); |
3211 const i::AstRawString* name_B = avf.GetOneByteString("B"); | 3214 const i::AstRawString* name_B = avf.GetOneByteString("B"); |
3212 const i::AstRawString* name_C = avf.GetOneByteString("C"); | 3215 const i::AstRawString* name_C = avf.GetOneByteString("C"); |
3213 | 3216 |
3214 // Get result from h's function context (that is f's context) | 3217 // Get result from h's function context (that is f's context) |
3215 i::Variable* var_x = s->Lookup(name_x); | 3218 i::Variable* var_x = s->Lookup(name_x); |
3216 CHECK(var_x != NULL); | 3219 CHECK(var_x != NULL); |
(...skipping 1441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4658 | 4661 |
4659 static const ParserFlag always_flags[] = { | 4662 static const ParserFlag always_flags[] = { |
4660 kAllowHarmonyClasses, | 4663 kAllowHarmonyClasses, |
4661 kAllowHarmonyComputedPropertyNames, | 4664 kAllowHarmonyComputedPropertyNames, |
4662 kAllowHarmonyObjectLiterals, | 4665 kAllowHarmonyObjectLiterals, |
4663 kAllowHarmonySloppy, | 4666 kAllowHarmonySloppy, |
4664 }; | 4667 }; |
4665 RunParserSyncTest(context_data, error_data, kError, NULL, 0, | 4668 RunParserSyncTest(context_data, error_data, kError, NULL, 0, |
4666 always_flags, arraysize(always_flags)); | 4669 always_flags, arraysize(always_flags)); |
4667 } | 4670 } |
OLD | NEW |