| 4028 | } |
| 4029 | |
| 4030 | Value Path::resolve(const Value &root, const Value &defaultValue) const { |
| 4031 | const Value *node = &root; |
| 4032 | for (const auto &arg : args_) { |
| 4033 | if (arg.kind_ == PathArgument::kindIndex) { |
| 4034 | if (!node->isArray() || !node->isValidIndex(arg.index_)) |
| 4035 | return defaultValue; |
| 4036 | node = &((*node)[arg.index_]); |
| 4037 | } else if (arg.kind_ == PathArgument::kindKey) { |
| 4038 | if (!node->isObject()) |
| 4039 | return defaultValue; |
| 4040 | node = &((*node)[arg.key_]); |
| 4041 | if (node == &Value::nullSingleton()) |
| 4042 | return defaultValue; |
| 4043 | } |
| 4044 | } |
| 4045 | return *node; |
| 4046 | } |
| 4047 | |
| 4048 | Value &Path::make(Value &root) const { |
| 4049 | Value *node = &root; |
no test coverage detected