Chromium Code Reviews| Index: test/cctest/test-parsing.cc |
| diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc |
| index 6ec9edd672b16d4e1d31e641f873885aeb61eeab..18a11edffb663b240d77e1dc8080f17afbb07d3c 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::kProduceDataToCache); |
| @@ -238,6 +241,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); |
| @@ -246,31 +250,40 @@ 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();", |
| + NULL |
|
rossberg
2014/07/14 13:55:46
Nit: Don't use NULL, use the ARRAY_SIZE macro inst
|
| + }; |
| // 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();", |
| + NULL |
| + }; |
| - v8::ScriptCompiler::Source good_source(v8_str(good_code)); |
| - v8::ScriptCompiler::Compile(isolate, &good_source, |
| - v8::ScriptCompiler::kProduceDataToCache); |
| + for (int i = 0; good_code[i]; 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)->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()); |
| + } |
| } |
| @@ -479,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); |
| } |
| @@ -956,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 }, |
| @@ -1109,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(); |