Index: test/cctest/test-parsing.cc |
diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc |
index 2e282cef8a52f0029680d45bae27b94a4a48ade6..5a2ee1303852b9ab440351b8f16b9f67fdec81db 100644 |
--- a/test/cctest/test-parsing.cc |
+++ b/test/cctest/test-parsing.cc |
@@ -215,11 +215,11 @@ TEST(Preparsing) { |
ScriptResource* resource = new ScriptResource(source, source_length); |
v8::ScriptCompiler::Source script_source( |
v8::String::NewExternal(isolate, resource), |
- v8::ScriptCompiler::CachedData( |
+ new v8::ScriptCompiler::CachedData( |
reinterpret_cast<const uint8_t*>(preparse->Data()), |
preparse->Length())); |
v8::ScriptCompiler::Compile(isolate, |
- v8::ScriptCompiler::Source(script_source)); |
+ &script_source); |
} |
{ |
@@ -228,10 +228,10 @@ TEST(Preparsing) { |
ScriptResource* resource = new ScriptResource(source, source_length); |
v8::ScriptCompiler::Source script_source( |
v8::String::NewExternal(isolate, resource), |
- v8::ScriptCompiler::CachedData( |
+ new v8::ScriptCompiler::CachedData( |
reinterpret_cast<const uint8_t*>(preparse->Data()), |
preparse->Length())); |
- v8::ScriptCompiler::CompileUnbound(isolate, script_source); |
+ v8::ScriptCompiler::CompileUnbound(isolate, &script_source); |
} |
delete preparse; |
i::FLAG_lazy = lazy_flag; |
@@ -263,6 +263,10 @@ TEST(Preparsing) { |
TEST(PreparseFunctionDataIsUsed) { |
// This tests that we actually do use the function data generated by the |
// preparser. |
+ |
+ // Make preparsing work for short scripts. |
+ i::FLAG_min_preparse_length = 0; |
+ |
v8::Isolate* isolate = CcTest::isolate(); |
v8::HandleScope handles(isolate); |
v8::Local<v8::Context> context = v8::Context::New(isolate); |
@@ -271,28 +275,31 @@ TEST(PreparseFunctionDataIsUsed) { |
CcTest::i_isolate()->stack_guard()->SetStackLimit( |
reinterpret_cast<uintptr_t>(&marker) - 128 * 1024); |
- const char* good_source = |
+ const char* good_code = |
"function this_is_lazy() { var a; } function foo() { return 25; } foo();"; |
// Insert a syntax error inside the lazy function. |
- const char* bad_source = |
+ const char* bad_code = |
"function this_is_lazy() { if ( } function foo() { return 25; } foo();"; |
- v8::ScriptData* preparse = v8::ScriptData::PreCompile(v8_str(good_source)); |
- CHECK(!preparse->HasError()); |
+ v8::ScriptCompiler::Source good_source(v8_str(good_code)); |
+ 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); |
// 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 source( |
- v8_str(bad_source), |
- v8::ScriptCompiler::CachedData( |
- reinterpret_cast<const uint8_t*>(preparse->Data()), |
- preparse->Length())); |
+ 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(CcTest::isolate(), source)->Run(); |
+ v8::ScriptCompiler::Compile(isolate, &bad_source)->Run(); |
CHECK(result->IsInt32()); |
CHECK_EQ(25, result->Int32Value()); |
- delete preparse; |
} |
@@ -304,6 +311,9 @@ TEST(PreparseSymbolDataIsUsed) { |
// source code again without preparse data and it will fail). |
i::FLAG_crankshaft = false; |
+ // Make preparsing work for short scripts. |
+ i::FLAG_min_preparse_length = 0; |
+ |
v8::Isolate* isolate = CcTest::isolate(); |
v8::HandleScope handles(isolate); |
v8::Local<v8::Context> context = v8::Context::New(isolate); |
@@ -313,30 +323,33 @@ TEST(PreparseSymbolDataIsUsed) { |
reinterpret_cast<uintptr_t>(&marker) - 128 * 1024); |
// Note that the ( before function makes the function not lazily compiled. |
- const char* good_source = |
+ const char* good_code = |
"(function weird() { var foo = 26; return foo; })()"; |
// Insert an undefined identifier. If the preparser data is used, the symbol |
// stream is used instead, and this identifier resolves to "foo". |
- const char* bad_source = |
+ const char* bad_code = |
"(function weird() { var foo = 26; return wut; })()"; |
- v8::ScriptData* preparse = v8::ScriptData::PreCompile(v8_str(good_source)); |
- CHECK(!preparse->HasError()); |
+ v8::ScriptCompiler::Source good_source(v8_str(good_code)); |
+ 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); |
// Now compile the erroneous code with the good preparse data. If the preparse |
// data is used, we will see a second occurrence of "foo" instead of the |
// unknown "wut". |
- v8::ScriptCompiler::Source source( |
- v8_str(bad_source), |
- v8::ScriptCompiler::CachedData( |
- reinterpret_cast<const uint8_t*>(preparse->Data()), |
- preparse->Length())); |
+ 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(CcTest::isolate(), source)->Run(); |
+ v8::ScriptCompiler::Compile(isolate, &bad_source)->Run(); |
CHECK(result->IsInt32()); |
CHECK_EQ(26, result->Int32Value()); |
- delete preparse; |
} |