1// Copyright 2006-2008 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// The infrastructure used for (localized) message reporting in V8. 6// 7// Note: there's a big unresolved issue about ownership of the data 8// structures used by this framework. 9 10#ifndef V8_MESSAGES_H_ 11#define V8_MESSAGES_H_ 12 13#include "src/handles-inl.h" 14 15// Forward declaration of MessageLocation. 16namespace v8 { 17namespace internal { 18class MessageLocation; 19} } // namespace v8::internal 20 21 22class V8Message { 23 public: 24 V8Message(char* type, 25 v8::internal::Handle<v8::internal::JSArray> args, 26 const v8::internal::MessageLocation* loc) : 27 type_(type), args_(args), loc_(loc) { } 28 char* type() const { return type_; } 29 v8::internal::Handle<v8::internal::JSArray> args() const { return args_; } 30 const v8::internal::MessageLocation* loc() const { return loc_; } 31 private: 32 char* type_; 33 v8::internal::Handle<v8::internal::JSArray> const args_; 34 const v8::internal::MessageLocation* loc_; 35}; 36 37 38namespace v8 { 39namespace internal { 40 41struct Language; 42class SourceInfo; 43 44class MessageLocation { 45 public: 46 MessageLocation(Handle<Script> script, 47 int start_pos, 48 int end_pos) 49 : script_(script), 50 start_pos_(start_pos), 51 end_pos_(end_pos) { } 52 MessageLocation() : start_pos_(-1), end_pos_(-1) { } 53 54 Handle<Script> script() const { return script_; } 55 int start_pos() const { return start_pos_; } 56 int end_pos() const { return end_pos_; } 57 58 private: 59 Handle<Script> script_; 60 int start_pos_; 61 int end_pos_; 62}; 63 64 65// A message handler is a convenience interface for accessing the list 66// of message listeners registered in an environment 67class MessageHandler { 68 public: 69 // Returns a message object for the API to use. 70 static Handle<JSMessageObject> MakeMessageObject( 71 Isolate* isolate, 72 const char* type, 73 MessageLocation* loc, 74 Vector< Handle<Object> > args, 75 Handle<JSArray> stack_frames); 76 77 // Report a formatted message (needs JS allocation). 78 static void ReportMessage(Isolate* isolate, 79 MessageLocation* loc, 80 Handle<Object> message); 81 82 static void DefaultMessageReport(Isolate* isolate, 83 const MessageLocation* loc, 84 Handle<Object> message_obj); 85 static Handle<String> GetMessage(Isolate* isolate, Handle<Object> data); 86 static SmartArrayPointer<char> GetLocalizedMessage(Isolate* isolate, 87 Handle<Object> data); 88}; 89 90} } // namespace v8::internal 91 92#endif // V8_MESSAGES_H_ 93