messages.h revision 3bec4d28b1f388dbc06a9c4276e1a03e86c52b04
1// Copyright 2006-2008 the V8 project authors. All rights reserved. 2// Redistribution and use in source and binary forms, with or without 3// modification, are permitted provided that the following conditions are 4// met: 5// 6// * Redistributions of source code must retain the above copyright 7// notice, this list of conditions and the following disclaimer. 8// * Redistributions in binary form must reproduce the above 9// copyright notice, this list of conditions and the following 10// disclaimer in the documentation and/or other materials provided 11// with the distribution. 12// * Neither the name of Google Inc. nor the names of its 13// contributors may be used to endorse or promote products derived 14// from this software without specific prior written permission. 15// 16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 28// The infrastructure used for (localized) message reporting in V8. 29// 30// Note: there's a big unresolved issue about ownership of the data 31// structures used by this framework. 32 33#ifndef V8_MESSAGES_H_ 34#define V8_MESSAGES_H_ 35 36#include "handles-inl.h" 37 38// Forward declaration of MessageLocation. 39namespace v8 { 40namespace internal { 41class MessageLocation; 42} } // namespace v8::internal 43 44 45class V8Message { 46 public: 47 V8Message(char* type, 48 v8::internal::Handle<v8::internal::JSArray> args, 49 const v8::internal::MessageLocation* loc) : 50 type_(type), args_(args), loc_(loc) { } 51 char* type() const { return type_; } 52 v8::internal::Handle<v8::internal::JSArray> args() const { return args_; } 53 const v8::internal::MessageLocation* loc() const { return loc_; } 54 private: 55 char* type_; 56 v8::internal::Handle<v8::internal::JSArray> const args_; 57 const v8::internal::MessageLocation* loc_; 58}; 59 60 61namespace v8 { 62namespace internal { 63 64struct Language; 65class SourceInfo; 66 67class MessageLocation { 68 public: 69 MessageLocation(Handle<Script> script, 70 int start_pos, 71 int end_pos) 72 : script_(script), 73 start_pos_(start_pos), 74 end_pos_(end_pos) { } 75 MessageLocation() : start_pos_(-1), end_pos_(-1) { } 76 77 Handle<Script> script() const { return script_; } 78 int start_pos() const { return start_pos_; } 79 int end_pos() const { return end_pos_; } 80 81 private: 82 Handle<Script> script_; 83 int start_pos_; 84 int end_pos_; 85}; 86 87 88// A message handler is a convenience interface for accessing the list 89// of message listeners registered in an environment 90class MessageHandler { 91 public: 92 // Report a message (w/o JS heap allocation). 93 static void ReportMessage(const char* msg); 94 95 // Returns a message object for the API to use. 96 static Handle<Object> MakeMessageObject(const char* type, 97 MessageLocation* loc, 98 Vector< Handle<Object> > args, 99 Handle<String> stack_trace, 100 Handle<JSArray> stack_frames); 101 102 // Report a formatted message (needs JS allocation). 103 static void ReportMessage(MessageLocation* loc, Handle<Object> message); 104 105 static void DefaultMessageReport(const MessageLocation* loc, 106 Handle<Object> message_obj); 107 static Handle<String> GetMessage(Handle<Object> data); 108 static SmartPointer<char> GetLocalizedMessage(Handle<Object> data); 109}; 110 111} } // namespace v8::internal 112 113#endif // V8_MESSAGES_H_ 114