| // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| #ifndef RUNTIME_VM_REPORT_H_ |
| #define RUNTIME_VM_REPORT_H_ |
| |
| #include "vm/allocation.h" |
| #include "vm/tagged_pointer.h" |
| #include "vm/token_position.h" |
| |
| namespace dart { |
| |
| // Forward declarations. |
| class Error; |
| class ICData; |
| class Script; |
| class StackFrame; |
| class String; |
| |
| class Report : AllStatic { |
| public: |
| enum Kind { |
| kWarning, |
| kError, |
| kBailout, |
| }; |
| |
| static constexpr bool AtLocation = false; |
| static constexpr bool AfterLocation = true; |
| |
| // Report an already formatted error via a long jump. |
| DART_NORETURN static void LongJump(const Error& error); |
| |
| // Concatenate and report an already formatted error and a new error message. |
| DART_NORETURN static void LongJumpF(const Error& prev_error, |
| const Script& script, |
| TokenPosition token_pos, |
| const char* format, |
| ...) PRINTF_ATTRIBUTE(4, 5); |
| DART_NORETURN static void LongJumpV(const Error& prev_error, |
| const Script& script, |
| TokenPosition token_pos, |
| const char* format, |
| va_list args); |
| |
| // Report a warning/jswarning/error/bailout message. |
| static void MessageF(Kind kind, |
| const Script& script, |
| TokenPosition token_pos, |
| bool report_after_token, |
| const char* format, |
| ...) PRINTF_ATTRIBUTE(5, 6); |
| static void MessageV(Kind kind, |
| const Script& script, |
| TokenPosition token_pos, |
| bool report_after_token, |
| const char* format, |
| va_list args); |
| |
| // Prepend a source snippet to the message. |
| // A null script means no source and a negative token_pos means no position. |
| static StringPtr PrependSnippet(Kind kind, |
| const Script& script, |
| TokenPosition token_pos, |
| bool report_after_token, |
| const String& message); |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(Report); |
| }; |
| |
| } // namespace dart |
| |
| #endif // RUNTIME_VM_REPORT_H_ |