Skip to content

Commit 3601536

Browse files
committed
revert 'Added structured error reporting to Reader.'
revert 68db655 issue #147
1 parent a67d378 commit 3601536

File tree

5 files changed

+3
-180
lines changed

5 files changed

+3
-180
lines changed

include/json/reader.h

-21
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,6 @@ class JSON_API Reader {
3535
typedef char Char;
3636
typedef const Char* Location;
3737

38-
/** \brief An error tagged with where in the JSON text it was encountered.
39-
*
40-
* The offsets give the [start, limit) range of bytes within the text. Note
41-
* that this is bytes, not codepoints.
42-
*
43-
*/
44-
struct StructuredError {
45-
size_t offset_start;
46-
size_t offset_limit;
47-
std::string message;
48-
};
49-
5038
/** \brief Constructs a Reader allowing all features
5139
* for parsing.
5240
*/
@@ -123,15 +111,6 @@ class JSON_API Reader {
123111
*/
124112
std::string getFormattedErrorMessages() const;
125113

126-
/** \brief Returns a vector of structured erros encounted while parsing.
127-
* \return A (possibly empty) vector of StructuredError objects. Currently
128-
* only one error can be returned, but the caller should tolerate
129-
* multiple
130-
* errors. This can occur if the parser recovers from a non-fatal
131-
* parse error and then encounters additional errors.
132-
*/
133-
std::vector<StructuredError> getStructuredErrors() const;
134-
135114
private:
136115
enum TokenType {
137116
tokenEndOfStream = 0,

include/json/value.h

-12
Original file line numberDiff line numberDiff line change
@@ -530,13 +530,6 @@ Json::Value obj_value(Json::objectValue); // {}
530530
iterator begin();
531531
iterator end();
532532

533-
// Accessors for the [start, limit) range of bytes within the JSON text from
534-
// which this value was parsed, if any.
535-
void setOffsetStart(size_t start);
536-
void setOffsetLimit(size_t limit);
537-
size_t getOffsetStart() const;
538-
size_t getOffsetLimit() const;
539-
540533
private:
541534
void initBasic(ValueType type, bool allocated = false);
542535

@@ -573,11 +566,6 @@ Json::Value obj_value(Json::objectValue); // {}
573566
unsigned int allocated_ : 1; // Notes: if declared as bool, bitfield is useless.
574567
// If not allocated_, string_ must be null-terminated.
575568
CommentInfo* comments_;
576-
577-
// [start, limit) byte offsets in the source JSON text from which this Value
578-
// was extracted.
579-
size_t start_;
580-
size_t limit_;
581569
};
582570

583571
/** \brief Experimental and untested: represents an element of the "path" to

src/lib_json/json_reader.cpp

+2-72
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,9 @@ bool Reader::readValue() {
162162
switch (token.type_) {
163163
case tokenObjectBegin:
164164
successful = readObject(token);
165-
currentValue().setOffsetLimit(current_ - begin_);
166165
break;
167166
case tokenArrayBegin:
168167
successful = readArray(token);
169-
currentValue().setOffsetLimit(current_ - begin_);
170168
break;
171169
case tokenNumber:
172170
successful = decodeNumber(token);
@@ -178,24 +176,18 @@ bool Reader::readValue() {
178176
{
179177
Value v(true);
180178
currentValue().swapPayload(v);
181-
currentValue().setOffsetStart(token.start_ - begin_);
182-
currentValue().setOffsetLimit(token.end_ - begin_);
183179
}
184180
break;
185181
case tokenFalse:
186182
{
187183
Value v(false);
188184
currentValue().swapPayload(v);
189-
currentValue().setOffsetStart(token.start_ - begin_);
190-
currentValue().setOffsetLimit(token.end_ - begin_);
191185
}
192186
break;
193187
case tokenNull:
194188
{
195189
Value v;
196190
currentValue().swapPayload(v);
197-
currentValue().setOffsetStart(token.start_ - begin_);
198-
currentValue().setOffsetLimit(token.end_ - begin_);
199191
}
200192
break;
201193
case tokenArraySeparator:
@@ -207,13 +199,9 @@ bool Reader::readValue() {
207199
current_--;
208200
Value v;
209201
currentValue().swapPayload(v);
210-
currentValue().setOffsetStart(current_ - begin_ - 1);
211-
currentValue().setOffsetLimit(current_ - begin_);
212202
break;
213203
} // Else, fall through...
214204
default:
215-
currentValue().setOffsetStart(token.start_ - begin_);
216-
currentValue().setOffsetLimit(token.end_ - begin_);
217205
return addError("Syntax error: value, object or array expected.", token);
218206
}
219207

@@ -441,12 +429,11 @@ bool Reader::readString() {
441429
return c == '"';
442430
}
443431

444-
bool Reader::readObject(Token& tokenStart) {
432+
bool Reader::readObject(Token& /*tokenStart*/) {
445433
Token tokenName;
446434
std::string name;
447435
Value init(objectValue);
448436
currentValue().swapPayload(init);
449-
currentValue().setOffsetStart(tokenStart.start_ - begin_);
450437
while (readToken(tokenName)) {
451438
bool initialTokenOk = true;
452439
while (tokenName.type_ == tokenComment && initialTokenOk)
@@ -497,10 +484,9 @@ bool Reader::readObject(Token& tokenStart) {
497484
"Missing '}' or object member name", tokenName, tokenObjectEnd);
498485
}
499486

500-
bool Reader::readArray(Token& tokenStart) {
487+
bool Reader::readArray(Token& /*tokenStart*/) {
501488
Value init(arrayValue);
502489
currentValue().swapPayload(init);
503-
currentValue().setOffsetStart(tokenStart.start_ - begin_);
504490
skipSpaces();
505491
if (*current_ == ']') // empty array
506492
{
@@ -540,8 +526,6 @@ bool Reader::decodeNumber(Token& token) {
540526
if (!decodeNumber(token, decoded))
541527
return false;
542528
currentValue().swapPayload(decoded);
543-
currentValue().setOffsetStart(token.start_ - begin_);
544-
currentValue().setOffsetLimit(token.end_ - begin_);
545529
return true;
546530
}
547531

@@ -590,8 +574,6 @@ bool Reader::decodeDouble(Token& token) {
590574
if (!decodeDouble(token, decoded))
591575
return false;
592576
currentValue().swapPayload(decoded);
593-
currentValue().setOffsetStart(token.start_ - begin_);
594-
currentValue().setOffsetLimit(token.end_ - begin_);
595577
return true;
596578
}
597579

@@ -637,8 +619,6 @@ bool Reader::decodeString(Token& token) {
637619
return false;
638620
Value decoded(decoded_string);
639621
currentValue().swapPayload(decoded);
640-
currentValue().setOffsetStart(token.start_ - begin_);
641-
currentValue().setOffsetLimit(token.end_ - begin_);
642622
return true;
643623
}
644624

@@ -850,20 +830,6 @@ std::string Reader::getFormattedErrorMessages() const {
850830
return formattedMessage;
851831
}
852832

853-
std::vector<Reader::StructuredError> Reader::getStructuredErrors() const {
854-
std::vector<Reader::StructuredError> allErrors;
855-
for (Errors::const_iterator itError = errors_.begin();
856-
itError != errors_.end();
857-
++itError) {
858-
const ErrorInfo& error = *itError;
859-
Reader::StructuredError structured;
860-
structured.offset_start = error.token_.start_ - begin_;
861-
structured.offset_limit = error.token_.end_ - begin_;
862-
structured.message = error.message_;
863-
allErrors.push_back(structured);
864-
}
865-
return allErrors;
866-
}
867833
// Reader
868834
/////////////////////////
869835

@@ -915,7 +881,6 @@ class OurReader {
915881
Value& root,
916882
bool collectComments = true);
917883
std::string getFormattedErrorMessages() const;
918-
std::vector<StructuredError> getStructuredErrors() const;
919884

920885
private:
921886
OurReader(OurReader const&); // no impl
@@ -1080,11 +1045,9 @@ bool OurReader::readValue() {
10801045
switch (token.type_) {
10811046
case tokenObjectBegin:
10821047
successful = readObject(token);
1083-
currentValue().setOffsetLimit(current_ - begin_);
10841048
break;
10851049
case tokenArrayBegin:
10861050
successful = readArray(token);
1087-
currentValue().setOffsetLimit(current_ - begin_);
10881051
break;
10891052
case tokenNumber:
10901053
successful = decodeNumber(token);
@@ -1096,24 +1059,18 @@ bool OurReader::readValue() {
10961059
{
10971060
Value v(true);
10981061
currentValue().swapPayload(v);
1099-
currentValue().setOffsetStart(token.start_ - begin_);
1100-
currentValue().setOffsetLimit(token.end_ - begin_);
11011062
}
11021063
break;
11031064
case tokenFalse:
11041065
{
11051066
Value v(false);
11061067
currentValue().swapPayload(v);
1107-
currentValue().setOffsetStart(token.start_ - begin_);
1108-
currentValue().setOffsetLimit(token.end_ - begin_);
11091068
}
11101069
break;
11111070
case tokenNull:
11121071
{
11131072
Value v;
11141073
currentValue().swapPayload(v);
1115-
currentValue().setOffsetStart(token.start_ - begin_);
1116-
currentValue().setOffsetLimit(token.end_ - begin_);
11171074
}
11181075
break;
11191076
case tokenArraySeparator:
@@ -1125,13 +1082,9 @@ bool OurReader::readValue() {
11251082
current_--;
11261083
Value v;
11271084
currentValue().swapPayload(v);
1128-
currentValue().setOffsetStart(current_ - begin_ - 1);
1129-
currentValue().setOffsetLimit(current_ - begin_);
11301085
break;
11311086
} // else, fall through ...
11321087
default:
1133-
currentValue().setOffsetStart(token.start_ - begin_);
1134-
currentValue().setOffsetLimit(token.end_ - begin_);
11351088
return addError("Syntax error: value, object or array expected.", token);
11361089
}
11371090

@@ -1363,7 +1316,6 @@ bool OurReader::readObject(Token& tokenStart) {
13631316
std::string name;
13641317
Value init(objectValue);
13651318
currentValue().swapPayload(init);
1366-
currentValue().setOffsetStart(tokenStart.start_ - begin_);
13671319
while (readToken(tokenName)) {
13681320
bool initialTokenOk = true;
13691321
while (tokenName.type_ == tokenComment && initialTokenOk)
@@ -1423,7 +1375,6 @@ bool OurReader::readObject(Token& tokenStart) {
14231375
bool OurReader::readArray(Token& tokenStart) {
14241376
Value init(arrayValue);
14251377
currentValue().swapPayload(init);
1426-
currentValue().setOffsetStart(tokenStart.start_ - begin_);
14271378
skipSpaces();
14281379
if (*current_ == ']') // empty array
14291380
{
@@ -1463,8 +1414,6 @@ bool OurReader::decodeNumber(Token& token) {
14631414
if (!decodeNumber(token, decoded))
14641415
return false;
14651416
currentValue().swapPayload(decoded);
1466-
currentValue().setOffsetStart(token.start_ - begin_);
1467-
currentValue().setOffsetLimit(token.end_ - begin_);
14681417
return true;
14691418
}
14701419

@@ -1513,8 +1462,6 @@ bool OurReader::decodeDouble(Token& token) {
15131462
if (!decodeDouble(token, decoded))
15141463
return false;
15151464
currentValue().swapPayload(decoded);
1516-
currentValue().setOffsetStart(token.start_ - begin_);
1517-
currentValue().setOffsetLimit(token.end_ - begin_);
15181465
return true;
15191466
}
15201467

@@ -1560,8 +1507,6 @@ bool OurReader::decodeString(Token& token) {
15601507
return false;
15611508
Value decoded(decoded_string);
15621509
currentValue().swapPayload(decoded);
1563-
currentValue().setOffsetStart(token.start_ - begin_);
1564-
currentValue().setOffsetLimit(token.end_ - begin_);
15651510
return true;
15661511
}
15671512

@@ -1768,21 +1713,6 @@ std::string OurReader::getFormattedErrorMessages() const {
17681713
return formattedMessage;
17691714
}
17701715

1771-
std::vector<OurReader::StructuredError> OurReader::getStructuredErrors() const {
1772-
std::vector<OurReader::StructuredError> allErrors;
1773-
for (Errors::const_iterator itError = errors_.begin();
1774-
itError != errors_.end();
1775-
++itError) {
1776-
const ErrorInfo& error = *itError;
1777-
OurReader::StructuredError structured;
1778-
structured.offset_start = error.token_.start_ - begin_;
1779-
structured.offset_limit = error.token_.end_ - begin_;
1780-
structured.message = error.message_;
1781-
allErrors.push_back(structured);
1782-
}
1783-
return allErrors;
1784-
}
1785-
17861716

17871717
class OurCharReader : public CharReader {
17881718
bool const collectComments_;

src/lib_json/json_value.cpp

+1-15
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ Value::Value(bool value) {
401401
Value::Value(Value const& other)
402402
: type_(other.type_), allocated_(false)
403403
,
404-
comments_(0), start_(other.start_), limit_(other.limit_)
404+
comments_(0)
405405
{
406406
switch (type_) {
407407
case nullValue:
@@ -485,8 +485,6 @@ void Value::swapPayload(Value& other) {
485485
void Value::swap(Value& other) {
486486
swapPayload(other);
487487
std::swap(comments_, other.comments_);
488-
std::swap(start_, other.start_);
489-
std::swap(limit_, other.limit_);
490488
}
491489

492490
ValueType Value::type() const { return type_; }
@@ -888,8 +886,6 @@ void Value::clear() {
888886
JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue ||
889887
type_ == objectValue,
890888
"in Json::Value::clear(): requires complex value");
891-
start_ = 0;
892-
limit_ = 0;
893889
switch (type_) {
894890
case arrayValue:
895891
case objectValue:
@@ -965,8 +961,6 @@ void Value::initBasic(ValueType type, bool allocated) {
965961
type_ = type;
966962
allocated_ = allocated;
967963
comments_ = 0;
968-
start_ = 0;
969-
limit_ = 0;
970964
}
971965

972966
// Access an object value by name, create a null member if it does not exist.
@@ -1336,14 +1330,6 @@ std::string Value::getComment(CommentPlacement placement) const {
13361330
return "";
13371331
}
13381332

1339-
void Value::setOffsetStart(size_t start) { start_ = start; }
1340-
1341-
void Value::setOffsetLimit(size_t limit) { limit_ = limit; }
1342-
1343-
size_t Value::getOffsetStart() const { return start_; }
1344-
1345-
size_t Value::getOffsetLimit() const { return limit_; }
1346-
13471333
std::string Value::toStyledString() const {
13481334
StyledWriter writer;
13491335
return writer.write(*this);

0 commit comments

Comments
 (0)