1pub mod dummy_fns;
2pub mod ssa_preprocess;
3
4use rustc_ast::{
5 token::{CommentKind, Delimiter, Lit, Token, TokenKind},
6 tokenstream::{DelimSpan, Spacing, TokenStream, TokenTree},
7 *,
8};
9use rustc_span::{DUMMY_SP, Ident, symbol::Symbol};
10use thin_vec::ThinVec;
11
12fn doc_attr() -> Attribute {
15 Attribute {
16 kind: AttrKind::DocComment(CommentKind::Line, Symbol::intern("doc")),
17 id: AttrId::ZERO,
18 style: AttrStyle::Outer,
19 span: DUMMY_SP,
20 }
21}
22
23fn stability_attr() -> Attribute {
25 let mut attr = NormalAttr::from_ident(Ident::from_str("stable"));
26 let tokens: Vec<_> = {
27 let feature = Token::from_ast_ident(Ident::from_str("feature"));
28 let eq = Token::new(TokenKind::Eq, DUMMY_SP);
29 let feature_val = Token::new(
30 TokenKind::Literal(Lit::new(token::LitKind::Str, Symbol::intern("foo"), None)),
31 DUMMY_SP,
32 );
33 let comma = Token::new(TokenKind::Comma, DUMMY_SP);
34 let since = Token::from_ast_ident(Ident::from_str("since"));
35 let since_val = Token::new(
36 TokenKind::Literal(Lit::new(token::LitKind::Str, Symbol::intern("1.93"), None)),
37 DUMMY_SP,
38 );
39 [feature, eq, feature_val, comma, since, eq, since_val]
40 .into_iter()
41 .map(|t| TokenTree::Token(t, Spacing::Alone))
42 .collect()
43 };
44 let delim_args = DelimArgs {
45 dspan: DelimSpan::dummy(),
46 delim: Delimiter::Parenthesis,
47 tokens: TokenStream::new(tokens),
48 };
49 #[cfg(rapx_rustc_ge_196)]
50 {
51 attr.item.args = rustc_ast::AttrItemKind::Unparsed(AttrArgs::Delimited(delim_args));
52 }
53 #[cfg(not(rapx_rustc_ge_196))]
54 {
55 attr.item.args = AttrArgs::Delimited(delim_args);
56 }
57 Attribute {
58 kind: AttrKind::Normal(attr.into()),
59 id: AttrId::ZERO,
60 style: AttrStyle::Outer,
61 span: DUMMY_SP,
62 }
63}
64
65fn set_attrs(build_std: bool) -> ThinVec<Attribute> {
66 let mut v = ThinVec::with_capacity(2);
67 v.push(doc_attr());
68 if build_std {
69 v.push(stability_attr());
70 }
71 v
72}