AdvanceSkipWhitespace();
if (c0_ != '}') {
do {
+ if (c0_ != '"') return ReportUnexpectedCharacter();
Handle<String> key = ParseJsonSymbol();
if (key.is_null() || c0_ != ':') return ReportUnexpectedCharacter();
AdvanceSkipWhitespace();
return isolate()->factory()->NewNumber(number_);
}
-Handle<Object> JsonParser::SlowScanJsonString() {
+Handle<String> JsonParser::SlowScanJsonString() {
// The currently scanned ascii characters.
Handle<String> ascii(isolate()->factory()->NewSubString(source_,
beg_pos_,
}
// Check for control character (0x00-0x1f) or unterminated string (<0).
- if (c0_ < 0x20) return ReportUnexpectedCharacter();
+ if (c0_ < 0x20) return Handle<String>::null();
if (c0_ != '\\') {
seq_two_byte->SeqTwoByteStringSet(count++, c0_);
Advance();
Advance();
int digit = HexValue(c0_);
if (digit < 0) {
- return ReportUnexpectedCharacter();
+ return Handle<String>::null();
}
value = value * 16 + digit;
}
break;
}
default:
- return ReportUnexpectedCharacter();
+ return Handle<String>::null();
}
Advance();
}
template <bool is_symbol>
-Handle<Object> JsonParser::ScanJsonString() {
+Handle<String> JsonParser::ScanJsonString() {
ASSERT_EQ('"', c0_);
Advance();
beg_pos_ = position_;
// Fast case for ascii only without escape characters.
while (c0_ != '"') {
// Check for control character (0x00-0x1f) or unterminated string (<0).
- if (c0_ < 0x20) return ReportUnexpectedCharacter();
+ if (c0_ < 0x20) return Handle<String>::null();
if (c0_ != '\\' && c0_ < kMaxAsciiCharCode) {
Advance();
} else {
// literals. The string must only be double-quoted (not single-quoted), and
// the only allowed backslash-escapes are ", /, \, b, f, n, r, t and
// four-digit hex escapes (uXXXX). Any other use of backslashes is invalid.
- Handle<Object> ParseJsonString() {
+ Handle<String> ParseJsonString() {
return ScanJsonString<false>();
}
- Handle<Object> ParseJsonSymbol() {
+ Handle<String> ParseJsonSymbol() {
return ScanJsonString<true>();
}
template <bool is_symbol>
- Handle<Object> ScanJsonString();
+ Handle<String> ScanJsonString();
// Slow version for unicode support, uses the first ascii_count characters,
// as first part of a ConsString
- Handle<Object> SlowScanJsonString();
+ Handle<String> SlowScanJsonString();
// A JSON number (production JSONNumber) is a subset of the valid JavaScript
// decimal number literals.