Index: test/cctest/test-parsing.cc |
diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc |
index b12098a85a19e5352471686389ca8387a1789031..a2806d8640da49ed7cf973be0862a355dd456548 100644 |
--- a/test/cctest/test-parsing.cc |
+++ b/test/cctest/test-parsing.cc |
@@ -157,8 +157,7 @@ TEST(ScanHTMLEndComments) { |
preparser.set_allow_lazy(true); |
i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
- i::ScriptData data(log.ExtractData()); |
- CHECK(!data.has_error()); |
+ CHECK(!log.HasError()); |
} |
for (int i = 0; fail_tests[i]; i++) { |
@@ -173,8 +172,7 @@ TEST(ScanHTMLEndComments) { |
i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
// Even in the case of a syntax error, kPreParseSuccess is returned. |
CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
- i::ScriptData data(log.ExtractData()); |
- CHECK(data.has_error()); |
+ CHECK(log.HasError()); |
} |
} |
@@ -306,8 +304,7 @@ TEST(StandAlonePreParser) { |
preparser.set_allow_natives_syntax(true); |
i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
- i::ScriptData data(log.ExtractData()); |
- CHECK(!data.has_error()); |
+ CHECK(!log.HasError()); |
} |
} |
@@ -339,9 +336,7 @@ TEST(StandAlonePreParserNoNatives) { |
preparser.set_allow_lazy(true); |
i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
- i::ScriptData data(log.ExtractData()); |
- // Data contains syntax error. |
- CHECK(data.has_error()); |
+ CHECK(log.HasError()); |
} |
} |
@@ -407,8 +402,7 @@ TEST(RegressChromium62639) { |
i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
// Even in the case of a syntax error, kPreParseSuccess is returned. |
CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
- i::ScriptData data(log.ExtractData()); |
- CHECK(data.has_error()); |
+ CHECK(log.HasError()); |
} |
@@ -438,15 +432,15 @@ TEST(Regress928) { |
preparser.set_allow_lazy(true); |
i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
- i::ScriptData data(log.ExtractData()); |
- CHECK(!data.has_error()); |
- data.Initialize(); |
+ i::ScriptData* sd = log.GetScriptData(); |
+ i::ParseData pd(sd); |
+ pd.Initialize(); |
int first_function = |
static_cast<int>(strstr(program, "function") - program); |
int first_lbrace = first_function + i::StrLength("function () "); |
CHECK_EQ('{', program[first_lbrace]); |
- i::FunctionEntry entry1 = data.GetFunctionEntry(first_lbrace); |
+ i::FunctionEntry entry1 = pd.GetFunctionEntry(first_lbrace); |
CHECK(!entry1.is_valid()); |
int second_function = |
@@ -454,9 +448,10 @@ TEST(Regress928) { |
int second_lbrace = |
second_function + i::StrLength("function () "); |
CHECK_EQ('{', program[second_lbrace]); |
- i::FunctionEntry entry2 = data.GetFunctionEntry(second_lbrace); |
+ i::FunctionEntry entry2 = pd.GetFunctionEntry(second_lbrace); |
CHECK(entry2.is_valid()); |
CHECK_EQ('}', program[entry2.end_pos() - 1]); |
+ delete sd; |
} |
@@ -1134,20 +1129,41 @@ TEST(ScopePositions) { |
} |
-i::Handle<i::String> FormatMessage(i::ScriptData* data) { |
+const char* ReadString(unsigned* start) { |
+ int length = start[0]; |
+ char* result = i::NewArray<char>(length + 1); |
+ for (int i = 0; i < length; i++) { |
+ result[i] = start[i + 1]; |
+ } |
+ result[length] = '\0'; |
+ return result; |
+} |
+ |
+ |
+i::Handle<i::String> FormatMessage(i::Vector<unsigned> data) { |
i::Isolate* isolate = CcTest::i_isolate(); |
i::Factory* factory = isolate->factory(); |
- const char* message = data->BuildMessage(); |
+ const char* message = |
+ ReadString(&data[i::PreparseDataConstants::kMessageTextPos]); |
i::Handle<i::String> format = v8::Utils::OpenHandle( |
*v8::String::NewFromUtf8(CcTest::isolate(), message)); |
- const char* arg = data->BuildArg(); |
- i::Handle<i::JSArray> args_array = factory->NewJSArray(arg == NULL ? 0 : 1); |
- if (arg != NULL) { |
- i::JSArray::SetElement( |
- args_array, 0, v8::Utils::OpenHandle(*v8::String::NewFromUtf8( |
- CcTest::isolate(), arg)), |
- NONE, i::SLOPPY).Check(); |
+ int arg_count = data[i::PreparseDataConstants::kMessageArgCountPos]; |
+ const char* arg = NULL; |
+ i::Handle<i::JSArray> args_array; |
+ if (arg_count == 1) { |
+ // Position after text found by skipping past length field and |
+ // length field content words. |
+ int pos = i::PreparseDataConstants::kMessageTextPos + 1 + |
+ data[i::PreparseDataConstants::kMessageTextPos]; |
+ arg = ReadString(&data[pos]); |
+ args_array = factory->NewJSArray(1); |
+ i::JSArray::SetElement(args_array, 0, v8::Utils::OpenHandle(*v8_str(arg)), |
+ NONE, i::SLOPPY).Check(); |
+ } else { |
+ CHECK_EQ(0, arg_count); |
+ args_array = factory->NewJSArray(0); |
} |
+ |
i::Handle<i::JSObject> builtins(isolate->js_builtins_object()); |
i::Handle<i::Object> format_fun = i::Object::GetProperty( |
isolate, builtins, "FormatMessage").ToHandleChecked(); |
@@ -1157,6 +1173,7 @@ i::Handle<i::String> FormatMessage(i::ScriptData* data) { |
CHECK(result->IsString()); |
i::DeleteArray(message); |
i::DeleteArray(arg); |
+ data.Dispose(); |
return i::Handle<i::String>::cast(result); |
} |
@@ -1211,7 +1228,8 @@ void TestParserSyncWithFlags(i::Handle<i::String> source, |
i::PreParser::PreParseResult result = preparser.PreParseProgram(); |
CHECK_EQ(i::PreParser::kPreParseSuccess, result); |
} |
- i::ScriptData data(log.ExtractData()); |
+ |
+ bool preparse_error = log.HasError(); |
// Parse the data |
i::FunctionLiteral* function; |
@@ -1246,7 +1264,7 @@ void TestParserSyncWithFlags(i::Handle<i::String> source, |
CHECK(false); |
} |
- if (!data.has_error()) { |
+ if (!preparse_error) { |
v8::base::OS::Print( |
"Parser failed on:\n" |
"\t%s\n" |
@@ -1257,7 +1275,8 @@ void TestParserSyncWithFlags(i::Handle<i::String> source, |
CHECK(false); |
} |
// Check that preparser and parser produce the same error. |
- i::Handle<i::String> preparser_message = FormatMessage(&data); |
+ i::Handle<i::String> preparser_message = |
+ FormatMessage(log.ErrorMessageData()); |
if (!i::String::Equals(message_string, preparser_message)) { |
v8::base::OS::Print( |
"Expected parser and preparser to produce the same error on:\n" |
@@ -1270,14 +1289,14 @@ void TestParserSyncWithFlags(i::Handle<i::String> source, |
preparser_message->ToCString().get()); |
CHECK(false); |
} |
- } else if (data.has_error()) { |
+ } else if (preparse_error) { |
v8::base::OS::Print( |
"Preparser failed on:\n" |
"\t%s\n" |
"with error:\n" |
"\t%s\n" |
"However, the parser succeeded", |
- source->ToCString().get(), FormatMessage(&data)->ToCString().get()); |
+ source->ToCString().get(), FormatMessage(log.ErrorMessageData())); |
CHECK(false); |
} else if (result == kError) { |
v8::base::OS::Print( |
@@ -2165,22 +2184,20 @@ TEST(DontRegressPreParserDataSizes) { |
factory->NewStringFromUtf8(i::CStrVector(program)).ToHandleChecked(); |
i::Handle<i::Script> script = factory->NewScript(source); |
i::CompilationInfoWithZone info(script); |
- i::ScriptData* data = NULL; |
- info.SetCachedData(&data, i::PRODUCE_CACHED_DATA); |
+ i::ScriptData* sd = NULL; |
+ info.SetCachedData(&sd, i::PRODUCE_CACHED_DATA); |
i::Parser::Parse(&info, true); |
- CHECK(data); |
- CHECK(!data->HasError()); |
+ i::ParseData pd(sd); |
- if (data->function_count() != test_cases[i].functions) { |
+ if (pd.FunctionCount() != test_cases[i].functions) { |
v8::base::OS::Print( |
"Expected preparse data for program:\n" |
"\t%s\n" |
"to contain %d functions, however, received %d functions.\n", |
- program, test_cases[i].functions, |
- data->function_count()); |
+ program, test_cases[i].functions, pd.FunctionCount()); |
CHECK(false); |
} |
- delete data; |
+ delete sd; |
} |
} |