Fix context scope bug
This commit is contained in:
parent
3c2a70803e
commit
0edb42836d
@ -268,6 +268,32 @@ impl Context {
|
|||||||
&self,
|
&self,
|
||||||
identifier: &Identifier,
|
identifier: &Identifier,
|
||||||
position: usize,
|
position: usize,
|
||||||
|
) -> Result<bool, ContextError> {
|
||||||
|
let found = self.update_position_if_found(identifier, position)?;
|
||||||
|
|
||||||
|
if found {
|
||||||
|
Ok(true)
|
||||||
|
} else if let Some(parent) = &self.parent {
|
||||||
|
let found_in_ancestor = parent.update_last_position(identifier, position)?;
|
||||||
|
|
||||||
|
if !found_in_ancestor {
|
||||||
|
let mut associations = self.associations.write()?;
|
||||||
|
|
||||||
|
log::trace!("Updating {identifier}'s last position to {position:?}");
|
||||||
|
|
||||||
|
associations.insert(identifier.clone(), (ContextData::Reserved, position));
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(false)
|
||||||
|
} else {
|
||||||
|
Ok(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update_position_if_found(
|
||||||
|
&self,
|
||||||
|
identifier: &Identifier,
|
||||||
|
position: usize,
|
||||||
) -> Result<bool, ContextError> {
|
) -> Result<bool, ContextError> {
|
||||||
let mut associations = self.associations.write()?;
|
let mut associations = self.associations.write()?;
|
||||||
|
|
||||||
@ -278,23 +304,9 @@ impl Context {
|
|||||||
|
|
||||||
Ok(true)
|
Ok(true)
|
||||||
} else {
|
} else {
|
||||||
let ancestor_contains = if let Some(parent) = &self.parent {
|
|
||||||
parent.contains(identifier)?
|
|
||||||
} else {
|
|
||||||
false
|
|
||||||
};
|
|
||||||
|
|
||||||
if ancestor_contains {
|
|
||||||
Ok(true)
|
|
||||||
} else {
|
|
||||||
log::trace!("Reserving {identifier} at {position:?}");
|
|
||||||
|
|
||||||
associations.insert(identifier.clone(), (ContextData::Reserved, position));
|
|
||||||
|
|
||||||
Ok(false)
|
Ok(false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/// Recovers the context from a poisoned state by recovering data from an error.
|
/// Recovers the context from a poisoned state by recovering data from an error.
|
||||||
///
|
///
|
||||||
|
Loading…
Reference in New Issue
Block a user