#![feature(prelude_import)]
#![no_std]
//@ check-pass
//@ force-host
//@ no-prefer-dynamic
//@ compile-flags: -Z unpretty=expanded
//@ needs-unwind compiling proc macros with panic=abort causes a warning
//
// This file is not actually used as a proc-macro - instead,
// it's just used to show the output of the `quote!` macro

#![feature(proc_macro_quote)]
#![crate_type = "proc-macro"]
#[prelude_import]
use ::std::prelude::rust_2015::*;
#[macro_use]
extern crate std;

extern crate proc_macro;

fn main() {
    [crate::TokenStream::from(crate::TokenTree::Ident(crate::Ident::new("let",
                                    crate::Span::recover_proc_macro_span(0)))),
                        crate::TokenStream::from(crate::TokenTree::Ident(crate::Ident::new("hello",
                                    crate::Span::recover_proc_macro_span(1)))),
                        crate::TokenStream::from(crate::TokenTree::Punct(crate::Punct::new('=',
                                    crate::Spacing::Alone))),
                        crate::TokenStream::from(crate::TokenTree::Literal({
                                    let mut iter =
                                        "\"world\"".parse::<crate::TokenStream>().unwrap().into_iter();
                                    if let (Some(crate::TokenTree::Literal(mut lit)), None) =
                                                (iter.next(), iter.next()) {
                                            lit.set_span(crate::Span::recover_proc_macro_span(2));
                                            lit
                                        } else {
                                           ::core::panicking::panic("internal error: entered unreachable code")
                                       }
                                })),
                        crate::TokenStream::from(crate::TokenTree::Punct(crate::Punct::new(';',
                                    crate::Spacing::Alone)))].iter().cloned().collect::<crate::TokenStream>()
}
const _: () =
    {
        extern crate proc_macro;
        #[rustc_proc_macro_decls]
        #[used]
        #[allow(deprecated)]
        static _DECLS: &[proc_macro::bridge::client::ProcMacro] = &[];
    };
