Struct syntex_syntax::ext::base::ExtCtxt
[−]
[src]
pub struct ExtCtxt<'a> { pub parse_sess: &'a ParseSess, pub cfg: CrateConfig, pub ecfg: ExpansionConfig<'a>, pub crate_root: Option<&'static str>, pub resolver: &'a mut Resolver, pub resolve_err_count: usize, pub current_expansion: ExpansionData, }
One of these is made during expansion and incrementally updated as we go; when a macro expansion occurs, the resulting nodes have the backtrace() -> expn_info of their expansion context stored into their span.
Fields
parse_sess: &'a ParseSess
cfg: CrateConfig
ecfg: ExpansionConfig<'a>
crate_root: Option<&'static str>
resolver: &'a mut Resolver
resolve_err_count: usize
current_expansion: ExpansionData
Methods
impl<'a> ExtCtxt<'a>
[src]
fn new(parse_sess: &'a ParseSess, cfg: CrateConfig, ecfg: ExpansionConfig<'a>, resolver: &'a mut Resolver) -> ExtCtxt<'a>
fn expander<'b>(&'b mut self) -> MacroExpander<'b, 'a>
Returns a Folder
for deeply expanding all macros in an AST node.
fn monotonic_expander<'b>(&'b mut self) -> MacroExpander<'b, 'a>
Returns a Folder
that deeply expands all macros and assigns all node ids in an AST node.
Once node ids are assigned, the node may not be expanded, removed, or otherwise modified.
fn new_parser_from_tts(&self, tts: &[TokenTree]) -> Parser<'a>
fn codemap(&self) -> &'a CodeMap
fn parse_sess(&self) -> &'a ParseSess
fn cfg(&self) -> &CrateConfig
fn call_site(&self) -> Span
fn backtrace(&self) -> ExpnId
fn expansion_cause(&self) -> Span
Returns span for the macro which originally caused the current expansion to happen.
Stops backtracing at include! boundary.
fn bt_push(&mut self, ei: ExpnInfo)
fn bt_pop(&mut self)
fn struct_span_warn(&self, sp: Span, msg: &str) -> DiagnosticBuilder<'a>
fn struct_span_err(&self, sp: Span, msg: &str) -> DiagnosticBuilder<'a>
fn struct_span_fatal(&self, sp: Span, msg: &str) -> DiagnosticBuilder<'a>
fn span_fatal(&self, sp: Span, msg: &str) -> !
Emit msg
attached to sp
, and stop compilation immediately.
span_err
should be strongly preferred where-ever possible:
this should only be used when
- continuing has a high risk of flow-on errors (e.g. errors in
declaring a macro would cause all uses of that macro to
complain about "undefined macro"), or
- there is literally nothing else that can be done (however,
in most cases one can construct a dummy expression/item to
substitute; we never hit resolve/type-checking so the dummy
value doesn't have to match anything)
fn span_err(&self, sp: Span, msg: &str)
Emit msg
attached to sp
, without immediately stopping
compilation.
Compilation will be stopped in the near future (at the end of the macro expansion phase).
fn span_warn(&self, sp: Span, msg: &str)
fn span_unimpl(&self, sp: Span, msg: &str) -> !
fn span_bug(&self, sp: Span, msg: &str) -> !
fn bug(&self, msg: &str) -> !
fn trace_macros(&self) -> bool
fn set_trace_macros(&mut self, x: bool)
fn ident_of(&self, st: &str) -> Ident
fn std_path(&self, components: &[&str]) -> Vec<Ident>
fn name_of(&self, st: &str) -> Name
Trait Implementations
impl<'a> AstBuilder for ExtCtxt<'a>
[src]
fn path(&self, span: Span, strs: Vec<Ident>) -> Path
fn path_ident(&self, span: Span, id: Ident) -> Path
fn path_global(&self, span: Span, strs: Vec<Ident>) -> Path
fn path_all(&self, sp: Span, global: bool, idents: Vec<Ident>, lifetimes: Vec<Lifetime>, types: Vec<P<Ty>>, bindings: Vec<TypeBinding>) -> Path
fn qpath(&self, self_type: P<Ty>, trait_path: Path, ident: Ident) -> (QSelf, Path)
Constructs a qualified path.
Constructs a path like <self_type as trait_path>::ident
.
fn qpath_all(&self, self_type: P<Ty>, trait_path: Path, ident: Ident, lifetimes: Vec<Lifetime>, types: Vec<P<Ty>>, bindings: Vec<TypeBinding>) -> (QSelf, Path)
Constructs a qualified path.
Constructs a path like <self_type as trait_path>::ident<'a, T, A=Bar>
.
fn ty_mt(&self, ty: P<Ty>, mutbl: Mutability) -> MutTy
fn ty(&self, span: Span, ty: TyKind) -> P<Ty>
fn ty_path(&self, path: Path) -> P<Ty>
fn ty_sum(&self, path: Path, bounds: TyParamBounds) -> P<Ty>
fn ty_ident(&self, span: Span, ident: Ident) -> P<Ty>
fn ty_rptr(&self, span: Span, ty: P<Ty>, lifetime: Option<Lifetime>, mutbl: Mutability) -> P<Ty>
fn ty_ptr(&self, span: Span, ty: P<Ty>, mutbl: Mutability) -> P<Ty>
fn ty_option(&self, ty: P<Ty>) -> P<Ty>
fn ty_infer(&self, span: Span) -> P<Ty>
fn typaram(&self, span: Span, id: Ident, attrs: Vec<Attribute>, bounds: TyParamBounds, default: Option<P<Ty>>) -> TyParam
fn ty_vars(&self, ty_params: &P<[TyParam]>) -> Vec<P<Ty>>
fn ty_vars_global(&self, ty_params: &P<[TyParam]>) -> Vec<P<Ty>>
fn trait_ref(&self, path: Path) -> TraitRef
fn poly_trait_ref(&self, span: Span, path: Path) -> PolyTraitRef
fn typarambound(&self, path: Path) -> TyParamBound
fn lifetime(&self, span: Span, name: Name) -> Lifetime
fn lifetime_def(&self, span: Span, name: Name, attrs: Vec<Attribute>, bounds: Vec<Lifetime>) -> LifetimeDef
fn stmt_expr(&self, expr: P<Expr>) -> Stmt
fn stmt_semi(&self, expr: P<Expr>) -> Stmt
fn stmt_let(&self, sp: Span, mutbl: bool, ident: Ident, ex: P<Expr>) -> Stmt
fn stmt_let_typed(&self, sp: Span, mutbl: bool, ident: Ident, typ: P<Ty>, ex: P<Expr>) -> Stmt
fn stmt_let_type_only(&self, span: Span, ty: P<Ty>) -> Stmt
fn stmt_item(&self, sp: Span, item: P<Item>) -> Stmt
fn block_expr(&self, expr: P<Expr>) -> P<Block>
fn block(&self, span: Span, stmts: Vec<Stmt>) -> P<Block>
fn expr(&self, span: Span, node: ExprKind) -> P<Expr>
fn expr_path(&self, path: Path) -> P<Expr>
fn expr_qpath(&self, span: Span, qself: QSelf, path: Path) -> P<Expr>
Constructs a QPath expression.