From 1453fdcbc5b64a8bfa7771b5b16a90f8ce58187a Mon Sep 17 00:00:00 2001 From: Ning Sun Date: Fri, 19 Feb 2021 22:58:58 +0800 Subject: [PATCH] (fix) issue when up level block has base value --- src/context.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/context.rs b/src/context.rs index 06c0598c3..10e15fd90 100644 --- a/src/context.rs +++ b/src/context.rs @@ -78,19 +78,20 @@ fn parse_json_visitor<'a, 'reg>( } None => { if path_context_depth > 0 { - if let Some(ref context_base_path) = block_contexts + let blk = block_contexts .get(path_context_depth as usize) - .map(|blk| blk.base_path()) - { - extend(&mut path_stack, context_base_path); + .or_else(|| block_contexts.front()); + + if let Some(base_value) = blk.and_then(|blk| blk.base_value()) { + merge_json_path(&mut path_stack, relative_path); + ResolvedPath::LocalValue(path_stack, base_value) } else { - // TODO: is this correct behaviour? - if let Some(ref base_path) = block_contexts.front().map(|blk| blk.base_path()) { + if let Some(base_path) = blk.map(|blk| blk.base_path()) { extend(&mut path_stack, base_path); } + merge_json_path(&mut path_stack, relative_path); + ResolvedPath::AbsolutePath(path_stack) } - merge_json_path(&mut path_stack, relative_path); - ResolvedPath::AbsolutePath(path_stack) } else if from_root { merge_json_path(&mut path_stack, relative_path); ResolvedPath::AbsolutePath(path_stack)