Changeset 89192 in webkit for trunk/Source/JavaScriptCore/runtime/LiteralParser.h
- Timestamp:
- Jun 18, 2011, 1:47:10 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/runtime/LiteralParser.h
r89184 r89192 27 27 #define LiteralParser_h 28 28 29 #include "Identifier.h"30 29 #include "JSGlobalObjectFunctions.h" 31 30 #include "JSValue.h" … … 36 35 class LiteralParser { 37 36 public: 38 typedef enum { StrictJSON, NonStrictJSON , JSONP} ParserMode;39 LiteralParser(ExecState* exec, const U Char* characters, unsigned length, ParserMode mode)37 typedef enum { StrictJSON, NonStrictJSON } ParserMode; 38 LiteralParser(ExecState* exec, const UString& s, ParserMode mode) 40 39 : m_exec(exec) 41 , m_lexer( characters, length, mode)40 , m_lexer(s, mode) 42 41 , m_mode(mode) 43 42 { … … 48 47 m_lexer.next(); 49 48 JSValue result = parse(m_mode == StrictJSON ? StartParseExpression : StartParseStatement); 50 if (m_lexer.currentToken().type == TokSemi)51 m_lexer.next();52 49 if (m_lexer.currentToken().type != TokEnd) 53 50 return JSValue(); 54 51 return result; 55 52 } 56 57 enum JSONPPathEntryType {58 JSONPPathEntryTypeDeclare, // var pathEntryName = JSON59 JSONPPathEntryTypeDot, // <prior entries>.pathEntryName = JSON60 JSONPPathEntryTypeLookup // <prior entries>[pathIndex] = JSON61 };62 63 struct JSONPPathEntry {64 JSONPPathEntryType m_type;65 Identifier m_pathEntryName;66 int m_pathIndex;67 };68 69 struct JSONPData {70 Vector<JSONPPathEntry> m_path;71 Strong<Unknown> m_value;72 };73 74 bool tryJSONPParse(Vector<JSONPData>&);75 76 53 private: 77 54 enum ParserState { StartParseObject, StartParseArray, StartParseExpression, … … 82 59 TokString, TokIdentifier, TokNumber, TokColon, 83 60 TokLParen, TokRParen, TokComma, TokTrue, TokFalse, 84 TokNull, TokEnd, Tok Dot, TokAssign, TokSemi, TokError };85 61 TokNull, TokEnd, TokError }; 62 86 63 class Lexer { 87 64 public: … … 90 67 const UChar* start; 91 68 const UChar* end; 92 UString stringBuffer; 93 union { 94 double numberToken; 95 struct { 96 const UChar* stringToken; 97 int stringLength; 98 }; 99 }; 69 UString stringToken; 70 double numberToken; 100 71 }; 101 Lexer(const UChar* characters, unsigned length, ParserMode mode) 102 : m_mode(mode) 103 , m_ptr(characters) 104 , m_end(characters + length) 72 Lexer(const UString& s, ParserMode mode) 73 : m_string(s) 74 , m_mode(mode) 75 , m_ptr(s.characters()) 76 , m_end(s.characters() + s.length()) 105 77 { 106 78 } 107 79 108 TokenType next(); 80 TokenType next() 81 { 82 return lex(m_currentToken); 83 } 109 84 110 85 const LiteralParserToken& currentToken() … … 114 89 115 90 private: 116 template <ParserMode mode>TokenType lex(LiteralParserToken&);117 template <ParserMode mode , UChar terminator> ALWAYS_INLINETokenType lexString(LiteralParserToken&);118 ALWAYS_INLINETokenType lexNumber(LiteralParserToken&);91 TokenType lex(LiteralParserToken&); 92 template <ParserMode mode> TokenType lexString(LiteralParserToken&); 93 TokenType lexNumber(LiteralParserToken&); 119 94 LiteralParserToken m_currentToken; 120 95 UString m_string; … … 130 105 LiteralParser::Lexer m_lexer; 131 106 ParserMode m_mode; 132 static unsigned const MaximumCachableCharacter = 128;133 FixedArray<Identifier, MaximumCachableCharacter> m_shortIdentifiers;134 FixedArray<Identifier, MaximumCachableCharacter> m_recentIdentifiers;135 ALWAYS_INLINE const Identifier makeIdentifier(const UChar* characters, size_t length);136 107 }; 137 138 108 } 139 109
Note:
See TracChangeset
for help on using the changeset viewer.