Lines Matching refs:start

63 bool parseConstToken(const CharType* start, const CharType* end, const CharType** tokenEnd, const char* token)
65 while (start < end && *token != '\0' && *start++ == *token++) { }
68 *tokenEnd = start;
73 bool readInt(const CharType* start, const CharType* end, const CharType** tokenEnd, bool canHaveLeadingZeros)
75 if (start == end)
77 bool haveLeadingZero = '0' == *start;
79 while (start < end && '0' <= *start && *start <= '9') {
80 ++start;
87 *tokenEnd = start;
92 bool parseNumberToken(const CharType* start, const CharType* end, const CharType** tokenEnd)
96 if (start == end)
98 CharType c = *start;
100 ++start;
102 if (!readInt(start, end, &start, false))
104 if (start == end) {
105 *tokenEnd = start;
110 c = *start;
112 ++start;
113 if (!readInt(start, end, &start, true))
115 if (start == end) {
116 *tokenEnd = start;
119 c = *start;
124 ++start;
125 if (start == end)
127 c = *start;
129 ++start;
130 if (start == end)
133 if (!readInt(start, end, &start, true))
137 *tokenEnd = start;
142 bool readHexDigits(const CharType* start, const CharType* end, const CharType** tokenEnd, int digits)
144 if (end - start < digits)
147 CharType c = *start++;
151 *tokenEnd = start;
156 bool parseStringToken(const CharType* start, const CharType* end, const CharType** tokenEnd)
158 while (start < end) {
159 CharType c = *start++;
161 c = *start++;
165 if (!readHexDigits(start, end, &start, 2))
169 if (!readHexDigits(start, end, &start, 4))
186 *tokenEnd = start;
194 Token parseToken(const CharType* start, const CharType* end, const CharType** tokenStart, const CharType** tokenEnd)
196 while (start < end && isSpaceOrNewline(*start))
197 ++start;
199 if (start == end)
202 *tokenStart = start;
204 switch (*start) {
206 if (parseConstToken(start, end, tokenEnd, nullString))
210 if (parseConstToken(start, end, tokenEnd, trueString))
214 if (parseConstToken(start, end, tokenEnd, falseString))
218 *tokenEnd = start + 1;
221 *tokenEnd = start + 1;
224 *tokenEnd = start + 1;
227 *tokenEnd = start + 1;
230 *tokenEnd = start + 1;
233 *tokenEnd = start + 1;
246 if (parseNumberToken(start, end, tokenEnd))
250 if (parseStringToken(start + 1, end, tokenEnd))
271 bool decodeString(const CharType* start, const CharType* end, StringBuilder* output)
273 while (start < end) {
274 UChar c = *start++;
279 c = *start++;
304 c = (hexToInt(*start) << 4) +
305 hexToInt(*(start + 1));
306 start += 2;
309 c = (hexToInt(*start) << 12) +
310 (hexToInt(*(start + 1)) << 8) +
311 (hexToInt(*(start + 2)) << 4) +
312 hexToInt(*(start + 3));
313 start += 4;
324 bool decodeString(const CharType* start, const CharType* end, String* output)
326 if (start == end) {
330 if (start > end)
333 buffer.reserveCapacity(end - start);
334 if (!decodeString(start, end, &buffer))
341 PassRefPtr<JSONValue> buildValue(const CharType* start, const CharType* end, const CharType** valueTokenEnd, int depth)
349 Token token = parseToken(start, end, &tokenStart, &tokenEnd);
380 start = tokenEnd;
381 token = parseToken(start, end, &tokenStart, &tokenEnd);
383 RefPtr<JSONValue> arrayNode = buildValue(start, end, &tokenEnd, depth + 1);
389 start = tokenEnd;
390 token = parseToken(start, end, &tokenStart, &tokenEnd);
392 start = tokenEnd;
393 token = parseToken(start, end, &tokenStart, &tokenEnd);
408 start = tokenEnd;
409 token = parseToken(start, end, &tokenStart, &tokenEnd);
416 start = tokenEnd;
418 token = parseToken(start, end, &tokenStart, &tokenEnd);
421 start = tokenEnd;
423 RefPtr<JSONValue> value = buildValue(start, end, &tokenEnd, depth + 1);
427 start = tokenEnd;
431 token = parseToken(start, end, &tokenStart, &tokenEnd);
433 start = tokenEnd;
434 token = parseToken(start, end, &tokenStart, &tokenEnd);
457 PassRefPtr<JSONValue> parseJSONInternal(const CharType* start, unsigned length)
459 const CharType* end = start + length;
461 RefPtr<JSONValue> value = buildValue(start, end, &tokenEnd, 0);