Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Unified Diff: runtime/vm/parser.cc

Issue 8549033: Update comments in core lib showing proper factory syntax. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/parser.h ('k') | tests/language/language.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/parser.cc
===================================================================
--- runtime/vm/parser.cc (revision 1677)
+++ runtime/vm/parser.cc (working copy)
@@ -5016,59 +5016,112 @@
// Static.
-void Parser::ReportMsg(const Script& script,
- intptr_t token_index,
- const char* msg_type,
- char* message,
- const char* format, va_list args) {
- const String& script_url = String::CheckedHandle(script.url());
- const int buf_size = 256;
- static char text_buffer[buf_size];
-
- intptr_t line, column;
- script.GetTokenLocation(token_index, &line, &column);
- OS::VSNPrint(text_buffer, buf_size, format, args);
- intptr_t msg_len =
- OS::SNPrint(message, Parser::kErrorBuflen,
- "'%s': %s: line %d pos %d: %s\n",
- script_url.ToCString(), msg_type, line, column, text_buffer);
- const String& text = String::Handle(script.GetLine(line));
- ASSERT(!text.IsNull());
- if (text.Length() < buf_size) {
- OS::SNPrint(message + msg_len, Parser::kErrorBuflen - msg_len,
- "%s\n%*s\n", text.ToCString(), column, "^");
+void Parser::FormatMessage(const Script& script,
+ intptr_t token_index,
+ const char* message_header,
+ char* message_buffer,
+ intptr_t message_buffer_size,
+ const char* format, va_list args) {
+ intptr_t msg_len = 0;
+ if (!script.IsNull()) {
+ const String& script_url = String::CheckedHandle(script.url());
+ if (token_index >= 0) {
+ intptr_t line, column;
+ script.GetTokenLocation(token_index, &line, &column);
+ msg_len += OS::SNPrint(message_buffer + msg_len,
+ message_buffer_size - msg_len,
+ "'%s': %s: line %d pos %d: ",
+ script_url.ToCString(),
+ message_header,
+ line,
+ column);
+ if (msg_len < message_buffer_size) {
+ // Append the formatted error or warning message.
+ msg_len += OS::VSNPrint(message_buffer + msg_len,
+ message_buffer_size - msg_len,
+ format,
+ args);
+ if (msg_len < message_buffer_size) {
+ // Append the source line.
+ const String& script_line = String::Handle(script.GetLine(line));
+ ASSERT(!script_line.IsNull());
+ msg_len += OS::SNPrint(message_buffer + msg_len,
+ message_buffer_size - msg_len,
+ "\n%s\n%*s\n",
+ script_line.ToCString(),
+ column,
+ "^");
+ }
+ }
+ } else {
+ // Token position is unknown.
+ msg_len += OS::SNPrint(message_buffer + msg_len,
+ message_buffer_size - msg_len,
+ "'%s': %s: ",
+ script_url.ToCString(),
+ message_header);
+ if (msg_len < message_buffer_size) {
+ // Append the formatted error or warning message.
+ msg_len += OS::VSNPrint(message_buffer + msg_len,
+ message_buffer_size - msg_len,
+ format,
+ args);
+ }
+ }
+ } else {
+ // Script is unknown.
+ // Append the formatted error or warning message.
+ msg_len += OS::VSNPrint(message_buffer + msg_len,
+ message_buffer_size - msg_len,
+ format,
+ args);
}
}
void Parser::ErrorMsg(intptr_t token_index, const char* format, ...) {
+ const intptr_t kMessageBufferSize = 512;
+ char message_buffer[kMessageBufferSize];
va_list args;
va_start(args, format);
- ReportMsg(script_, token_index, "Error", error_msg_, format, args);
- Isolate::Current()->long_jump_base()->Jump(1, error_msg_);
+ FormatMessage(script_, token_index, "Error",
+ message_buffer, kMessageBufferSize,
+ format, args);
+ va_end(args);
+ Isolate::Current()->long_jump_base()->Jump(1, message_buffer);
UNREACHABLE();
}
void Parser::ErrorMsg(const char* format, ...) {
+ const intptr_t kMessageBufferSize = 512;
+ char message_buffer[kMessageBufferSize];
va_list args;
va_start(args, format);
- ReportMsg(script_, token_index_, "Error", error_msg_, format, args);
- Isolate::Current()->long_jump_base()->Jump(1, error_msg_);
+ FormatMessage(script_, token_index_, "Error",
+ message_buffer, kMessageBufferSize,
+ format, args);
+ va_end(args);
+ Isolate::Current()->long_jump_base()->Jump(1, message_buffer);
UNREACHABLE();
}
void Parser::Warning(const char* format, ...) {
+ const intptr_t kMessageBufferSize = 512;
+ char message_buffer[kMessageBufferSize];
if (FLAG_silent_warnings) return;
va_list args;
va_start(args, format);
- ReportMsg(script_, token_index_, "Warning", error_msg_, format, args);
+ FormatMessage(script_, token_index_, "Warning",
+ message_buffer, kMessageBufferSize,
+ format, args);
+ va_end(args);
if (FLAG_warning_as_error) {
- Isolate::Current()->long_jump_base()->Jump(1, error_msg_);
+ Isolate::Current()->long_jump_base()->Jump(1, message_buffer);
UNREACHABLE();
} else {
- OS::Print(error_msg_);
+ OS::Print(message_buffer);
}
}
« no previous file with comments | « runtime/vm/parser.h ('k') | tests/language/language.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698