[−][src]Module rustc_ap_rustc_ast::ptr 
The AST pointer.
Provides P<T>, a frozen owned smart pointer.
Motivations and benefits
- 
Identity: sharing AST nodes is problematic for the various analysis passes (e.g., one may be able to bypass the borrow checker with a shared ExprKind::AddrOfnode taking a mutable borrow).
- 
Immutability: P<T>disallows mutating its innerT, unlikeBox<T>(unless it contains anUnsafeinterior, but that may be denied later). This mainly prevents mistakes, but can also enforces a kind of "purity".
- 
Efficiency: folding can reuse allocation space for P<T>andVec<T>, the latter even when the input and output types differ (as it would be the case with arenas or a GADT AST using type parameters to toggle features).
- 
Maintainability: P<T>provides a fixed interface -Deref,and_thenandmap- which can remain fully functional even if the implementation changes (using a special thread-local heap, for example). Moreover, a switch to, e.g.,P<'a, T>would be easy and mostly automated.
Structs
| P | An owned smart pointer. | 
Functions
| P | Construct a  |