OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_PREPARSE_DATA_H_ | 5 #ifndef V8_PREPARSE_DATA_H_ |
6 #define V8_PREPARSE_DATA_H_ | 6 #define V8_PREPARSE_DATA_H_ |
7 | 7 |
8 #include "src/allocation.h" | 8 #include "src/allocation.h" |
9 #include "src/hashmap.h" | 9 #include "src/hashmap.h" |
10 #include "src/preparse-data-format.h" | 10 #include "src/preparse-data-format.h" |
11 #include "src/utils-inl.h" | 11 #include "src/utils-inl.h" |
12 | 12 |
13 namespace v8 { | 13 namespace v8 { |
14 namespace internal { | 14 namespace internal { |
15 | 15 |
16 class ScriptData; | 16 class ScriptData; |
17 | 17 |
18 | 18 |
19 // Abstract interface for preparse data recorder. | 19 // Abstract interface for preparse data recorder. |
20 class ParserRecorder { | 20 class ParserRecorder { |
21 public: | 21 public: |
22 ParserRecorder() { } | 22 ParserRecorder() { } |
23 virtual ~ParserRecorder() { } | 23 virtual ~ParserRecorder() { } |
24 | 24 |
25 // Logs the scope and some details of a function literal in the source. | 25 // Logs the scope and some details of a function literal in the source. |
26 virtual void LogFunction(int start, | 26 virtual void LogFunction(int start, int end, int literals, int properties, |
27 int end, | 27 LanguageMode language_mode) = 0; |
28 int literals, | |
29 int properties, | |
30 StrictMode strict_mode) = 0; | |
31 | 28 |
32 // Logs an error message and marks the log as containing an error. | 29 // Logs an error message and marks the log as containing an error. |
33 // Further logging will be ignored, and ExtractData will return a vector | 30 // Further logging will be ignored, and ExtractData will return a vector |
34 // representing the error only. | 31 // representing the error only. |
35 virtual void LogMessage(int start, | 32 virtual void LogMessage(int start, |
36 int end, | 33 int end, |
37 const char* message, | 34 const char* message, |
38 const char* argument_opt, | 35 const char* argument_opt, |
39 bool is_reference_error) = 0; | 36 bool is_reference_error) = 0; |
40 private: | 37 private: |
41 DISALLOW_COPY_AND_ASSIGN(ParserRecorder); | 38 DISALLOW_COPY_AND_ASSIGN(ParserRecorder); |
42 }; | 39 }; |
43 | 40 |
44 | 41 |
45 class SingletonLogger : public ParserRecorder { | 42 class SingletonLogger : public ParserRecorder { |
46 public: | 43 public: |
47 SingletonLogger() | 44 SingletonLogger() |
48 : has_error_(false), start_(-1), end_(-1), is_reference_error_(false) {} | 45 : has_error_(false), start_(-1), end_(-1), is_reference_error_(false) {} |
49 virtual ~SingletonLogger() {} | 46 virtual ~SingletonLogger() {} |
50 | 47 |
51 void Reset() { has_error_ = false; } | 48 void Reset() { has_error_ = false; } |
52 | 49 |
53 virtual void LogFunction(int start, | 50 virtual void LogFunction(int start, int end, int literals, int properties, |
54 int end, | 51 LanguageMode language_mode) { |
55 int literals, | |
56 int properties, | |
57 StrictMode strict_mode) { | |
58 DCHECK(!has_error_); | 52 DCHECK(!has_error_); |
59 start_ = start; | 53 start_ = start; |
60 end_ = end; | 54 end_ = end; |
61 literals_ = literals; | 55 literals_ = literals; |
62 properties_ = properties; | 56 properties_ = properties; |
63 strict_mode_ = strict_mode; | 57 language_mode_ = language_mode; |
64 } | 58 } |
65 | 59 |
66 // Logs an error message and marks the log as containing an error. | 60 // Logs an error message and marks the log as containing an error. |
67 // Further logging will be ignored, and ExtractData will return a vector | 61 // Further logging will be ignored, and ExtractData will return a vector |
68 // representing the error only. | 62 // representing the error only. |
69 virtual void LogMessage(int start, | 63 virtual void LogMessage(int start, |
70 int end, | 64 int end, |
71 const char* message, | 65 const char* message, |
72 const char* argument_opt, | 66 const char* argument_opt, |
73 bool is_reference_error) { | 67 bool is_reference_error) { |
(...skipping 11 matching lines...) Expand all Loading... |
85 int start() const { return start_; } | 79 int start() const { return start_; } |
86 int end() const { return end_; } | 80 int end() const { return end_; } |
87 int literals() const { | 81 int literals() const { |
88 DCHECK(!has_error_); | 82 DCHECK(!has_error_); |
89 return literals_; | 83 return literals_; |
90 } | 84 } |
91 int properties() const { | 85 int properties() const { |
92 DCHECK(!has_error_); | 86 DCHECK(!has_error_); |
93 return properties_; | 87 return properties_; |
94 } | 88 } |
95 StrictMode strict_mode() const { | 89 LanguageMode language_mode() const { |
96 DCHECK(!has_error_); | 90 DCHECK(!has_error_); |
97 return strict_mode_; | 91 return language_mode_; |
98 } | 92 } |
99 int is_reference_error() const { return is_reference_error_; } | 93 int is_reference_error() const { return is_reference_error_; } |
100 const char* message() { | 94 const char* message() { |
101 DCHECK(has_error_); | 95 DCHECK(has_error_); |
102 return message_; | 96 return message_; |
103 } | 97 } |
104 const char* argument_opt() const { | 98 const char* argument_opt() const { |
105 DCHECK(has_error_); | 99 DCHECK(has_error_); |
106 return argument_opt_; | 100 return argument_opt_; |
107 } | 101 } |
108 | 102 |
109 private: | 103 private: |
110 bool has_error_; | 104 bool has_error_; |
111 int start_; | 105 int start_; |
112 int end_; | 106 int end_; |
113 // For function entries. | 107 // For function entries. |
114 int literals_; | 108 int literals_; |
115 int properties_; | 109 int properties_; |
116 StrictMode strict_mode_; | 110 LanguageMode language_mode_; |
117 // For error messages. | 111 // For error messages. |
118 const char* message_; | 112 const char* message_; |
119 const char* argument_opt_; | 113 const char* argument_opt_; |
120 bool is_reference_error_; | 114 bool is_reference_error_; |
121 }; | 115 }; |
122 | 116 |
123 | 117 |
124 class CompleteParserRecorder : public ParserRecorder { | 118 class CompleteParserRecorder : public ParserRecorder { |
125 public: | 119 public: |
126 struct Key { | 120 struct Key { |
127 bool is_one_byte; | 121 bool is_one_byte; |
128 Vector<const byte> literal_bytes; | 122 Vector<const byte> literal_bytes; |
129 }; | 123 }; |
130 | 124 |
131 CompleteParserRecorder(); | 125 CompleteParserRecorder(); |
132 virtual ~CompleteParserRecorder() {} | 126 virtual ~CompleteParserRecorder() {} |
133 | 127 |
134 virtual void LogFunction(int start, | 128 virtual void LogFunction(int start, int end, int literals, int properties, |
135 int end, | 129 LanguageMode language_mode) { |
136 int literals, | |
137 int properties, | |
138 StrictMode strict_mode) { | |
139 function_store_.Add(start); | 130 function_store_.Add(start); |
140 function_store_.Add(end); | 131 function_store_.Add(end); |
141 function_store_.Add(literals); | 132 function_store_.Add(literals); |
142 function_store_.Add(properties); | 133 function_store_.Add(properties); |
143 function_store_.Add(strict_mode); | 134 function_store_.Add(language_mode); |
144 } | 135 } |
145 | 136 |
146 // Logs an error message and marks the log as containing an error. | 137 // Logs an error message and marks the log as containing an error. |
147 // Further logging will be ignored, and ExtractData will return a vector | 138 // Further logging will be ignored, and ExtractData will return a vector |
148 // representing the error only. | 139 // representing the error only. |
149 virtual void LogMessage(int start, | 140 virtual void LogMessage(int start, |
150 int end, | 141 int end, |
151 const char* message, | 142 const char* message, |
152 const char* argument_opt, | 143 const char* argument_opt, |
153 bool is_reference_error_); | 144 bool is_reference_error_); |
(...skipping 18 matching lines...) Expand all Loading... |
172 | 163 |
173 #ifdef DEBUG | 164 #ifdef DEBUG |
174 int prev_start_; | 165 int prev_start_; |
175 #endif | 166 #endif |
176 }; | 167 }; |
177 | 168 |
178 | 169 |
179 } } // namespace v8::internal. | 170 } } // namespace v8::internal. |
180 | 171 |
181 #endif // V8_PREPARSE_DATA_H_ | 172 #endif // V8_PREPARSE_DATA_H_ |
OLD | NEW |