Define this trait for defining methods for Rc Still, mainly used to handle function calls
| 482 | // Define this trait for defining methods for Rc<Path> |
| 483 | // Still, mainly used to handle function calls |
| 484 | pub trait PathRefinement<DomainType>: Sized |
| 485 | where |
| 486 | DomainType: NumericalDomainType, |
| 487 | IntervalAbstractDomain<DomainType>: GetDomainType, |
| 488 | { |
| 489 | /// Refine parameters inside embedded index values with the given arguments. |
| 490 | fn refine_parameters( |
| 491 | &self, |
| 492 | arguments: &[(Rc<Path>, Rc<SymbolicValue>)], |
| 493 | // fresh: usize, |
| 494 | ) -> Rc<Path>; |
| 495 | |
| 496 | /// Refine paths that reference other paths. |
| 497 | /// I.e. when a reference is passed to a function that then returns |
| 498 | /// or leaks it back to the caller in the qualifier of a path then |
| 499 | /// we want to dereference the qualifier in order to normalize the path |
| 500 | /// and not have more than one path for the same location. |
| 501 | fn refine_paths(&self, environment: &AbstractDomain<DomainType>) -> Rc<Path>; |
| 502 | |
| 503 | /// Returns a copy path with the root replaced by new_root. |
| 504 | fn replace_root(&self, old_root: &Rc<Path>, new_root: Rc<Path>) -> Rc<Path>; |
| 505 | } |
| 506 | |
| 507 | impl<DomainType> PathRefinement<DomainType> for Rc<Path> |
| 508 | where |
nothing calls this directly
no outgoing calls
no test coverage detected