| OLD | NEW |
| 1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 static const char* ReadString(unsigned* start, int* chars); | 174 static const char* ReadString(unsigned* start, int* chars); |
| 175 | 175 |
| 176 friend class ScriptData; | 176 friend class ScriptData; |
| 177 }; | 177 }; |
| 178 | 178 |
| 179 | 179 |
| 180 // Record only functions. | 180 // Record only functions. |
| 181 class PartialParserRecorder { | 181 class PartialParserRecorder { |
| 182 public: | 182 public: |
| 183 PartialParserRecorder(); | 183 PartialParserRecorder(); |
| 184 virtual ~PartialParserRecorder() {} |
| 184 | 185 |
| 185 void LogFunction(int start, int end, int literals, int properties) { | 186 void LogFunction(int start, int end, int literals, int properties) { |
| 186 function_store_.Add(start); | 187 function_store_.Add(start); |
| 187 function_store_.Add(end); | 188 function_store_.Add(end); |
| 188 function_store_.Add(literals); | 189 function_store_.Add(literals); |
| 189 function_store_.Add(properties); | 190 function_store_.Add(properties); |
| 190 } | 191 } |
| 191 | 192 |
| 192 void LogSymbol(int start, const char* symbol, int length) { } | 193 virtual void LogSymbol(int start, const char* symbol, int length) { } |
| 193 | 194 |
| 194 // Logs an error message and marks the log as containing an error. | 195 // Logs an error message and marks the log as containing an error. |
| 195 // Further logging will be ignored, and ExtractData will return a vector | 196 // Further logging will be ignored, and ExtractData will return a vector |
| 196 // representing the error only. | 197 // representing the error only. |
| 197 void LogMessage(int start, | 198 void LogMessage(int start, |
| 198 int end, | 199 int end, |
| 199 const char* message, | 200 const char* message, |
| 200 const char* argument_opt) { | 201 const char* argument_opt) { |
| 201 Scanner::Location location(start, end); | 202 Scanner::Location location(start, end); |
| 202 Vector<const char*> arguments; | 203 Vector<const char*> arguments; |
| 203 if (argument_opt != NULL) { | 204 if (argument_opt != NULL) { |
| 204 arguments = Vector<const char*>(&argument_opt, 1); | 205 arguments = Vector<const char*>(&argument_opt, 1); |
| 205 } | 206 } |
| 206 this->LogMessage(location, message, arguments); | 207 this->LogMessage(location, message, arguments); |
| 207 } | 208 } |
| 208 | 209 |
| 209 int function_position() { return function_store_.size(); } | 210 int function_position() { return function_store_.size(); } |
| 210 | 211 |
| 211 void LogMessage(Scanner::Location loc, | 212 void LogMessage(Scanner::Location loc, |
| 212 const char* message, | 213 const char* message, |
| 213 Vector<const char*> args); | 214 Vector<const char*> args); |
| 214 | 215 |
| 215 Vector<unsigned> ExtractData(); | 216 virtual Vector<unsigned> ExtractData(); |
| 216 | 217 |
| 217 void PauseRecording() { | 218 void PauseRecording() { |
| 218 pause_count_++; | 219 pause_count_++; |
| 219 is_recording_ = false; | 220 is_recording_ = false; |
| 220 } | 221 } |
| 221 | 222 |
| 222 void ResumeRecording() { | 223 void ResumeRecording() { |
| 223 ASSERT(pause_count_ > 0); | 224 ASSERT(pause_count_ > 0); |
| 224 if (--pause_count_ == 0) is_recording_ = !has_error(); | 225 if (--pause_count_ == 0) is_recording_ = !has_error(); |
| 225 } | 226 } |
| (...skipping 20 matching lines...) Expand all Loading... |
| 246 #ifdef DEBUG | 247 #ifdef DEBUG |
| 247 int prev_start_; | 248 int prev_start_; |
| 248 #endif | 249 #endif |
| 249 }; | 250 }; |
| 250 | 251 |
| 251 | 252 |
| 252 // Record both functions and symbols. | 253 // Record both functions and symbols. |
| 253 class CompleteParserRecorder: public PartialParserRecorder { | 254 class CompleteParserRecorder: public PartialParserRecorder { |
| 254 public: | 255 public: |
| 255 CompleteParserRecorder(); | 256 CompleteParserRecorder(); |
| 257 virtual ~CompleteParserRecorder() { } |
| 256 | 258 |
| 257 void LogSymbol(int start, Vector<const char> literal); | 259 void LogSymbol(int start, Vector<const char> literal); |
| 258 | 260 |
| 259 void LogSymbol(int start, const char* symbol, int length) { | 261 virtual void LogSymbol(int start, const char* symbol, int length) { |
| 260 LogSymbol(start, Vector<const char>(symbol, length)); | 262 LogSymbol(start, Vector<const char>(symbol, length)); |
| 261 } | 263 } |
| 262 | 264 |
| 263 Vector<unsigned> ExtractData(); | 265 virtual Vector<unsigned> ExtractData(); |
| 264 | 266 |
| 265 int symbol_position() { return symbol_store_.size(); } | 267 int symbol_position() { return symbol_store_.size(); } |
| 266 int symbol_ids() { return symbol_id_; } | 268 int symbol_ids() { return symbol_id_; } |
| 267 | 269 |
| 268 private: | 270 private: |
| 269 static int vector_hash(Vector<const char> string) { | 271 static int vector_hash(Vector<const char> string) { |
| 270 int hash = 0; | 272 int hash = 0; |
| 271 for (int i = 0; i < string.length(); i++) { | 273 for (int i = 0; i < string.length(); i++) { |
| 272 int c = string[i]; | 274 int c = string[i]; |
| 273 hash += c; | 275 hash += c; |
| (...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 850 // return a null handle. Primarily for readability. | 852 // return a null handle. Primarily for readability. |
| 851 Handle<Object> ReportUnexpectedToken() { return Handle<Object>::null(); } | 853 Handle<Object> ReportUnexpectedToken() { return Handle<Object>::null(); } |
| 852 // Converts the currently parsed literal to a JavaScript String. | 854 // Converts the currently parsed literal to a JavaScript String. |
| 853 Handle<String> GetString(); | 855 Handle<String> GetString(); |
| 854 | 856 |
| 855 JsonScanner scanner_; | 857 JsonScanner scanner_; |
| 856 }; | 858 }; |
| 857 } } // namespace v8::internal | 859 } } // namespace v8::internal |
| 858 | 860 |
| 859 #endif // V8_PARSER_H_ | 861 #endif // V8_PARSER_H_ |
| OLD | NEW |