|
|
@@ -69,7 +69,7 @@ public:
|
|
|
}
|
|
|
|
|
|
detail::Reference canonicalize(detail::Reference const & ref, detail::Reference const & parent,
|
|
|
- detail::inout<bool> dynamic_reference) const {
|
|
|
+ detail::inout<bool> dynamic_reference) {
|
|
|
URI const uri = [this, &ref, &parent]() {
|
|
|
if (ref.uri().empty() && parent.uri().empty()) {
|
|
|
return references_.actual_parent_uri(parent);
|
|
|
@@ -93,7 +93,15 @@ public:
|
|
|
return base.parent() / uri;
|
|
|
}();
|
|
|
|
|
|
+ // TODO(samjaffe): Clean up this block too...
|
|
|
URI const dyn_uri = ref.uri().empty() ? ref.uri() : uri;
|
|
|
+
|
|
|
+ detail::OnBlockExit scope;
|
|
|
+ if (not ref.uri().empty() && dynamic_reference &&
|
|
|
+ active_dynamic_anchors_.contains(ref.anchor())) {
|
|
|
+ scope = dynamic_scope(detail::Reference(dyn_uri));
|
|
|
+ }
|
|
|
+
|
|
|
if (std::optional dynamic = active_dynamic_anchors_.lookup(dyn_uri, ref.anchor())) {
|
|
|
if (dynamic_reference) {
|
|
|
return *dynamic;
|