| Index: test/cctest/test-parsing.cc
|
| diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc
|
| index 32a545d7a9179e7869f2edba80a47cac95af6410..f55a625d6b6b5ff72a18525c6ff2667d26c9025b 100644
|
| --- a/test/cctest/test-parsing.cc
|
| +++ b/test/cctest/test-parsing.cc
|
| @@ -211,12 +211,15 @@ TEST(UsingCachedData) {
|
| "var v = /RegExp Literal/;"
|
| "var w = /RegExp Literal\\u0020With Escape/gin;"
|
| "var y = { get getter() { return 42; }, "
|
| - " set setter(v) { this.value = v; }};";
|
| + " set setter(v) { this.value = v; }};"
|
| + "var f = a => function (b) { return a + b; };"
|
| + "var g = a => b => a + b;";
|
| int source_length = i::StrLength(source);
|
|
|
| // ScriptResource will be deleted when the corresponding String is GCd.
|
| v8::ScriptCompiler::Source script_source(v8::String::NewExternal(
|
| isolate, new ScriptResource(source, source_length)));
|
| + i::FLAG_harmony_arrow_functions = true;
|
| i::FLAG_min_preparse_length = 0;
|
| v8::ScriptCompiler::Compile(isolate, &script_source,
|
| v8::ScriptCompiler::kProduceParserCache);
|
| @@ -240,6 +243,7 @@ TEST(PreparseFunctionDataIsUsed) {
|
|
|
| // Make preparsing work for short scripts.
|
| i::FLAG_min_preparse_length = 0;
|
| + i::FLAG_harmony_arrow_functions = true;
|
|
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope handles(isolate);
|
| @@ -248,32 +252,38 @@ TEST(PreparseFunctionDataIsUsed) {
|
| CcTest::i_isolate()->stack_guard()->SetStackLimit(GetCurrentStackPosition() -
|
| 128 * 1024);
|
|
|
| - const char* good_code =
|
| - "function this_is_lazy() { var a; } function foo() { return 25; } foo();";
|
| + const char* good_code[] = {
|
| + "function this_is_lazy() { var a; } function foo() { return 25; } foo();",
|
| + "var this_is_lazy = () => { var a; }; var foo = () => 25; foo();",
|
| + };
|
|
|
| // Insert a syntax error inside the lazy function.
|
| - const char* bad_code =
|
| - "function this_is_lazy() { if ( } function foo() { return 25; } foo();";
|
| + const char* bad_code[] = {
|
| + "function this_is_lazy() { if ( } function foo() { return 25; } foo();",
|
| + "var this_is_lazy = () => { if ( }; var foo = () => 25; foo();",
|
| + };
|
|
|
| - v8::ScriptCompiler::Source good_source(v8_str(good_code));
|
| - v8::ScriptCompiler::Compile(isolate, &good_source,
|
| - v8::ScriptCompiler::kProduceParserCache);
|
| + for (unsigned i = 0; i < ARRAY_SIZE(good_code); i++) {
|
| + v8::ScriptCompiler::Source good_source(v8_str(good_code[i]));
|
| + v8::ScriptCompiler::Compile(isolate, &good_source,
|
| + v8::ScriptCompiler::kProduceDataToCache);
|
|
|
| - const v8::ScriptCompiler::CachedData* cached_data =
|
| - good_source.GetCachedData();
|
| - CHECK(cached_data->data != NULL);
|
| - CHECK_GT(cached_data->length, 0);
|
| + const v8::ScriptCompiler::CachedData* cached_data =
|
| + good_source.GetCachedData();
|
| + CHECK(cached_data->data != NULL);
|
| + CHECK_GT(cached_data->length, 0);
|
|
|
| - // Now compile the erroneous code with the good preparse data. If the preparse
|
| - // data is used, the lazy function is skipped and it should compile fine.
|
| - v8::ScriptCompiler::Source bad_source(
|
| - v8_str(bad_code), new v8::ScriptCompiler::CachedData(
|
| - cached_data->data, cached_data->length));
|
| - v8::Local<v8::Value> result =
|
| - v8::ScriptCompiler::Compile(
|
| - isolate, &bad_source, v8::ScriptCompiler::kConsumeParserCache)->Run();
|
| - CHECK(result->IsInt32());
|
| - CHECK_EQ(25, result->Int32Value());
|
| + // Now compile the erroneous code with the good preparse data. If the
|
| + // preparse data is used, the lazy function is skipped and it should
|
| + // compile fine.
|
| + v8::ScriptCompiler::Source bad_source(
|
| + v8_str(bad_code[i]), new v8::ScriptCompiler::CachedData(
|
| + cached_data->data, cached_data->length));
|
| + v8::Local<v8::Value> result =
|
| + v8::ScriptCompiler::Compile(isolate, &bad_source)->Run();
|
| + CHECK(result->IsInt32());
|
| + CHECK_EQ(25, result->Int32Value());
|
| + }
|
| }
|
|
|
|
|
| @@ -482,6 +492,7 @@ TEST(PreParseOverflow) {
|
|
|
| i::PreParser preparser(&scanner, &log, stack_limit);
|
| preparser.set_allow_lazy(true);
|
| + preparser.set_allow_arrow_functions(true);
|
| i::PreParser::PreParseResult result = preparser.PreParseProgram();
|
| CHECK_EQ(i::PreParser::kPreParseStackOverflow, result);
|
| }
|
| @@ -959,7 +970,13 @@ TEST(ScopePositions) {
|
| " infunction;\n"
|
| " }", "\n"
|
| " more;", i::FUNCTION_SCOPE, i::SLOPPY },
|
| - { " (function fun", "(a,b) { infunction; }", ")();",
|
| + // TODO(aperez): Change to use i::ARROW_SCOPE when implemented
|
| + { " start;\n", "(a,b) => a + b", "; more;",
|
| + i::FUNCTION_SCOPE, i::SLOPPY },
|
| + { " start;\n", "(a,b) => { return a+b; }", "\nmore;",
|
| + i::FUNCTION_SCOPE, i::SLOPPY },
|
| + { " start;\n"
|
| + " (function fun", "(a,b) { infunction; }", ")();",
|
| i::FUNCTION_SCOPE, i::SLOPPY },
|
| { " for ", "(let x = 1 ; x < 10; ++ x) { block; }", " more;",
|
| i::BLOCK_SCOPE, i::STRICT },
|
| @@ -1112,6 +1129,7 @@ TEST(ScopePositions) {
|
| i::Parser parser(&info);
|
| parser.set_allow_lazy(true);
|
| parser.set_allow_harmony_scoping(true);
|
| + parser.set_allow_arrow_functions(true);
|
| info.MarkAsGlobal();
|
| info.SetStrictMode(source_data[i].strict_mode);
|
| parser.Parse();
|
|
|