Remove crate proc_macro_tokens
.
This commit is contained in:
parent
2dc60b1180
commit
31417efcd3
@ -60,7 +60,7 @@ RUSTC_CRATES := rustc rustc_typeck rustc_mir rustc_borrowck rustc_resolve rustc_
|
||||
rustc_data_structures rustc_platform_intrinsics rustc_errors \
|
||||
rustc_plugin rustc_metadata rustc_passes rustc_save_analysis \
|
||||
rustc_const_eval rustc_const_math rustc_incremental proc_macro
|
||||
HOST_CRATES := syntax syntax_ext proc_macro_tokens proc_macro_plugin syntax_pos $(RUSTC_CRATES) \
|
||||
HOST_CRATES := syntax syntax_ext proc_macro_plugin syntax_pos $(RUSTC_CRATES) \
|
||||
rustdoc fmt_macros flate arena graphviz log serialize
|
||||
TOOLS := compiletest rustdoc rustc rustbook error_index_generator
|
||||
|
||||
@ -102,7 +102,6 @@ DEPS_syntax := std term serialize log arena libc rustc_bitflags std_unicode rust
|
||||
DEPS_syntax_ext := syntax syntax_pos rustc_errors fmt_macros proc_macro
|
||||
DEPS_proc_macro := syntax syntax_pos rustc_plugin log
|
||||
DEPS_syntax_pos := serialize
|
||||
DEPS_proc_macro_tokens := syntax syntax_pos log
|
||||
DEPS_proc_macro_plugin := syntax syntax_pos rustc_plugin
|
||||
|
||||
DEPS_rustc_const_math := std syntax log serialize rustc_i128
|
||||
|
7
src/Cargo.lock
generated
7
src/Cargo.lock
generated
@ -213,13 +213,6 @@ dependencies = [
|
||||
"syntax_pos 0.0.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc_macro_tokens"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"syntax 0.0.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.0.0"
|
||||
|
@ -1,12 +0,0 @@
|
||||
[package]
|
||||
authors = ["The Rust Project Developers"]
|
||||
name = "proc_macro_tokens"
|
||||
version = "0.0.0"
|
||||
build = false
|
||||
|
||||
[lib]
|
||||
path = "lib.rs"
|
||||
crate-type = ["dylib"]
|
||||
|
||||
[dependencies]
|
||||
syntax = { path = "../libsyntax" }
|
@ -1,85 +0,0 @@
|
||||
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use syntax::ast::Ident;
|
||||
use syntax::codemap::DUMMY_SP;
|
||||
use syntax::parse::token::{self, Token};
|
||||
use syntax::symbol::keywords;
|
||||
use syntax::tokenstream::{self, TokenTree, TokenStream};
|
||||
use std::rc::Rc;
|
||||
|
||||
/// A wrapper around `TokenStream::concat` to avoid extra namespace specification and
|
||||
/// provide TokenStream concatenation as a generic operator.
|
||||
pub fn concat(ts1: TokenStream, ts2: TokenStream) -> TokenStream {
|
||||
TokenStream::concat([ts1, ts2].iter().cloned())
|
||||
}
|
||||
|
||||
/// Checks if two identifiers have the same name, disregarding context. This allows us to
|
||||
/// fake 'reserved' keywords.
|
||||
// FIXME We really want `free-identifier-=?` (a la Dybvig 1993). von Tander 2007 is
|
||||
// probably the easiest way to do that.
|
||||
pub fn ident_eq(tident: &TokenTree, id: Ident) -> bool {
|
||||
let tid = match *tident {
|
||||
TokenTree::Token(_, Token::Ident(ref id)) => id,
|
||||
_ => {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
tid.name == id.name
|
||||
}
|
||||
|
||||
// ____________________________________________________________________________________________
|
||||
// Conversion operators
|
||||
|
||||
/// Convert a `&str` into a Token.
|
||||
pub fn str_to_token_ident(s: &str) -> Token {
|
||||
Token::Ident(Ident::from_str(s))
|
||||
}
|
||||
|
||||
/// Converts a keyword (from `syntax::parse::token::keywords`) into a Token that
|
||||
/// corresponds to it.
|
||||
pub fn keyword_to_token_ident(kw: keywords::Keyword) -> Token {
|
||||
Token::Ident(Ident::from_str(&kw.name().as_str()[..]))
|
||||
}
|
||||
|
||||
// ____________________________________________________________________________________________
|
||||
// Build Procedures
|
||||
|
||||
/// Generically takes a `ts` and delimiter and returns `ts` delimited by the specified
|
||||
/// delimiter.
|
||||
pub fn build_delimited(ts: TokenStream, delim: token::DelimToken) -> TokenStream {
|
||||
TokenTree::Delimited(DUMMY_SP, Rc::new(tokenstream::Delimited {
|
||||
delim: delim,
|
||||
open_span: DUMMY_SP,
|
||||
tts: ts.trees().cloned().collect(),
|
||||
close_span: DUMMY_SP,
|
||||
})).into()
|
||||
}
|
||||
|
||||
/// Takes `ts` and returns `[ts]`.
|
||||
pub fn build_bracket_delimited(ts: TokenStream) -> TokenStream {
|
||||
build_delimited(ts, token::DelimToken::Bracket)
|
||||
}
|
||||
|
||||
/// Takes `ts` and returns `{ts}`.
|
||||
pub fn build_brace_delimited(ts: TokenStream) -> TokenStream {
|
||||
build_delimited(ts, token::DelimToken::Brace)
|
||||
}
|
||||
|
||||
/// Takes `ts` and returns `(ts)`.
|
||||
pub fn build_paren_delimited(ts: TokenStream) -> TokenStream {
|
||||
build_delimited(ts, token::DelimToken::Paren)
|
||||
}
|
||||
|
||||
/// Constructs `()`.
|
||||
pub fn build_empty_args() -> TokenStream {
|
||||
build_paren_delimited(TokenStream::empty())
|
||||
}
|
@ -1,64 +0,0 @@
|
||||
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
//! # Proc_Macro
|
||||
//!
|
||||
//! A library for procedural macro writers.
|
||||
//!
|
||||
//! ## Usage
|
||||
//! This crate provides the prelude (at libproc_macro_tokens::prelude), which
|
||||
//! provides a number of operations:
|
||||
//! - `concat`, for concatenating two TokenStreams.
|
||||
//! - `ident_eq`, for checking if two identifiers are equal regardless of syntax context.
|
||||
//! - `str_to_token_ident`, for converting an `&str` into a Token.
|
||||
//! - `keyword_to_token_delim`, for converting a `parse::token::keywords::Keyword` into a
|
||||
//! Token.
|
||||
//! - `build_delimited`, for creating a new TokenStream from an existing one and a delimiter
|
||||
//! by wrapping the TokenStream in the delimiter.
|
||||
//! - `build_bracket_delimited`, `build_brace_delimited`, and `build_paren_delimited`, for
|
||||
//! easing the above.
|
||||
//! - `build_empty_args`, which returns a TokenStream containing `()`.
|
||||
//! - `lex`, which takes an `&str` and returns the TokenStream it represents.
|
||||
//!
|
||||
//! ## TokenStreams
|
||||
//!
|
||||
//! TokenStreams serve as the basis of the macro system. They are, in essence, vectors of
|
||||
//! TokenTrees, where indexing treats delimited values as a single term. That is, the term
|
||||
//! `even(a+c) && even(b)` will be indexibly encoded as `even | (a+c) | even | (b)` where,
|
||||
//! in reality, `(a+c)` is actually a decorated pointer to `a | + | c`.
|
||||
//!
|
||||
//! If a user has a TokenStream that is a single, delimited value, they can use
|
||||
//! `maybe_delimited` to destruct it and receive the internal vector as a new TokenStream
|
||||
//! as:
|
||||
//! ```
|
||||
//! `(a+c)`.maybe_delimited() ~> Some(a | + | c)`
|
||||
//! ```
|
||||
//!
|
||||
//! Check the TokenStream documentation for more information; the structure also provides
|
||||
//! cheap concatenation and slicing.
|
||||
//!
|
||||
|
||||
#![crate_name = "proc_macro_tokens"]
|
||||
#![unstable(feature = "rustc_private", issue = "27812")]
|
||||
#![crate_type = "dylib"]
|
||||
#![crate_type = "rlib"]
|
||||
#![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
|
||||
html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
|
||||
html_root_url = "https://doc.rust-lang.org/nightly/")]
|
||||
#![deny(warnings)]
|
||||
|
||||
#![feature(staged_api)]
|
||||
#![feature(rustc_private)]
|
||||
|
||||
extern crate syntax;
|
||||
|
||||
pub mod build;
|
||||
pub mod parse;
|
||||
pub mod prelude;
|
@ -1,23 +0,0 @@
|
||||
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
//! Parsing utilities for writing procedural macros.
|
||||
|
||||
use syntax::parse::{ParseSess, filemap_to_tts};
|
||||
use syntax::tokenstream::TokenStream;
|
||||
|
||||
/// Map a string to tts, using a made-up filename. For example, `lex("15")` will return a
|
||||
/// TokenStream containing the literal 15.
|
||||
pub fn lex(source_str: &str) -> TokenStream {
|
||||
let sess = ParseSess::new();
|
||||
let filemap =
|
||||
sess.codemap().new_filemap("<procmacro_lex>".to_string(), None, source_str.to_owned());
|
||||
filemap_to_tts(&sess, filemap).into_iter().collect()
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
pub use build::*;
|
||||
pub use parse::*;
|
Loading…
Reference in New Issue
Block a user