pub struct CppVisitor<'a> {
pub file: &'a ProjectFile,
pub source: &'a str,
pub parsed: &'a mut ParsedFile,
pub c_tag_semantics: bool,
pub recovered_class_sibling_scopes: HashMap<usize, ScopeInfo>,
pub consumed_fragment_regions: Vec<(usize, usize)>,
}Fields§
§file: &'a ProjectFile§source: &'a str§parsed: &'a mut ParsedFile§c_tag_semantics: boolWhether this translation unit is compiled as C – the CppC dialect of
LanguageDialect, i.e. an exact lowercase .c extension.
C has no nested tag scope: a struct/union/enum tag declared inside
another aggregate’s member list has the scope of the outer declaration
itself (C17 6.2.1, 6.7.2.3). struct outer { struct inner { int v; } i; };
therefore declares a file-scope inner that a later file-scope
struct inner *p; legitimately references, where C++ would make the
same shape a nested class outer::inner. Headers carry no compilation
language of their own and keep the conservative C++ interpretation.
recovered_class_sibling_scopes: HashMap<usize, ScopeInfo>§consumed_fragment_regions: Vec<(usize, usize)>Byte regions whose contents were re-owned by a fragmented export-class
recovery (#938): the scattered members between the fragmented
declaration and its displaced closing brace are indexed as members of
the recovered class by the region reparse, so the ordinary sibling walk
must not ALSO index them as top-level declarations (that double-indexing
made a scattered nested class ambiguous between Inner and
Widget$Inner). Regions are rare (one per fragmented recovery), so a
linear scan at visit time is fine.
Implementations§
Auto Trait Implementations§
impl<'a> !UnwindSafe for CppVisitor<'a>
impl<'a> Freeze for CppVisitor<'a>
impl<'a> RefUnwindSafe for CppVisitor<'a>
impl<'a> Send for CppVisitor<'a>
impl<'a> Sync for CppVisitor<'a>
impl<'a> Unpin for CppVisitor<'a>
impl<'a> UnsafeUnpin for CppVisitor<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more