blob: 80ce8eb9ca6b02809e5e9dae726f76ca19d30fe6 [file] [log] [blame]
Steve Blocka7e24c12009-10-30 11:49:00 +00001// 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
101 // Report a formatted message (needs JS allocation).
102 static void ReportMessage(MessageLocation* loc, Handle<Object> message);
103
104 static void DefaultMessageReport(const MessageLocation* loc,
105 Handle<Object> message_obj);
106 static Handle<String> GetMessage(Handle<Object> data);
107 static SmartPointer<char> GetLocalizedMessage(Handle<Object> data);
108};
109
110} } // namespace v8::internal
111
112#endif // V8_MESSAGES_H_