| 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" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 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, int end, int literals, int properties, | 26 virtual void LogFunction(int start, int end, int literals, int properties, |
| 27 LanguageMode language_mode, | 27 LanguageMode language_mode, |
| 28 bool uses_super_property) = 0; | 28 bool uses_super_property) = 0; |
| 29 | 29 |
| 30 // Logs an error message and marks the log as containing an error. | 30 // Logs an error message and marks the log as containing an error. |
| 31 // Further logging will be ignored, and ExtractData will return a vector | 31 // Further logging will be ignored, and ExtractData will return a vector |
| 32 // representing the error only. | 32 // representing the error only. |
| 33 virtual void LogMessage(int start, | 33 virtual void LogMessage(int start, int end, const char* message, |
| 34 int end, | |
| 35 const char* message, | |
| 36 const char* argument_opt, | 34 const char* argument_opt, |
| 37 bool is_reference_error) = 0; | 35 ParseErrorType error_type) = 0; |
| 36 |
| 38 private: | 37 private: |
| 39 DISALLOW_COPY_AND_ASSIGN(ParserRecorder); | 38 DISALLOW_COPY_AND_ASSIGN(ParserRecorder); |
| 40 }; | 39 }; |
| 41 | 40 |
| 42 | 41 |
| 43 class SingletonLogger : public ParserRecorder { | 42 class SingletonLogger : public ParserRecorder { |
| 44 public: | 43 public: |
| 45 SingletonLogger() | 44 SingletonLogger() |
| 46 : has_error_(false), start_(-1), end_(-1), is_reference_error_(false) {} | 45 : has_error_(false), start_(-1), end_(-1), error_type_(kSyntaxError) {} |
| 47 virtual ~SingletonLogger() {} | 46 virtual ~SingletonLogger() {} |
| 48 | 47 |
| 49 void Reset() { has_error_ = false; } | 48 void Reset() { has_error_ = false; } |
| 50 | 49 |
| 51 virtual void LogFunction(int start, int end, int literals, int properties, | 50 virtual void LogFunction(int start, int end, int literals, int properties, |
| 52 LanguageMode language_mode, | 51 LanguageMode language_mode, |
| 53 bool scope_uses_super_property) { | 52 bool scope_uses_super_property) { |
| 54 DCHECK(!has_error_); | 53 DCHECK(!has_error_); |
| 55 start_ = start; | 54 start_ = start; |
| 56 end_ = end; | 55 end_ = end; |
| 57 literals_ = literals; | 56 literals_ = literals; |
| 58 properties_ = properties; | 57 properties_ = properties; |
| 59 language_mode_ = language_mode; | 58 language_mode_ = language_mode; |
| 60 scope_uses_super_property_ = scope_uses_super_property; | 59 scope_uses_super_property_ = scope_uses_super_property; |
| 61 } | 60 } |
| 62 | 61 |
| 63 // Logs an error message and marks the log as containing an error. | 62 // Logs an error message and marks the log as containing an error. |
| 64 // Further logging will be ignored, and ExtractData will return a vector | 63 // Further logging will be ignored, and ExtractData will return a vector |
| 65 // representing the error only. | 64 // representing the error only. |
| 66 virtual void LogMessage(int start, | 65 virtual void LogMessage(int start, int end, const char* message, |
| 67 int end, | 66 const char* argument_opt, ParseErrorType error_type) { |
| 68 const char* message, | |
| 69 const char* argument_opt, | |
| 70 bool is_reference_error) { | |
| 71 if (has_error_) return; | 67 if (has_error_) return; |
| 72 has_error_ = true; | 68 has_error_ = true; |
| 73 start_ = start; | 69 start_ = start; |
| 74 end_ = end; | 70 end_ = end; |
| 75 message_ = message; | 71 message_ = message; |
| 76 argument_opt_ = argument_opt; | 72 argument_opt_ = argument_opt; |
| 77 is_reference_error_ = is_reference_error; | 73 error_type_ = error_type; |
| 78 } | 74 } |
| 79 | 75 |
| 80 bool has_error() const { return has_error_; } | 76 bool has_error() const { return has_error_; } |
| 81 | 77 |
| 82 int start() const { return start_; } | 78 int start() const { return start_; } |
| 83 int end() const { return end_; } | 79 int end() const { return end_; } |
| 84 int literals() const { | 80 int literals() const { |
| 85 DCHECK(!has_error_); | 81 DCHECK(!has_error_); |
| 86 return literals_; | 82 return literals_; |
| 87 } | 83 } |
| 88 int properties() const { | 84 int properties() const { |
| 89 DCHECK(!has_error_); | 85 DCHECK(!has_error_); |
| 90 return properties_; | 86 return properties_; |
| 91 } | 87 } |
| 92 LanguageMode language_mode() const { | 88 LanguageMode language_mode() const { |
| 93 DCHECK(!has_error_); | 89 DCHECK(!has_error_); |
| 94 return language_mode_; | 90 return language_mode_; |
| 95 } | 91 } |
| 96 bool scope_uses_super_property() const { | 92 bool scope_uses_super_property() const { |
| 97 DCHECK(!has_error_); | 93 DCHECK(!has_error_); |
| 98 return scope_uses_super_property_; | 94 return scope_uses_super_property_; |
| 99 } | 95 } |
| 100 int is_reference_error() const { return is_reference_error_; } | 96 ParseErrorType error_type() const { |
| 97 DCHECK(has_error_); |
| 98 return error_type_; |
| 99 } |
| 101 const char* message() { | 100 const char* message() { |
| 102 DCHECK(has_error_); | 101 DCHECK(has_error_); |
| 103 return message_; | 102 return message_; |
| 104 } | 103 } |
| 105 const char* argument_opt() const { | 104 const char* argument_opt() const { |
| 106 DCHECK(has_error_); | 105 DCHECK(has_error_); |
| 107 return argument_opt_; | 106 return argument_opt_; |
| 108 } | 107 } |
| 109 | 108 |
| 110 private: | 109 private: |
| 111 bool has_error_; | 110 bool has_error_; |
| 112 int start_; | 111 int start_; |
| 113 int end_; | 112 int end_; |
| 114 // For function entries. | 113 // For function entries. |
| 115 int literals_; | 114 int literals_; |
| 116 int properties_; | 115 int properties_; |
| 117 LanguageMode language_mode_; | 116 LanguageMode language_mode_; |
| 118 bool scope_uses_super_property_; | 117 bool scope_uses_super_property_; |
| 119 // For error messages. | 118 // For error messages. |
| 120 const char* message_; | 119 const char* message_; |
| 121 const char* argument_opt_; | 120 const char* argument_opt_; |
| 122 bool is_reference_error_; | 121 ParseErrorType error_type_; |
| 123 }; | 122 }; |
| 124 | 123 |
| 125 | 124 |
| 126 class CompleteParserRecorder : public ParserRecorder { | 125 class CompleteParserRecorder : public ParserRecorder { |
| 127 public: | 126 public: |
| 128 struct Key { | 127 struct Key { |
| 129 bool is_one_byte; | 128 bool is_one_byte; |
| 130 Vector<const byte> literal_bytes; | 129 Vector<const byte> literal_bytes; |
| 131 }; | 130 }; |
| 132 | 131 |
| 133 CompleteParserRecorder(); | 132 CompleteParserRecorder(); |
| 134 virtual ~CompleteParserRecorder() {} | 133 virtual ~CompleteParserRecorder() {} |
| 135 | 134 |
| 136 virtual void LogFunction(int start, int end, int literals, int properties, | 135 virtual void LogFunction(int start, int end, int literals, int properties, |
| 137 LanguageMode language_mode, | 136 LanguageMode language_mode, |
| 138 bool scope_uses_super_property) { | 137 bool scope_uses_super_property) { |
| 139 function_store_.Add(start); | 138 function_store_.Add(start); |
| 140 function_store_.Add(end); | 139 function_store_.Add(end); |
| 141 function_store_.Add(literals); | 140 function_store_.Add(literals); |
| 142 function_store_.Add(properties); | 141 function_store_.Add(properties); |
| 143 function_store_.Add(language_mode); | 142 function_store_.Add(language_mode); |
| 144 function_store_.Add(scope_uses_super_property); | 143 function_store_.Add(scope_uses_super_property); |
| 145 } | 144 } |
| 146 | 145 |
| 147 // Logs an error message and marks the log as containing an error. | 146 // Logs an error message and marks the log as containing an error. |
| 148 // Further logging will be ignored, and ExtractData will return a vector | 147 // Further logging will be ignored, and ExtractData will return a vector |
| 149 // representing the error only. | 148 // representing the error only. |
| 150 virtual void LogMessage(int start, | 149 virtual void LogMessage(int start, int end, const char* message, |
| 151 int end, | 150 const char* argument_opt, ParseErrorType error_type); |
| 152 const char* message, | |
| 153 const char* argument_opt, | |
| 154 bool is_reference_error_); | |
| 155 ScriptData* GetScriptData(); | 151 ScriptData* GetScriptData(); |
| 156 | 152 |
| 157 bool HasError() { | 153 bool HasError() { |
| 158 return static_cast<bool>(preamble_[PreparseDataConstants::kHasErrorOffset]); | 154 return static_cast<bool>(preamble_[PreparseDataConstants::kHasErrorOffset]); |
| 159 } | 155 } |
| 160 Vector<unsigned> ErrorMessageData() { | 156 Vector<unsigned> ErrorMessageData() { |
| 161 DCHECK(HasError()); | 157 DCHECK(HasError()); |
| 162 return function_store_.ToVector(); | 158 return function_store_.ToVector(); |
| 163 } | 159 } |
| 164 | 160 |
| 165 private: | 161 private: |
| 166 void WriteString(Vector<const char> str); | 162 void WriteString(Vector<const char> str); |
| 167 | 163 |
| 168 // Write a non-negative number to the symbol store. | 164 // Write a non-negative number to the symbol store. |
| 169 void WriteNumber(int number); | 165 void WriteNumber(int number); |
| 170 | 166 |
| 171 Collector<unsigned> function_store_; | 167 Collector<unsigned> function_store_; |
| 172 unsigned preamble_[PreparseDataConstants::kHeaderSize]; | 168 unsigned preamble_[PreparseDataConstants::kHeaderSize]; |
| 173 | 169 |
| 174 #ifdef DEBUG | 170 #ifdef DEBUG |
| 175 int prev_start_; | 171 int prev_start_; |
| 176 #endif | 172 #endif |
| 177 }; | 173 }; |
| 178 | 174 |
| 179 | 175 |
| 180 } } // namespace v8::internal. | 176 } } // namespace v8::internal. |
| 181 | 177 |
| 182 #endif // V8_PREPARSE_DATA_H_ | 178 #endif // V8_PREPARSE_DATA_H_ |
| OLD | NEW |