_ => cx.span_fatal(sp, "malformed macro lhs")
};
// `None` is because we're not interpolating
- let arg_rdr = new_tt_reader(&cx.parse_sess().span_diagnostic,
- None,
- arg.iter()
- .map(|x| (*x).clone())
- .collect());
+ let mut arg_rdr = new_tt_reader(&cx.parse_sess().span_diagnostic,
+ None,
+ arg.iter()
+ .map(|x| (*x).clone())
+ .collect());
+ arg_rdr.desugar_doc_comments = true;
match parse(cx.parse_sess(), cx.cfg(), arg_rdr, lhs_tt) {
Success(named_matches) => {
let rhs = match *rhses[i] {
/* cached: */
pub cur_tok: Token,
pub cur_span: Span,
+ /// Transform doc comments. Only useful in macro invocations
+ pub desugar_doc_comments: bool,
}
/// This can do Macro-By-Example transcription. On the other hand, if
},
repeat_idx: Vec::new(),
repeat_len: Vec::new(),
+ desugar_doc_comments: false,
/* dummy values, never read: */
cur_tok: token::Eof,
cur_span: DUMMY_SP,
}
}
// TtDelimited or any token that can be unzipped
- seq @ TtDelimited(..) | seq @ TtToken(_, DocComment(..))
- | seq @ TtToken(_, MatchNt(..)) => {
+ seq @ TtDelimited(..) | seq @ TtToken(_, MatchNt(..)) => {
// do not advance the idx yet
r.stack.push(TtFrame {
forest: seq.expand_into_tts(),
});
// if this could be 0-length, we'd need to potentially recur here
}
+ TtToken(sp, DocComment(name)) if r.desugar_doc_comments => {
+ r.stack.push(TtFrame {
+ forest: TtToken(sp, DocComment(name)).expand_into_tts(),
+ idx: 0,
+ dotdotdoted: false,
+ sep: None
+ });
+ }
TtToken(sp, tok) => {
r.cur_span = sp;
r.cur_tok = tok;