Value traverse to Struct parent

This commit is contained in:
Michael Davidsaver
2019-12-20 09:01:09 -08:00
parent a34fe899da
commit 4b5b134e74
5 changed files with 48 additions and 5 deletions
+20 -2
View File
@@ -373,11 +373,29 @@ void Value::traverse(const std::string &expr, bool modify)
{
size_t pos=0;
while(desc && pos<expr.size()) {
if(expr[pos]=='<') {
// attempt traverse to parent
if(desc!=store->top->desc.get())
{
auto pdesc = desc - desc->parent_index;
std::shared_ptr<FieldStorage> pstore(store, store.get() - desc->offset + pdesc->offset);
store = std::move(pstore);
desc = pdesc;
pos++;
continue;
} else {
// at top
store.reset();
desc = nullptr;
break;
}
}
if(desc->code.code==TypeCode::Struct) {
// attempt traverse to member.
// expect: [0-9a-zA-Z_.]+[\[-$]
size_t sep = expr.find_first_of("[-", pos);
size_t sep = expr.find_first_of("<[-", pos);
decltype (desc->mlookup)::const_iterator it;
@@ -409,7 +427,7 @@ void Value::traverse(const std::string &expr, bool modify)
} else {
// select member of Union
size_t sep = expr.find_first_of("[-.", pos);
size_t sep = expr.find_first_of("<[-.", pos);
decltype (desc->mlookup)::const_iterator it;