Advertisement
Guest User

Untitled

a guest
May 21st, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.32 KB | None | 0 0
  1. mod manual_grammar {
  2. #[derive(Clone, Debug, Eq, PartialEq, Hash)]
  3. pub struct UnnamedItem;
  4.  
  5. impl quote::ToTokens for UnnamedItem {
  6. fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
  7. unimplemented!()
  8. }
  9. }
  10.  
  11. impl syn::parse::Parse for UnnamedItem {
  12. fn parse(input: &syn::parse::ParseBuffer) -> syn::parse::Result<Self> {
  13. unimplemented!()
  14. }
  15. }
  16. }
  17. mod test {
  18. extern crate proc_macro2;
  19. extern crate quote;
  20. extern crate syn;
  21.  
  22. use crate::manual_grammar::UnnamedItem;
  23.  
  24. pub mod kw {
  25. ::syn::custom_keyword!(GrammarUse);
  26. }
  27.  
  28. pub mod punct {}
  29.  
  30. #[macro_export]
  31. #[doc(hidden)]
  32. macro_rules! _3d1a7139258f47eba0c8f87a22c3802d {
  33. ( GrammarUse ) => { self::kw::GrammarUse };
  34. ( $( $tt:tt )* ) => { ::syn::Token![ $( $tt )* ] };
  35. }
  36. pub use _3d1a7139258f47eba0c8f87a22c3802d as Token;
  37.  
  38. #[derive(Clone, Debug, Eq, PartialEq, Hash)]
  39. pub struct Grammar {
  40. pub kind: GrammarUse,
  41. pub uses: Vec<(Use)>,
  42. pub items: Vec<NamedItem>,
  43. }
  44.  
  45. impl ::syn::parse::Parse for Grammar {
  46. fn parse(
  47. _a03bdab70b814a91974cb9d6d3ca9c8a: ::syn::parse::ParseStream,
  48. ) -> ::syn::parse::Result<Self> {
  49. let mut kind;
  50. let mut uses;
  51. let mut items;
  52. kind = _a03bdab70b814a91974cb9d6d3ca9c8a.parse()?;
  53. uses = vec![];
  54. while !_a03bdab70b814a91974cb9d6d3ca9c8a.peek(Token![use]) {
  55. let _f02d250628f24094a93558926f43cbd9;
  56. _f02d250628f24094a93558926f43cbd9 = {
  57. assert!(!_a03bdab70b814a91974cb9d6d3ca9c8a.peek(Token![use]));
  58. let _b1d81c7009f446939f0338e04b903199;
  59. _b1d81c7009f446939f0338e04b903199 =
  60. _a03bdab70b814a91974cb9d6d3ca9c8a.parse()?;
  61. (_b1d81c7009f446939f0338e04b903199)
  62. };
  63. uses.push(_f02d250628f24094a93558926f43cbd9);
  64. }
  65. items = vec![];
  66. while !_a03bdab70b814a91974cb9d6d3ca9c8a.is_empty() {
  67. let _7a2eac31c53b41cb81d7d4b628c3f403;
  68. _7a2eac31c53b41cb81d7d4b628c3f403 = _a03bdab70b814a91974cb9d6d3ca9c8a.parse()?;
  69. items.push(_7a2eac31c53b41cb81d7d4b628c3f403);
  70. }
  71. Ok(Grammar { kind, uses, items })
  72. }
  73. }
  74.  
  75. impl ::quote::ToTokens for Grammar {
  76. fn to_tokens(&self, _a03bdab70b814a91974cb9d6d3ca9c8a: &mut ::proc_macro2::TokenStream) {
  77. use ::quote::{ToTokens, TokenStreamExt};
  78. (&self.kind).to_tokens(_a03bdab70b814a91974cb9d6d3ca9c8a);
  79. for _d29cb56f363349a5971cc63a3cbf7eb5 in (&self.uses) {
  80. let (_425fba3e7e204b6f8cb3e6427fd67723) = _d29cb56f363349a5971cc63a3cbf7eb5;
  81. _425fba3e7e204b6f8cb3e6427fd67723.to_tokens(_a03bdab70b814a91974cb9d6d3ca9c8a);
  82. }
  83. for _a7f0a0ae90c346ebbe2177d9acf5d40c in (&self.items) {
  84. _a7f0a0ae90c346ebbe2177d9acf5d40c.to_tokens(_a03bdab70b814a91974cb9d6d3ca9c8a);
  85. }
  86. }
  87. }
  88.  
  89. #[derive(Clone, Debug, Eq, PartialEq, Hash)]
  90. pub struct Use {
  91. pub r#use: Token![use],
  92. pub anchor: Option<Token ! [ :: ]>,
  93. pub tree: syn::UseTree,
  94. }
  95.  
  96. impl ::syn::parse::Parse for Use {
  97. fn parse(
  98. _764332f914fd4ffe9435f44d8c4f2321: ::syn::parse::ParseStream,
  99. ) -> ::syn::parse::Result<Self> {
  100. let mut r#use;
  101. let mut anchor;
  102. let mut tree;
  103. r#use = _764332f914fd4ffe9435f44d8c4f2321.parse()?;
  104. anchor = _764332f914fd4ffe9435f44d8c4f2321.parse()?;
  105. tree = _764332f914fd4ffe9435f44d8c4f2321.parse()?;
  106. Ok(Use {
  107. r#use,
  108. anchor,
  109. tree,
  110. })
  111. }
  112. }
  113.  
  114. impl ::quote::ToTokens for Use {
  115. fn to_tokens(&self, _764332f914fd4ffe9435f44d8c4f2321: &mut ::proc_macro2::TokenStream) {
  116. use ::quote::{ToTokens, TokenStreamExt};
  117. (&self.r#use).to_tokens(_764332f914fd4ffe9435f44d8c4f2321);
  118. (&self.anchor).to_tokens(_764332f914fd4ffe9435f44d8c4f2321);
  119. (&self.tree).to_tokens(_764332f914fd4ffe9435f44d8c4f2321);
  120. }
  121. }
  122.  
  123. #[derive(Clone, Debug, Eq, PartialEq, Hash)]
  124. pub struct NamedItem {
  125. pub name: syn::Ident,
  126. pub colon: Token ! [ : ],
  127. pub item: UnnamedItem,
  128. }
  129.  
  130. impl ::syn::parse::Parse for NamedItem {
  131. fn parse(
  132. _a5cf66811dea48d898f71344f06d65fa: ::syn::parse::ParseStream,
  133. ) -> ::syn::parse::Result<Self> {
  134. let mut name;
  135. let mut colon;
  136. let mut item;
  137. name = _a5cf66811dea48d898f71344f06d65fa.parse()?;
  138. colon = _a5cf66811dea48d898f71344f06d65fa.parse()?;
  139. item = _a5cf66811dea48d898f71344f06d65fa.parse()?;
  140. Ok(NamedItem { name, colon, item })
  141. }
  142. }
  143.  
  144. impl ::quote::ToTokens for NamedItem {
  145. fn to_tokens(&self, _a5cf66811dea48d898f71344f06d65fa: &mut ::proc_macro2::TokenStream) {
  146. use ::quote::{ToTokens, TokenStreamExt};
  147. (&self.name).to_tokens(_a5cf66811dea48d898f71344f06d65fa);
  148. (&self.colon).to_tokens(_a5cf66811dea48d898f71344f06d65fa);
  149. (&self.item).to_tokens(_a5cf66811dea48d898f71344f06d65fa);
  150. }
  151. }
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement