MCPcopy Create free account
hub / github.com/Kitware/CMake / readObject

Method readObject

Utilities/cmjsoncpp/src/lib_json/json_reader.cpp:443–488  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

441}
442
443bool Reader::readObject(Token& token) {
444 Token tokenName;
445 String name;
446 Value init(objectValue);
447 currentValue().swapPayload(init);
448 currentValue().setOffsetStart(token.start_ - begin_);
449 while (readTokenSkippingComments(tokenName)) {
450 if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object
451 return true;
452 name.clear();
453 if (tokenName.type_ == tokenString) {
454 if (!decodeString(tokenName, name))
455 return recoverFromError(tokenObjectEnd);
456 } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) {
457 Value numberName;
458 if (!decodeNumber(tokenName, numberName))
459 return recoverFromError(tokenObjectEnd);
460 name = numberName.asString();
461 } else {
462 break;
463 }
464
465 Token colon;
466 if (!readToken(colon) || colon.type_ != tokenMemberSeparator) {
467 return addErrorAndRecover("Missing ':' after object member name", colon,
468 tokenObjectEnd);
469 }
470 Value& value = currentValue()[name];
471 nodes_.push(&value);
472 bool ok = readValue();
473 nodes_.pop();
474 if (!ok) // error already set
475 return recoverFromError(tokenObjectEnd);
476
477 Token comma;
478 if (!readTokenSkippingComments(comma) ||
479 (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator)) {
480 return addErrorAndRecover("Missing ',' or '}' in object declaration",
481 comma, tokenObjectEnd);
482 }
483 if (comma.type_ == tokenObjectEnd)
484 return true;
485 }
486 return addErrorAndRecover("Missing '}' or object member name", tokenName,
487 tokenObjectEnd);
488}
489
490bool Reader::readArray(Token& token) {
491 Value init(arrayValue);

Callers

nothing calls this directly

Calls 8

throwRuntimeErrorFunction · 0.85
swapPayloadMethod · 0.80
setOffsetStartMethod · 0.80
asStringMethod · 0.80
lengthMethod · 0.80
isMemberMethod · 0.80
emptyMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected