diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2010-12-13 22:03:33 -0800 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2010-12-13 22:12:14 -0800 |
commit | 1d78159e8f8ad7f41167a38ebfa973ed055bc7b6 (patch) | |
tree | bb05356b1eee2278149dfb3d52c34272ef30f149 /deps/v8/src/parser.h | |
parent | 3d0627dc6aae4937c7542243535cade959ced2ee (diff) | |
download | node-new-1d78159e8f8ad7f41167a38ebfa973ed055bc7b6.tar.gz |
Upgrade V8 to 3.0.1
Diffstat (limited to 'deps/v8/src/parser.h')
-rw-r--r-- | deps/v8/src/parser.h | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/deps/v8/src/parser.h b/deps/v8/src/parser.h index 58cd946cad..70d0e18fdb 100644 --- a/deps/v8/src/parser.h +++ b/deps/v8/src/parser.h @@ -169,14 +169,12 @@ class ParserApi { static bool Parse(CompilationInfo* info); // Generic preparser generating full preparse data. - static ScriptDataImpl* PreParse(Handle<String> source, - unibrow::CharacterStream* stream, + static ScriptDataImpl* PreParse(UC16CharacterStream* source, v8::Extension* extension); // Preparser that only does preprocessing that makes sense if only used // immediately after. - static ScriptDataImpl* PartialPreParse(Handle<String> source, - unibrow::CharacterStream* stream, + static ScriptDataImpl* PartialPreParse(UC16CharacterStream* source, v8::Extension* extension); }; @@ -435,18 +433,26 @@ class Parser { Vector<const char*> args); protected: + FunctionLiteral* ParseLazy(Handle<SharedFunctionInfo> info, + UC16CharacterStream* source, + ZoneScope* zone_scope); enum Mode { PARSE_LAZILY, PARSE_EAGERLY }; + // Called by ParseProgram after setting up the scanner. + FunctionLiteral* DoParseProgram(Handle<String> source, + bool in_global_context, + ZoneScope* zone_scope); + // Report syntax error void ReportUnexpectedToken(Token::Value token); void ReportInvalidPreparseData(Handle<String> name, bool* ok); void ReportMessage(const char* message, Vector<const char*> args); bool inside_with() const { return with_nesting_level_ > 0; } - Scanner& scanner() { return scanner_; } + V8JavaScriptScanner& scanner() { return scanner_; } Mode mode() const { return mode_; } ScriptDataImpl* pre_data() const { return pre_data_; } @@ -548,7 +554,7 @@ class Parser { INLINE(Token::Value peek()) { if (stack_overflow_) return Token::ILLEGAL; - return scanner_.peek(); + return scanner().peek(); } INLINE(Token::Value Next()) { @@ -560,9 +566,11 @@ class Parser { } if (StackLimitCheck().HasOverflowed()) { // Any further calls to Next or peek will return the illegal token. + // The current call must return the next token, which might already + // have been peek'ed. stack_overflow_ = true; } - return scanner_.Next(); + return scanner().Next(); } INLINE(void Consume(Token::Value token)); @@ -702,7 +710,14 @@ class JsonParser BASE_EMBEDDED { // Parse JSON input as a single JSON value. // Returns null handle and sets exception if parsing failed. static Handle<Object> Parse(Handle<String> source) { - return JsonParser().ParseJson(source); + if (source->IsExternalTwoByteString()) { + ExternalTwoByteStringUC16CharacterStream stream( + Handle<ExternalTwoByteString>::cast(source), 0, source->length()); + return JsonParser().ParseJson(source, &stream); + } else { + GenericStringUC16CharacterStream stream(source, 0, source->length()); + return JsonParser().ParseJson(source, &stream); + } } private: @@ -710,7 +725,7 @@ class JsonParser BASE_EMBEDDED { ~JsonParser() { } // Parse a string containing a single JSON value. - Handle<Object> ParseJson(Handle<String>); + Handle<Object> ParseJson(Handle<String> script, UC16CharacterStream* source); // Parse a single JSON value from input (grammar production JSONValue). // A JSON value is either a (double-quoted) string literal, a number literal, // one of "true", "false", or "null", or an object or array literal. |