mirror of https://github.com/rust-lang/rust.git
Make `ExtCtxt::expr_lit` non-`pub`.
By using `expr_str` more and adding `expr_{char,byte_str}`.
This commit is contained in:
parent
7d1e5a485c
commit
d7a041f607
|
@ -1,6 +1,5 @@
|
||||||
use rustc_ast as ast;
|
use rustc_ast as ast;
|
||||||
use rustc_ast::{ptr::P, tokenstream::TokenStream};
|
use rustc_ast::{ptr::P, tokenstream::TokenStream};
|
||||||
use rustc_data_structures::sync::Lrc;
|
|
||||||
use rustc_errors::Applicability;
|
use rustc_errors::Applicability;
|
||||||
use rustc_expand::base::{self, DummyResult};
|
use rustc_expand::base::{self, DummyResult};
|
||||||
|
|
||||||
|
@ -185,5 +184,5 @@ pub fn expand_concat_bytes(
|
||||||
return base::MacEager::expr(DummyResult::raw_expr(sp, true));
|
return base::MacEager::expr(DummyResult::raw_expr(sp, true));
|
||||||
}
|
}
|
||||||
let sp = cx.with_def_site_ctxt(sp);
|
let sp = cx.with_def_site_ctxt(sp);
|
||||||
base::MacEager::expr(cx.expr_lit(sp, ast::LitKind::ByteStr(Lrc::from(accumulator))))
|
base::MacEager::expr(cx.expr_byte_str(sp, accumulator))
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ fn show_substructure(cx: &mut ExtCtxt<'_>, span: Span, substr: &Substructure<'_>
|
||||||
|
|
||||||
// We want to make sure we have the ctxt set so that we can use unstable methods
|
// We want to make sure we have the ctxt set so that we can use unstable methods
|
||||||
let span = cx.with_def_site_ctxt(span);
|
let span = cx.with_def_site_ctxt(span);
|
||||||
let name = cx.expr_lit(span, ast::LitKind::Str(ident.name, ast::StrStyle::Cooked));
|
let name = cx.expr_str(span, ident.name);
|
||||||
let fmt = substr.nonselflike_args[0].clone();
|
let fmt = substr.nonselflike_args[0].clone();
|
||||||
|
|
||||||
// Struct and tuples are similar enough that we use the same code for both,
|
// Struct and tuples are similar enough that we use the same code for both,
|
||||||
|
@ -89,10 +89,7 @@ fn show_substructure(cx: &mut ExtCtxt<'_>, span: Span, substr: &Substructure<'_>
|
||||||
for i in 0..fields.len() {
|
for i in 0..fields.len() {
|
||||||
let field = &fields[i];
|
let field = &fields[i];
|
||||||
if is_struct {
|
if is_struct {
|
||||||
let name = cx.expr_lit(
|
let name = cx.expr_str(field.span, field.name.unwrap().name);
|
||||||
field.span,
|
|
||||||
ast::LitKind::Str(field.name.unwrap().name, ast::StrStyle::Cooked),
|
|
||||||
);
|
|
||||||
args.push(name);
|
args.push(name);
|
||||||
}
|
}
|
||||||
// Use an extra indirection to make sure this works for unsized types.
|
// Use an extra indirection to make sure this works for unsized types.
|
||||||
|
@ -108,10 +105,7 @@ fn show_substructure(cx: &mut ExtCtxt<'_>, span: Span, substr: &Substructure<'_>
|
||||||
|
|
||||||
for field in fields {
|
for field in fields {
|
||||||
if is_struct {
|
if is_struct {
|
||||||
name_exprs.push(cx.expr_lit(
|
name_exprs.push(cx.expr_str(field.span, field.name.unwrap().name));
|
||||||
field.span,
|
|
||||||
ast::LitKind::Str(field.name.unwrap().name, ast::StrStyle::Cooked),
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use an extra indirection to make sure this works for unsized types.
|
// Use an extra indirection to make sure this works for unsized types.
|
||||||
|
|
|
@ -923,7 +923,7 @@ impl<'a, 'b> Context<'a, 'b> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build the format
|
// Build the format
|
||||||
let fill = self.ecx.expr_lit(sp, ast::LitKind::Char(fill));
|
let fill = self.ecx.expr_char(sp, fill);
|
||||||
let align = |name| {
|
let align = |name| {
|
||||||
let mut p = Context::rtpath(self.ecx, sym::Alignment);
|
let mut p = Context::rtpath(self.ecx, sym::Alignment);
|
||||||
p.push(Ident::new(name, sp));
|
p.push(Ident::new(name, sp));
|
||||||
|
|
|
@ -216,7 +216,7 @@ pub fn expand_include_bytes(
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
match cx.source_map().load_binary_file(&file) {
|
match cx.source_map().load_binary_file(&file) {
|
||||||
Ok(bytes) => base::MacEager::expr(cx.expr_lit(sp, ast::LitKind::ByteStr(bytes.into()))),
|
Ok(bytes) => base::MacEager::expr(cx.expr_byte_str(sp, bytes)),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
cx.span_err(sp, &format!("couldn't read {}: {}", file.display(), e));
|
cx.span_err(sp, &format!("couldn't read {}: {}", file.display(), e));
|
||||||
DummyResult::any(sp)
|
DummyResult::any(sp)
|
||||||
|
|
|
@ -3,6 +3,7 @@ use crate::base::ExtCtxt;
|
||||||
use rustc_ast::attr;
|
use rustc_ast::attr;
|
||||||
use rustc_ast::ptr::P;
|
use rustc_ast::ptr::P;
|
||||||
use rustc_ast::{self as ast, AttrVec, BlockCheckMode, Expr, LocalKind, PatKind, UnOp};
|
use rustc_ast::{self as ast, AttrVec, BlockCheckMode, Expr, LocalKind, PatKind, UnOp};
|
||||||
|
use rustc_data_structures::sync::Lrc;
|
||||||
use rustc_span::source_map::Spanned;
|
use rustc_span::source_map::Spanned;
|
||||||
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
||||||
|
|
||||||
|
@ -330,23 +331,38 @@ impl<'a> ExtCtxt<'a> {
|
||||||
self.expr_struct(span, self.path_ident(span, id), fields)
|
self.expr_struct(span, self.path_ident(span, id), fields)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn expr_lit(&self, span: Span, lit_kind: ast::LitKind) -> P<ast::Expr> {
|
fn expr_lit(&self, span: Span, lit_kind: ast::LitKind) -> P<ast::Expr> {
|
||||||
let lit = ast::Lit::from_lit_kind(lit_kind, span);
|
let lit = ast::Lit::from_lit_kind(lit_kind, span);
|
||||||
self.expr(span, ast::ExprKind::Lit(lit))
|
self.expr(span, ast::ExprKind::Lit(lit))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn expr_usize(&self, span: Span, i: usize) -> P<ast::Expr> {
|
pub fn expr_usize(&self, span: Span, i: usize) -> P<ast::Expr> {
|
||||||
self.expr_lit(
|
self.expr_lit(
|
||||||
span,
|
span,
|
||||||
ast::LitKind::Int(i as u128, ast::LitIntType::Unsigned(ast::UintTy::Usize)),
|
ast::LitKind::Int(i as u128, ast::LitIntType::Unsigned(ast::UintTy::Usize)),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn expr_u32(&self, sp: Span, u: u32) -> P<ast::Expr> {
|
pub fn expr_u32(&self, sp: Span, u: u32) -> P<ast::Expr> {
|
||||||
self.expr_lit(sp, ast::LitKind::Int(u as u128, ast::LitIntType::Unsigned(ast::UintTy::U32)))
|
self.expr_lit(sp, ast::LitKind::Int(u as u128, ast::LitIntType::Unsigned(ast::UintTy::U32)))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn expr_bool(&self, sp: Span, value: bool) -> P<ast::Expr> {
|
pub fn expr_bool(&self, sp: Span, value: bool) -> P<ast::Expr> {
|
||||||
self.expr_lit(sp, ast::LitKind::Bool(value))
|
self.expr_lit(sp, ast::LitKind::Bool(value))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn expr_str(&self, sp: Span, s: Symbol) -> P<ast::Expr> {
|
||||||
|
self.expr_lit(sp, ast::LitKind::Str(s, ast::StrStyle::Cooked))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn expr_char(&self, sp: Span, ch: char) -> P<ast::Expr> {
|
||||||
|
self.expr_lit(sp, ast::LitKind::Char(ch))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn expr_byte_str(&self, sp: Span, bytes: Vec<u8>) -> P<ast::Expr> {
|
||||||
|
self.expr_lit(sp, ast::LitKind::ByteStr(Lrc::from(bytes)))
|
||||||
|
}
|
||||||
|
|
||||||
/// `[expr1, expr2, ...]`
|
/// `[expr1, expr2, ...]`
|
||||||
pub fn expr_array(&self, sp: Span, exprs: Vec<P<ast::Expr>>) -> P<ast::Expr> {
|
pub fn expr_array(&self, sp: Span, exprs: Vec<P<ast::Expr>>) -> P<ast::Expr> {
|
||||||
self.expr(sp, ast::ExprKind::Array(exprs))
|
self.expr(sp, ast::ExprKind::Array(exprs))
|
||||||
|
@ -357,10 +373,6 @@ impl<'a> ExtCtxt<'a> {
|
||||||
self.expr_addr_of(sp, self.expr_array(sp, exprs))
|
self.expr_addr_of(sp, self.expr_array(sp, exprs))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn expr_str(&self, sp: Span, s: Symbol) -> P<ast::Expr> {
|
|
||||||
self.expr_lit(sp, ast::LitKind::Str(s, ast::StrStyle::Cooked))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn expr_cast(&self, sp: Span, expr: P<ast::Expr>, ty: P<ast::Ty>) -> P<ast::Expr> {
|
pub fn expr_cast(&self, sp: Span, expr: P<ast::Expr>, ty: P<ast::Ty>) -> P<ast::Expr> {
|
||||||
self.expr(sp, ast::ExprKind::Cast(expr, ty))
|
self.expr(sp, ast::ExprKind::Cast(expr, ty))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue