Chromium Code Reviews| Index: test/cctest/test-parsing.cc |
| diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc |
| index 717c66519ff2e46c519ebdbd9a10ac9c87d51a61..d5f276d2228ad17543f03d79fbcba4f49092dbc6 100755 |
| --- a/test/cctest/test-parsing.cc |
| +++ b/test/cctest/test-parsing.cc |
| @@ -1041,6 +1041,31 @@ TEST(ScopePositions) { |
| } |
| +i::Handle<i::String> FormatMessage(i::ScriptDataImpl* data) { |
| + i::Handle<i::String> format = v8::Utils::OpenHandle( |
| + *v8::String::New(data->BuildMessage())); |
| + i::Vector<const char*> args = data->BuildArgs(); |
| + i::Handle<i::JSArray> args_array = FACTORY->NewJSArray(args.length()); |
| + for (int i = 0; i < args.length(); i++) { |
| + i::JSArray::SetElement(args_array, |
| + i, |
| + v8::Utils::OpenHandle(*v8::String::New(args[i])), |
| + NONE, |
| + i::kNonStrictMode); |
| + } |
| + i::Handle<i::JSObject> builtins(i::Isolate::Current()->js_builtins_object()); |
| + i::Handle<i::Object> format_fun = |
| + i::GetProperty(builtins, "FormatMessage"); |
| + i::Handle<i::Object> arg_handles[] = { format, args_array }; |
| + bool has_exception = false; |
| + i::Handle<i::Object> result = |
| + i::Execution::Call(format_fun, builtins, 2, arg_handles, &has_exception); |
| + CHECK(!has_exception); |
| + CHECK(result->IsString()); |
| + return i::Handle<i::String>::cast(result); |
| +} |
| + |
| + |
| void TestParserSync(i::Handle<i::String> source, int flags) { |
| uintptr_t stack_limit = i::Isolate::Current()->stack_guard()->real_climit(); |
| bool harmony_scoping = ((i::kLanguageModeMask & flags) == i::EXTENDED_MODE); |
| @@ -1067,18 +1092,15 @@ void TestParserSync(i::Handle<i::String> source, int flags) { |
| i::FunctionLiteral* function = parser.ParseProgram(); |
| i::FLAG_harmony_scoping = save_harmony_scoping; |
| - i::String* type_string = NULL; |
| + i::Handle<i::String> message_string; |
|
Sven Panne
2012/11/14 08:40:35
Remove this line, merging it with the initializati
|
| if (function == NULL) { |
| // Extract exception from the parser. |
| - i::Handle<i::String> type_symbol = FACTORY->LookupAsciiSymbol("type"); |
| CHECK(i::Isolate::Current()->has_pending_exception()); |
| i::MaybeObject* maybe_object = i::Isolate::Current()->pending_exception(); |
| i::JSObject* exception = NULL; |
| CHECK(maybe_object->To(&exception)); |
| - |
| - // Get the type string. |
| - maybe_object = exception->GetProperty(*type_symbol); |
| - CHECK(maybe_object->To(&type_string)); |
| + i::Handle<i::JSObject> exception_handle(exception); |
| + message_string = i::GetProperty(exception_handle, "message"); |
| } |
| // Check that preparsing fails iff parsing fails. |
| @@ -1089,7 +1111,7 @@ void TestParserSync(i::Handle<i::String> source, int flags) { |
| "with error:\n" |
| "\t%s\n" |
| "However, the parser succeeded", |
| - *source->ToCString(), data.BuildMessage()); |
| + *source->ToCString(), *FormatMessage(&data)->ToCString()); |
| CHECK(false); |
| } else if (!data.has_error() && function == NULL) { |
| i::OS::Print( |
| @@ -1098,20 +1120,23 @@ void TestParserSync(i::Handle<i::String> source, int flags) { |
| "with error:\n" |
| "\t%s\n" |
| "However, the preparser succeeded", |
| - *source->ToCString(), *type_string->ToCString()); |
| + *source->ToCString(), *message_string->ToCString()); |
| CHECK(false); |
| } |
| // Check that preparser and parser produce the same error. |
| if (function == NULL) { |
| - if (!type_string->IsEqualTo(i::CStrVector(data.BuildMessage()))) { |
| + i::Handle<i::String> preparser_message = FormatMessage(&data); |
| + if (!message_string->Equals(*preparser_message)) { |
| i::OS::Print( |
| "Expected parser and preparser to produce the same error on:\n" |
| "\t%s\n" |
| "However, found the following error messages\n" |
| "\tparser: %s\n" |
| "\tpreparser: %s\n", |
| - *source->ToCString(), *type_string->ToCString(), data.BuildMessage()); |
| + *source->ToCString(), |
| + *message_string->ToCString(), |
| + *preparser_message->ToCString()); |
| CHECK(false); |
| } |
| } |