| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/report.h" | 5 #include "vm/report.h" |
| 6 | 6 |
| 7 #include "vm/code_patcher.h" | 7 #include "vm/code_patcher.h" |
| 8 #include "vm/exceptions.h" | 8 #include "vm/exceptions.h" |
| 9 #include "vm/flags.h" | 9 #include "vm/flags.h" |
| 10 #include "vm/longjump.h" | 10 #include "vm/longjump.h" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 const String& script_url = String::Handle(script.url()); | 36 const String& script_url = String::Handle(script.url()); |
| 37 if (token_pos.IsReal()) { | 37 if (token_pos.IsReal()) { |
| 38 intptr_t line, column, token_len; | 38 intptr_t line, column, token_len; |
| 39 script.GetTokenLocation(token_pos, &line, &column, &token_len); | 39 script.GetTokenLocation(token_pos, &line, &column, &token_len); |
| 40 if (report_after_token) { | 40 if (report_after_token) { |
| 41 column += token_len; | 41 column += token_len; |
| 42 } | 42 } |
| 43 // Only report the line position if we have the original source. We still | 43 // Only report the line position if we have the original source. We still |
| 44 // need to get a valid column so that we can report the ^ mark below the | 44 // need to get a valid column so that we can report the ^ mark below the |
| 45 // snippet. | 45 // snippet. |
| 46 // Allocate formatted strings in old sapce as they may be created during | 46 // Allocate formatted strings in old space as they may be created during |
| 47 // optimizing compilation. Those strings are created rarely and should not | 47 // optimizing compilation. Those strings are created rarely and should not |
| 48 // polute old space. | 48 // polute old space. |
| 49 if (script.HasSource()) { | 49 if (script.HasSource()) { |
| 50 result = String::NewFormatted(Heap::kOld, | 50 result = String::NewFormatted(Heap::kOld, |
| 51 "'%s': %s: line %" Pd " pos %" Pd ": ", | 51 "'%s': %s: line %" Pd " pos %" Pd ": ", |
| 52 script_url.ToCString(), | 52 script_url.ToCString(), |
| 53 message_header, | 53 message_header, |
| 54 line, | 54 line, |
| 55 column); | 55 column); |
| 56 } else { | 56 } else { |
| 57 result = String::NewFormatted(Heap::kOld, | 57 result = String::NewFormatted(Heap::kOld, |
| 58 "'%s': %s: line %" Pd ": ", | 58 "'%s': %s: line %" Pd ": ", |
| 59 script_url.ToCString(), | 59 script_url.ToCString(), |
| 60 message_header, | 60 message_header, |
| 61 line); | 61 line); |
| 62 } | 62 } |
| 63 // Append the formatted error or warning message. | 63 // Append the formatted error or warning message. |
| 64 GrowableHandlePtrArray<const String> strs(Thread::Current()->zone(), 5); | 64 const Array& strs = Array::Handle( |
| 65 strs.Add(result); | 65 Array::New(6, Heap::kOld)); |
| 66 strs.Add(message); | 66 strs.SetAt(0, result); |
| 67 strs.SetAt(1, message); |
| 67 // Append the source line. | 68 // Append the source line. |
| 68 const String& script_line = String::Handle( | 69 const String& script_line = String::Handle( |
| 69 script.GetLine(line, Heap::kOld)); | 70 script.GetLine(line, Heap::kOld)); |
| 70 ASSERT(!script_line.IsNull()); | 71 ASSERT(!script_line.IsNull()); |
| 71 strs.Add(Symbols::NewLine()); | 72 strs.SetAt(2, Symbols::NewLine()); |
| 72 strs.Add(script_line); | 73 strs.SetAt(3, script_line); |
| 73 strs.Add(Symbols::NewLine()); | 74 strs.SetAt(4, Symbols::NewLine()); |
| 74 // Append the column marker. | 75 // Append the column marker. |
| 75 const String& column_line = String::Handle( | 76 const String& column_line = String::Handle( |
| 76 String::NewFormatted(Heap::kOld, | 77 String::NewFormatted(Heap::kOld, |
| 77 "%*s\n", static_cast<int>(column), "^")); | 78 "%*s\n", static_cast<int>(column), "^")); |
| 78 strs.Add(column_line); | 79 strs.SetAt(5, column_line); |
| 79 // TODO(srdjan): Use Strings::FromConcatAll in old space, once | 80 result = String::ConcatAll(strs, Heap::kOld); |
| 80 // implemented. | |
| 81 result = Symbols::FromConcatAll(strs); | |
| 82 } else { | 81 } else { |
| 83 // Token position is unknown. | 82 // Token position is unknown. |
| 84 result = String::NewFormatted(Heap::kOld, "'%s': %s: ", | 83 result = String::NewFormatted(Heap::kOld, "'%s': %s: ", |
| 85 script_url.ToCString(), | 84 script_url.ToCString(), |
| 86 message_header); | 85 message_header); |
| 87 result = String::Concat(result, message, Heap::kOld); | 86 result = String::Concat(result, message, Heap::kOld); |
| 88 } | 87 } |
| 89 } else { | 88 } else { |
| 90 // Script is unknown. | 89 // Script is unknown. |
| 91 // Append the formatted error or warning message. | 90 // Append the formatted error or warning message. |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 LanguageError::NewFormattedV(Error::Handle(), // No previous error. | 159 LanguageError::NewFormattedV(Error::Handle(), // No previous error. |
| 161 script, token_pos, report_after_token, | 160 script, token_pos, report_after_token, |
| 162 kind, Heap::kOld, | 161 kind, Heap::kOld, |
| 163 format, args)); | 162 format, args)); |
| 164 LongJump(error); | 163 LongJump(error); |
| 165 UNREACHABLE(); | 164 UNREACHABLE(); |
| 166 } | 165 } |
| 167 | 166 |
| 168 } // namespace dart | 167 } // namespace dart |
| 169 | 168 |
| OLD | NEW |