diff options
| author | Huon Wilson <dbau.pp+github@gmail.com> | 2014-03-27 00:40:51 +1100 |
|---|---|---|
| committer | Huon Wilson <dbau.pp+github@gmail.com> | 2014-03-27 01:19:07 +1100 |
| commit | 85ff90c86c98b9fad41f792a8fabb145db320a50 (patch) | |
| tree | 0895f7034e2dc06f8745ffbc587e1f11c61e00ee /src/libsyntax | |
| parent | 2c7f3b850ce11c70d5bef2b2d5155a1f0fdaa421 (diff) | |
| download | rust-85ff90c86c98b9fad41f792a8fabb145db320a50.tar.gz rust-85ff90c86c98b9fad41f792a8fabb145db320a50.zip | |
syntax: add a some docs/clarification to the fields of ExpnInfo.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/codemap.rs | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/libsyntax/codemap.rs b/src/libsyntax/codemap.rs index 325df5fda60..4a9e53c63e7 100644 --- a/src/libsyntax/codemap.rs +++ b/src/libsyntax/codemap.rs @@ -88,6 +88,8 @@ to the original source. pub struct Span { lo: BytePos, hi: BytePos, + /// Information about where the macro came from, if this piece of + /// code was created by a macro expansion. expn_info: Option<@ExpnInfo> } @@ -162,26 +164,47 @@ pub struct LocWithOpt { pub struct FileMapAndLine {fm: Rc<FileMap>, line: uint} pub struct FileMapAndBytePos {fm: Rc<FileMap>, pos: BytePos} +/// The syntax with which a macro was invoked. #[deriving(Clone, Hash, Show)] pub enum MacroFormat { - // e.g. #[deriving(...)] <item> + /// e.g. #[deriving(...)] <item> MacroAttribute, - // e.g. `format!()` + /// e.g. `format!()` MacroBang } #[deriving(Clone, Hash, Show)] pub struct NameAndSpan { + /// The name of the macro that was invoked to create the thing + /// with this Span. name: ~str, - // the format with which the macro was invoked. + /// The format with which the macro was invoked. format: MacroFormat, + /// The span of the macro definition itself. The macro may not + /// have a sensible definition span (e.g. something defined + /// completely inside libsyntax) in which case this is None. span: Option<Span> } /// Extra information for tracking macro expansion of spans #[deriving(Hash, Show)] pub struct ExpnInfo { + /// The location of the actual macro invocation, e.g. `let x = + /// foo!();` + /// + /// This may recursively refer to other macro invocations, e.g. if + /// `foo!()` invoked `bar!()` internally, and there was an + /// expression inside `bar!`; the call_site of the expression in + /// the expansion would point to the `bar!` invocation; that + /// call_site span would have its own ExpnInfo, with the call_site + /// pointing to the `foo!` invocation. call_site: Span, + /// Information about the macro and its definition. + /// + /// The `callee` of the inner expression in the `call_site` + /// example would point to the `macro_rules! bar { ... }` and that + /// of the `bar!()` invocation would point to the `macro_rules! + /// foo { ... }`. callee: NameAndSpan } |
