pub struct Parser<'a, S: TokenSource> {
pub function_call_count: usize,
pub deref_count: usize,
/* private fields */
}Expand description
パーサー
汎用のトークンソースからC言語をパースする。
S は TokenSource トレイトを実装する任意の型。
Fields§
§function_call_count: usizeパース中に検出した関数呼び出しの数
deref_count: usizeパース中に検出したポインタデリファレンスの数
Implementations§
Source§impl<'a> Parser<'a, Preprocessor>
Preprocessor 専用の後方互換コンストラクタ
impl<'a> Parser<'a, Preprocessor>
Preprocessor 専用の後方互換コンストラクタ
Sourcepub fn new(pp: &'a mut Preprocessor) -> Result<Self>
pub fn new(pp: &'a mut Preprocessor) -> Result<Self>
新しいパーサーを作成(Preprocessor専用)
Sourcepub fn parse_each<F>(&mut self, callback: F) -> Result<()>
pub fn parse_each<F>(&mut self, callback: F) -> Result<()>
ストリーミング形式でパース
各宣言をパースするたびにコールバックを呼び出す。
パースエラーが発生した場合はコールバックを呼ばずにエラーを返す。
コールバックが ControlFlow::Break(()) を返した場合はループを終了。
Sourcepub fn parse_each_with_pp<F>(&mut self, callback: F) -> Result<()>
pub fn parse_each_with_pp<F>(&mut self, callback: F) -> Result<()>
ストリーミング形式でパース(Preprocessor アクセス付き)
parse_each と同様だが、コールバックに Preprocessor への可変参照も渡す。
マクロ呼び出しコールバック(MacroCallWatcher など)にアクセスする場合に使用。
パースエラーが発生した場合はコールバックを呼ばずにエラーを返す。
Source§impl<'a, S: TokenSource> Parser<'a, S>
汎用のトークンソースに対するパーサー実装
impl<'a, S: TokenSource> Parser<'a, S>
汎用のトークンソースに対するパーサー実装
Sourcepub fn from_source(source: &'a mut S) -> Result<Self>
pub fn from_source(source: &'a mut S) -> Result<Self>
トークンソースからパーサーを作成
Sourcepub fn from_source_with_typedefs(
source: &'a mut S,
typedefs: HashSet<InternedStr>,
) -> Result<Self>
pub fn from_source_with_typedefs( source: &'a mut S, typedefs: HashSet<InternedStr>, ) -> Result<Self>
トークンソースからパーサーを作成(既存のtypedef情報を引き継ぐ)
Sourcepub fn set_handle_macro_markers(&mut self, enabled: bool) -> Result<()>
pub fn set_handle_macro_markers(&mut self, enabled: bool) -> Result<()>
マクロマーカー処理を有効にする
Note: 既に current にマーカートークンがある場合はスキップする
Sourcepub fn interner(&self) -> &StringInterner
pub fn interner(&self) -> &StringInterner
StringInterner への参照を取得
Sourcepub fn typedefs(&self) -> &HashSet<InternedStr>
pub fn typedefs(&self) -> &HashSet<InternedStr>
typedef名のセットを取得
Sourcepub fn parse(&mut self) -> Result<TranslationUnit>
pub fn parse(&mut self) -> Result<TranslationUnit>
翻訳単位をパース
Sourcepub fn parse_expr_only(&mut self) -> Result<Expr>
pub fn parse_expr_only(&mut self) -> Result<Expr>
式のみをパース
マクロ本体など、式だけをパースしたい場合に使用
Sourcepub fn parse_stmt_allow_missing_semi(&mut self) -> Result<Stmt>
pub fn parse_stmt_allow_missing_semi(&mut self) -> Result<Stmt>
文をパース(末尾セミコロン省略可能)
マクロ body のパースなど、do-while の末尾セミコロンが 省略されている場合に使用する。
Sourcepub fn parse_type_name(&mut self) -> Result<TypeName>
pub fn parse_type_name(&mut self) -> Result<TypeName>
型名をパース
Sourcepub fn make_node_info(&self, loc: SourceLocation) -> NodeInfo
pub fn make_node_info(&self, loc: SourceLocation) -> NodeInfo
現在のマクロコンテキストから NodeInfo を作成
Sourcepub fn is_in_macro(&self) -> bool
pub fn is_in_macro(&self) -> bool
現在マクロ展開中かどうか
Sourcepub fn macro_depth(&self) -> usize
pub fn macro_depth(&self) -> usize
マクロ展開の深さ
Auto Trait Implementations§
impl<'a, S> Freeze for Parser<'a, S>
impl<'a, S> RefUnwindSafe for Parser<'a, S>where
S: RefUnwindSafe,
impl<'a, S> Send for Parser<'a, S>where
S: Send,
impl<'a, S> Sync for Parser<'a, S>where
S: Sync,
impl<'a, S> Unpin for Parser<'a, S>
impl<'a, S> UnsafeUnpin for Parser<'a, S>
impl<'a, S> !UnwindSafe for Parser<'a, S>
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
Mutably borrows from an owned value. Read more