From 994615f76b86a65f11829863be96c63135eef977 Mon Sep 17 00:00:00 2001 From: Andreas Stöckel Date: Sat, 11 Apr 2015 16:42:43 +0200 Subject: Store whether the DocumentField is part of an explicit field inside the "DocumentField" class --- src/core/parser/stack/DocumentHandler.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'src/core/parser/stack/DocumentHandler.cpp') diff --git a/src/core/parser/stack/DocumentHandler.cpp b/src/core/parser/stack/DocumentHandler.cpp index 2be3008..34d4d17 100644 --- a/src/core/parser/stack/DocumentHandler.cpp +++ b/src/core/parser/stack/DocumentHandler.cpp @@ -54,6 +54,15 @@ void DocumentHandler::end() { scope().pop(logger()); } /* DocumentField */ +DocumentField::DocumentField(Manager &mgr, Handle parent, size_t fieldIdx, + bool transparent, bool explicitField) + : Node(mgr, parent), + fieldIdx(fieldIdx), + transparent(transparent), + explicitField(explicitField) +{ +} + Rooted DocumentField::getDescriptor() { // Fetch the FieldDescriptor from the parent node. The parent node should @@ -166,11 +175,12 @@ void DocumentChildHandler::pushScopeTokens() void DocumentChildHandler::pushDocumentField(Handle parent, Handle fieldDescr, - size_t fieldIdx, bool transparent) + size_t fieldIdx, bool transparent, + bool explicitField) { // Push the field onto the scope - Rooted field = - new DocumentField(manager(), parent, fieldIdx, transparent); + Rooted field = new DocumentField(manager(), parent, fieldIdx, + transparent, explicitField); field->setLocation(location()); scope().push(field); } @@ -192,7 +202,7 @@ void DocumentChildHandler::createPath(const NodeVector &path, parent->getDescriptor()->getFieldDescriptorIndex(); const Rooted fieldDescr = parent->getDescriptor()->getFieldDescriptor(fieldIdx); - pushDocumentField(scope().getLeaf(), fieldDescr, fieldIdx, true); + pushDocumentField(scope().getLeaf(), fieldDescr, fieldIdx, true, false); // add the transparent/implicit structure element. Rooted transparent = @@ -208,7 +218,7 @@ void DocumentChildHandler::createPath(const NodeVector &path, const ssize_t fieldIdx = parent->getDescriptor()->getFieldDescriptorIndex(); const Rooted fieldDescr = parent->getDescriptor()->getFieldDescriptor(fieldIdx); - pushDocumentField(scope().getLeaf(), fieldDescr, fieldIdx, true); + pushDocumentField(scope().getLeaf(), fieldDescr, fieldIdx, true, false); // Generally allow explicit fields in the new field scope().setFlag(ParserFlag::POST_EXPLICIT_FIELDS, false); @@ -325,7 +335,7 @@ bool DocumentChildHandler::startCommand(Variant::mapType &args) parentNode, parent->getDescriptor()->getFieldDescriptor( newFieldIdx), - newFieldIdx, false); + newFieldIdx, false, true); pushScopeTokens(); isExplicitField = true; return true; @@ -682,7 +692,7 @@ bool DocumentChildHandler::fieldStart(bool &isDefault, size_t fieldIdx) } // push the field on the stack. - pushDocumentField(parentNode, fields[fieldIdx], fieldIdx, false); + pushDocumentField(parentNode, fields[fieldIdx], fieldIdx, false, false); pushScopeTokens(); // Generally allow explicit fields in the new field -- cgit v1.2.3