Index: src/parser.h |
diff --git a/src/parser.h b/src/parser.h |
index 225a36832ef31ed852a017ae88c30f4738af6230..2952581af92c7313c203e4fb67178045d644c963 100644 |
--- a/src/parser.h |
+++ b/src/parser.h |
@@ -68,11 +68,18 @@ class FunctionEntry BASE_EMBEDDED { |
void set_literal_count(int value) { backing_[kLiteralCountOffset] = value; } |
int property_count() { return backing_[kPropertyCountOffset]; } |
- void set_property_count(int value) { backing_[kPropertyCountOffset] = value; } |
+ void set_property_count(int value) { |
+ backing_[kPropertyCountOffset] = value; |
+ } |
+ |
+ int predata_skip() { return backing_[kPredataSkipOffset]; } |
+ void set_predata_skip(int value) { |
+ backing_[kPredataSkipOffset] = value; |
+ } |
bool is_valid() { return backing_.length() > 0; } |
- static const int kSize = 4; |
+ static const int kSize = 5; |
private: |
Vector<unsigned> backing_; |
@@ -80,6 +87,7 @@ class FunctionEntry BASE_EMBEDDED { |
static const int kEndPosOffset = 1; |
static const int kLiteralCountOffset = 2; |
static const int kPropertyCountOffset = 3; |
+ static const int kPredataSkipOffset = 4; |
}; |
@@ -87,12 +95,13 @@ class ScriptDataImpl : public ScriptData { |
public: |
explicit ScriptDataImpl(Vector<unsigned> store) |
: store_(store), |
- last_entry_(0) { } |
+ index_(kHeaderSize) { } |
virtual ~ScriptDataImpl(); |
virtual int Length(); |
virtual const char* Data(); |
virtual bool HasError(); |
- FunctionEntry GetFunctionEnd(int start); |
+ FunctionEntry GetFunctionEntry(int start); |
+ void SkipFunctionEntry(int start); |
bool SanityCheck(); |
Scanner::Location MessageLocation(); |
@@ -102,31 +111,33 @@ class ScriptDataImpl : public ScriptData { |
bool has_error() { return store_[kHasErrorOffset]; } |
unsigned magic() { return store_[kMagicOffset]; } |
unsigned version() { return store_[kVersionOffset]; } |
+ // Skip forward in the preparser data by the given number |
+ // of unsigned ints. |
+ virtual void Skip(int entries) { |
+ ASSERT(entries >= 0); |
+ ASSERT(entries <= store_.length() - index_); |
+ index_ += entries; |
+ } |
static const unsigned kMagicNumber = 0xBadDead; |
static const unsigned kCurrentVersion = 1; |
- static const unsigned kMagicOffset = 0; |
- static const unsigned kVersionOffset = 1; |
- static const unsigned kHasErrorOffset = 2; |
- static const unsigned kSizeOffset = 3; |
- static const unsigned kHeaderSize = 4; |
+ static const int kMagicOffset = 0; |
+ static const int kVersionOffset = 1; |
+ static const int kHasErrorOffset = 2; |
+ static const int kSizeOffset = 3; |
+ static const int kHeaderSize = 4; |
private: |
+ Vector<unsigned> store_; |
+ int index_; |
+ |
unsigned Read(int position); |
unsigned* ReadAddress(int position); |
- int EntryCount(); |
- FunctionEntry nth(int n); |
- |
- Vector<unsigned> store_; |
+ void FindStart(int position); |
// Read strings written by ParserRecorder::WriteString. |
static const char* ReadString(unsigned* start, int* chars); |
- |
- // The last entry returned. This is used to make lookup faster: |
- // the next entry to return is typically the next entry so lookup |
- // will usually be much faster if we start from the last entry. |
- int last_entry_; |
}; |