| Index: src/parser.h
|
| diff --git a/src/parser.h b/src/parser.h
|
| index 9a84ab9071c5baef7ee0412c9e4d03ae1a0e805e..a067bd7c7dbbde265d76b691b1475d02e55c3b6f 100644
|
| --- a/src/parser.h
|
| +++ b/src/parser.h
|
| @@ -32,6 +32,7 @@
|
| #include "ast.h"
|
| #include "scanner.h"
|
| #include "scopes.h"
|
| +#include "preparse-data.h"
|
|
|
| namespace v8 {
|
| namespace internal {
|
| @@ -123,32 +124,15 @@ class ScriptDataImpl : public ScriptData {
|
| Vector<const char*> BuildArgs();
|
|
|
| int symbol_count() {
|
| - return (store_.length() > kHeaderSize) ? store_[kSymbolCountOffset] : 0;
|
| + return (store_.length() > PreparseDataConstants::kHeaderSize)
|
| + ? store_[PreparseDataConstants::kSymbolCountOffset]
|
| + : 0;
|
| }
|
| // The following functions should only be called if SanityCheck has
|
| // returned true.
|
| - bool has_error() { return store_[kHasErrorOffset]; }
|
| - unsigned magic() { return store_[kMagicOffset]; }
|
| - unsigned version() { return store_[kVersionOffset]; }
|
| -
|
| - static const unsigned kMagicNumber = 0xBadDead;
|
| - static const unsigned kCurrentVersion = 5;
|
| -
|
| - static const int kMagicOffset = 0;
|
| - static const int kVersionOffset = 1;
|
| - static const int kHasErrorOffset = 2;
|
| - static const int kFunctionsSizeOffset = 3;
|
| - static const int kSymbolCountOffset = 4;
|
| - static const int kSizeOffset = 5;
|
| - static const int kHeaderSize = 6;
|
| -
|
| - // If encoding a message, the following positions are fixed.
|
| - static const int kMessageStartPos = 0;
|
| - static const int kMessageEndPos = 1;
|
| - static const int kMessageArgCountPos = 2;
|
| - static const int kMessageTextPos = 3;
|
| -
|
| - static const byte kNumberTerminator = 0x80u;
|
| + bool has_error() { return store_[PreparseDataConstants::kHasErrorOffset]; }
|
| + unsigned magic() { return store_[PreparseDataConstants::kMagicOffset]; }
|
| + unsigned version() { return store_[PreparseDataConstants::kVersionOffset]; }
|
|
|
| private:
|
| Vector<unsigned> store_;
|
| @@ -177,127 +161,6 @@ class ScriptDataImpl : public ScriptData {
|
| };
|
|
|
|
|
| -// Record only functions.
|
| -class PartialParserRecorder {
|
| - public:
|
| - PartialParserRecorder();
|
| - virtual ~PartialParserRecorder() {}
|
| -
|
| - void LogFunction(int start, int end, int literals, int properties) {
|
| - function_store_.Add(start);
|
| - function_store_.Add(end);
|
| - function_store_.Add(literals);
|
| - function_store_.Add(properties);
|
| - }
|
| -
|
| - virtual void LogSymbol(int start, const char* symbol, int length) { }
|
| -
|
| - // Logs an error message and marks the log as containing an error.
|
| - // Further logging will be ignored, and ExtractData will return a vector
|
| - // representing the error only.
|
| - void LogMessage(int start,
|
| - int end,
|
| - const char* message,
|
| - const char* argument_opt) {
|
| - Scanner::Location location(start, end);
|
| - Vector<const char*> arguments;
|
| - if (argument_opt != NULL) {
|
| - arguments = Vector<const char*>(&argument_opt, 1);
|
| - }
|
| - this->LogMessage(location, message, arguments);
|
| - }
|
| -
|
| - int function_position() { return function_store_.size(); }
|
| -
|
| - void LogMessage(Scanner::Location loc,
|
| - const char* message,
|
| - Vector<const char*> args);
|
| -
|
| - virtual Vector<unsigned> ExtractData();
|
| -
|
| - void PauseRecording() {
|
| - pause_count_++;
|
| - is_recording_ = false;
|
| - }
|
| -
|
| - void ResumeRecording() {
|
| - ASSERT(pause_count_ > 0);
|
| - if (--pause_count_ == 0) is_recording_ = !has_error();
|
| - }
|
| -
|
| - int symbol_position() { return 0; }
|
| - int symbol_ids() { return 0; }
|
| -
|
| - protected:
|
| - bool has_error() {
|
| - return static_cast<bool>(preamble_[ScriptDataImpl::kHasErrorOffset]);
|
| - }
|
| -
|
| - bool is_recording() {
|
| - return is_recording_;
|
| - }
|
| -
|
| - void WriteString(Vector<const char> str);
|
| -
|
| - Collector<unsigned> function_store_;
|
| - unsigned preamble_[ScriptDataImpl::kHeaderSize];
|
| - bool is_recording_;
|
| - int pause_count_;
|
| -
|
| -#ifdef DEBUG
|
| - int prev_start_;
|
| -#endif
|
| -};
|
| -
|
| -
|
| -// Record both functions and symbols.
|
| -class CompleteParserRecorder: public PartialParserRecorder {
|
| - public:
|
| - CompleteParserRecorder();
|
| - virtual ~CompleteParserRecorder() { }
|
| -
|
| - void LogSymbol(int start, Vector<const char> literal);
|
| -
|
| - virtual void LogSymbol(int start, const char* symbol, int length) {
|
| - LogSymbol(start, Vector<const char>(symbol, length));
|
| - }
|
| -
|
| - virtual Vector<unsigned> ExtractData();
|
| -
|
| - int symbol_position() { return symbol_store_.size(); }
|
| - int symbol_ids() { return symbol_id_; }
|
| -
|
| - private:
|
| - static int vector_hash(Vector<const char> string) {
|
| - int hash = 0;
|
| - for (int i = 0; i < string.length(); i++) {
|
| - int c = string[i];
|
| - hash += c;
|
| - hash += (hash << 10);
|
| - hash ^= (hash >> 6);
|
| - }
|
| - return hash;
|
| - }
|
| -
|
| - static bool vector_compare(void* a, void* b) {
|
| - Vector<const char>* string1 = reinterpret_cast<Vector<const char>* >(a);
|
| - Vector<const char>* string2 = reinterpret_cast<Vector<const char>* >(b);
|
| - int length = string1->length();
|
| - if (string2->length() != length) return false;
|
| - return memcmp(string1->start(), string2->start(), length) == 0;
|
| - }
|
| -
|
| - // Write a non-negative number to the symbol store.
|
| - void WriteNumber(int number);
|
| -
|
| - Collector<byte> symbol_store_;
|
| - Collector<Vector<const char> > symbol_entries_;
|
| - HashMap symbol_table_;
|
| - int symbol_id_;
|
| -};
|
| -
|
| -
|
| -
|
| class ParserApi {
|
| public:
|
| // Parses the source code represented by the compilation info and sets its
|
|
|