| // 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_ |