Auto merge of #138830 - matthiaskrgr:rollup-gaxgfwl, r=matthiaskrgr
Rollup of 7 pull requests Successful merges: - #138410 (Couple mir building cleanups) - #138490 (Forward `stream_position` in `Arc<File>` as well) - #138535 (Cleanup `LangString::parse`) - #138536 (stable_mir: Add `MutMirVisitor`) - #138673 (Fix build failure on Trusty) - #138750 (Make `crate_hash` not iterate over `hir_crate` owners anymore) - #138763 (jsondocck: Replace `jsonpath_lib` with `jsonpath-rust`) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
d93f678fa5
165 changed files with 1878 additions and 1645 deletions
66
Cargo.lock
66
Cargo.lock
|
@ -1925,7 +1925,7 @@ version = "0.1.0"
|
|||
dependencies = [
|
||||
"fs-err",
|
||||
"getopts",
|
||||
"jsonpath_lib",
|
||||
"jsonpath-rust",
|
||||
"regex",
|
||||
"serde_json",
|
||||
"shlex",
|
||||
|
@ -1945,14 +1945,16 @@ dependencies = [
|
|||
]
|
||||
|
||||
[[package]]
|
||||
name = "jsonpath_lib"
|
||||
version = "0.3.0"
|
||||
name = "jsonpath-rust"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eaa63191d68230cccb81c5aa23abd53ed64d83337cacbb25a7b8c7979523774f"
|
||||
checksum = "9b0231bb404a6cd6c8f0ab41b907049063a089fc02aa7636cc5cd9a4d87364c9"
|
||||
dependencies = [
|
||||
"log",
|
||||
"serde",
|
||||
"pest",
|
||||
"pest_derive",
|
||||
"regex",
|
||||
"serde_json",
|
||||
"thiserror 2.0.11",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -2645,6 +2647,51 @@ dependencies = [
|
|||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pest"
|
||||
version = "2.7.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
"thiserror 2.0.11",
|
||||
"ucd-trie",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pest_derive"
|
||||
version = "2.7.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e"
|
||||
dependencies = [
|
||||
"pest",
|
||||
"pest_generator",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pest_generator"
|
||||
version = "2.7.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b"
|
||||
dependencies = [
|
||||
"pest",
|
||||
"pest_meta",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.96",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pest_meta"
|
||||
version = "2.7.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea"
|
||||
dependencies = [
|
||||
"once_cell",
|
||||
"pest",
|
||||
"sha2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "phf"
|
||||
version = "0.11.3"
|
||||
|
@ -4780,7 +4827,6 @@ version = "1.0.135"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9"
|
||||
dependencies = [
|
||||
"indexmap",
|
||||
"itoa",
|
||||
"memchr",
|
||||
"ryu",
|
||||
|
@ -5486,6 +5532,12 @@ dependencies = [
|
|||
"regex-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ucd-trie"
|
||||
version = "0.1.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971"
|
||||
|
||||
[[package]]
|
||||
name = "ui_test"
|
||||
version = "0.28.0"
|
||||
|
|
|
@ -1176,15 +1176,14 @@ pub(super) fn crate_hash(tcx: TyCtxt<'_>, _: LocalCrate) -> Svh {
|
|||
debugger_visualizers.hash_stable(&mut hcx, &mut stable_hasher);
|
||||
if tcx.sess.opts.incremental.is_some() {
|
||||
let definitions = tcx.untracked().definitions.freeze();
|
||||
let mut owner_spans: Vec<_> = krate
|
||||
.owners
|
||||
.iter_enumerated()
|
||||
.filter_map(|(def_id, info)| {
|
||||
let _ = info.as_owner()?;
|
||||
let mut owner_spans: Vec<_> = tcx
|
||||
.hir_crate_items(())
|
||||
.definitions()
|
||||
.map(|def_id| {
|
||||
let def_path_hash = definitions.def_path_hash(def_id);
|
||||
let span = tcx.source_span(def_id);
|
||||
debug_assert_eq!(span.parent(), None);
|
||||
Some((def_path_hash, span))
|
||||
(def_path_hash, span)
|
||||
})
|
||||
.collect();
|
||||
owner_spans.sort_unstable_by_key(|bn| bn.0);
|
||||
|
|
|
@ -105,23 +105,19 @@ fn lit_to_mir_constant<'tcx>(tcx: TyCtxt<'tcx>, lit_input: LitToConstInput<'tcx>
|
|||
return Const::Ty(Ty::new_error(tcx, guar), ty::Const::new_error(tcx, guar));
|
||||
}
|
||||
|
||||
let trunc = |n, width: ty::UintTy| {
|
||||
let width = width
|
||||
.normalize(tcx.data_layout.pointer_size.bits().try_into().unwrap())
|
||||
.bit_width()
|
||||
.unwrap();
|
||||
let width = Size::from_bits(width);
|
||||
let lit_ty = match *ty.kind() {
|
||||
ty::Pat(base, _) => base,
|
||||
_ => ty,
|
||||
};
|
||||
|
||||
let trunc = |n| {
|
||||
let width = lit_ty.primitive_size(tcx);
|
||||
trace!("trunc {} with size {} and shift {}", n, width.bits(), 128 - width.bits());
|
||||
let result = width.truncate(n);
|
||||
trace!("trunc result: {}", result);
|
||||
ConstValue::Scalar(Scalar::from_uint(result, width))
|
||||
};
|
||||
|
||||
let lit_ty = match *ty.kind() {
|
||||
ty::Pat(base, _) => base,
|
||||
_ => ty,
|
||||
};
|
||||
|
||||
let value = match (lit, lit_ty.kind()) {
|
||||
(ast::LitKind::Str(s, _), ty::Ref(_, inner_ty, _)) if inner_ty.is_str() => {
|
||||
let s = s.as_str();
|
||||
|
@ -149,11 +145,10 @@ fn lit_to_mir_constant<'tcx>(tcx: TyCtxt<'tcx>, lit_input: LitToConstInput<'tcx>
|
|||
(ast::LitKind::Byte(n), ty::Uint(ty::UintTy::U8)) => {
|
||||
ConstValue::Scalar(Scalar::from_uint(*n, Size::from_bytes(1)))
|
||||
}
|
||||
(ast::LitKind::Int(n, _), ty::Uint(ui)) if !neg => trunc(n.get(), *ui),
|
||||
(ast::LitKind::Int(n, _), ty::Int(i)) => trunc(
|
||||
if neg { (n.get() as i128).overflowing_neg().0 as u128 } else { n.get() },
|
||||
i.to_unsigned(),
|
||||
),
|
||||
(ast::LitKind::Int(n, _), ty::Uint(_)) if !neg => trunc(n.get()),
|
||||
(ast::LitKind::Int(n, _), ty::Int(_)) => {
|
||||
trunc(if neg { (n.get() as i128).overflowing_neg().0 as u128 } else { n.get() })
|
||||
}
|
||||
(ast::LitKind::Float(n, _), ty::Float(fty)) => {
|
||||
parse_float_into_constval(*n, *fty, neg).unwrap()
|
||||
}
|
||||
|
|
|
@ -305,27 +305,25 @@ impl DropTree {
|
|||
}
|
||||
|
||||
/// Builds the MIR for a given drop tree.
|
||||
///
|
||||
/// `blocks` should have the same length as `self.drops`, and may have its
|
||||
/// first value set to some already existing block.
|
||||
fn build_mir<'tcx, T: DropTreeBuilder<'tcx>>(
|
||||
&mut self,
|
||||
cfg: &mut CFG<'tcx>,
|
||||
blocks: &mut IndexVec<DropIdx, Option<BasicBlock>>,
|
||||
) {
|
||||
root_node: Option<BasicBlock>,
|
||||
) -> IndexVec<DropIdx, Option<BasicBlock>> {
|
||||
debug!("DropTree::build_mir(drops = {:#?})", self);
|
||||
assert_eq!(blocks.len(), self.drops.len());
|
||||
|
||||
self.assign_blocks::<T>(cfg, blocks);
|
||||
self.link_blocks(cfg, blocks)
|
||||
let mut blocks = self.assign_blocks::<T>(cfg, root_node);
|
||||
self.link_blocks(cfg, &mut blocks);
|
||||
|
||||
blocks
|
||||
}
|
||||
|
||||
/// Assign blocks for all of the drops in the drop tree that need them.
|
||||
fn assign_blocks<'tcx, T: DropTreeBuilder<'tcx>>(
|
||||
&mut self,
|
||||
cfg: &mut CFG<'tcx>,
|
||||
blocks: &mut IndexVec<DropIdx, Option<BasicBlock>>,
|
||||
) {
|
||||
root_node: Option<BasicBlock>,
|
||||
) -> IndexVec<DropIdx, Option<BasicBlock>> {
|
||||
// StorageDead statements can share blocks with each other and also with
|
||||
// a Drop terminator. We iterate through the drops to find which drops
|
||||
// need their own block.
|
||||
|
@ -342,8 +340,11 @@ impl DropTree {
|
|||
Own,
|
||||
}
|
||||
|
||||
let mut blocks = IndexVec::from_elem(None, &self.drops);
|
||||
blocks[ROOT_NODE] = root_node;
|
||||
|
||||
let mut needs_block = IndexVec::from_elem(Block::None, &self.drops);
|
||||
if blocks[ROOT_NODE].is_some() {
|
||||
if root_node.is_some() {
|
||||
// In some cases (such as drops for `continue`) the root node
|
||||
// already has a block. In this case, make sure that we don't
|
||||
// override it.
|
||||
|
@ -385,6 +386,8 @@ impl DropTree {
|
|||
|
||||
debug!("assign_blocks: blocks = {:#?}", blocks);
|
||||
assert!(entry_points.is_empty());
|
||||
|
||||
blocks
|
||||
}
|
||||
|
||||
fn link_blocks<'tcx>(
|
||||
|
@ -1574,10 +1577,7 @@ impl<'a, 'tcx: 'a> Builder<'a, 'tcx> {
|
|||
span: Span,
|
||||
continue_block: Option<BasicBlock>,
|
||||
) -> Option<BlockAnd<()>> {
|
||||
let mut blocks = IndexVec::from_elem(None, &drops.drops);
|
||||
blocks[ROOT_NODE] = continue_block;
|
||||
|
||||
drops.build_mir::<ExitScopes>(&mut self.cfg, &mut blocks);
|
||||
let blocks = drops.build_mir::<ExitScopes>(&mut self.cfg, continue_block);
|
||||
let is_coroutine = self.coroutine.is_some();
|
||||
|
||||
// Link the exit drop tree to unwind drop tree.
|
||||
|
@ -1633,8 +1633,7 @@ impl<'a, 'tcx: 'a> Builder<'a, 'tcx> {
|
|||
let drops = &mut self.scopes.coroutine_drops;
|
||||
let cfg = &mut self.cfg;
|
||||
let fn_span = self.fn_span;
|
||||
let mut blocks = IndexVec::from_elem(None, &drops.drops);
|
||||
drops.build_mir::<CoroutineDrop>(cfg, &mut blocks);
|
||||
let blocks = drops.build_mir::<CoroutineDrop>(cfg, None);
|
||||
if let Some(root_block) = blocks[ROOT_NODE] {
|
||||
cfg.terminate(
|
||||
root_block,
|
||||
|
@ -1670,9 +1669,7 @@ impl<'a, 'tcx: 'a> Builder<'a, 'tcx> {
|
|||
fn_span: Span,
|
||||
resume_block: &mut Option<BasicBlock>,
|
||||
) {
|
||||
let mut blocks = IndexVec::from_elem(None, &drops.drops);
|
||||
blocks[ROOT_NODE] = *resume_block;
|
||||
drops.build_mir::<Unwind>(cfg, &mut blocks);
|
||||
let blocks = drops.build_mir::<Unwind>(cfg, *resume_block);
|
||||
if let (None, Some(resume)) = (*resume_block, blocks[ROOT_NODE]) {
|
||||
cfg.terminate(resume, SourceInfo::outermost(fn_span), TerminatorKind::UnwindResume);
|
||||
|
||||
|
|
|
@ -5,4 +5,4 @@ pub mod pretty;
|
|||
pub mod visit;
|
||||
|
||||
pub use body::*;
|
||||
pub use visit::MirVisitor;
|
||||
pub use visit::{MirVisitor, MutMirVisitor};
|
||||
|
|
|
@ -77,6 +77,22 @@ impl Body {
|
|||
&self.locals[self.arg_count + 1..]
|
||||
}
|
||||
|
||||
/// Returns a mutable reference to the local that holds this function's return value.
|
||||
pub(crate) fn ret_local_mut(&mut self) -> &mut LocalDecl {
|
||||
&mut self.locals[RETURN_LOCAL]
|
||||
}
|
||||
|
||||
/// Returns a mutable slice of locals corresponding to this function's arguments.
|
||||
pub(crate) fn arg_locals_mut(&mut self) -> &mut [LocalDecl] {
|
||||
&mut self.locals[1..][..self.arg_count]
|
||||
}
|
||||
|
||||
/// Returns a mutable slice of inner locals for this function.
|
||||
/// Inner locals are those that are neither the return local nor the argument locals.
|
||||
pub(crate) fn inner_locals_mut(&mut self) -> &mut [LocalDecl] {
|
||||
&mut self.locals[self.arg_count + 1..]
|
||||
}
|
||||
|
||||
/// Convenience function to get all the locals in this function.
|
||||
///
|
||||
/// Locals are typically accessed via the more specific methods `ret_local`,
|
||||
|
|
|
@ -39,406 +39,486 @@ use crate::mir::*;
|
|||
use crate::ty::{GenericArgs, MirConst, Region, Ty, TyConst};
|
||||
use crate::{Error, Opaque, Span};
|
||||
|
||||
pub trait MirVisitor {
|
||||
fn visit_body(&mut self, body: &Body) {
|
||||
self.super_body(body)
|
||||
}
|
||||
macro_rules! make_mir_visitor {
|
||||
($visitor_trait_name:ident, $($mutability:ident)?) => {
|
||||
pub trait $visitor_trait_name {
|
||||
fn visit_body(&mut self, body: &$($mutability)? Body) {
|
||||
self.super_body(body)
|
||||
}
|
||||
|
||||
fn visit_basic_block(&mut self, bb: &BasicBlock) {
|
||||
self.super_basic_block(bb)
|
||||
}
|
||||
fn visit_basic_block(&mut self, bb: &$($mutability)? BasicBlock) {
|
||||
self.super_basic_block(bb)
|
||||
}
|
||||
|
||||
fn visit_ret_decl(&mut self, local: Local, decl: &LocalDecl) {
|
||||
self.super_ret_decl(local, decl)
|
||||
}
|
||||
fn visit_ret_decl(&mut self, local: Local, decl: &$($mutability)? LocalDecl) {
|
||||
self.super_ret_decl(local, decl)
|
||||
}
|
||||
|
||||
fn visit_arg_decl(&mut self, local: Local, decl: &LocalDecl) {
|
||||
self.super_arg_decl(local, decl)
|
||||
}
|
||||
fn visit_arg_decl(&mut self, local: Local, decl: &$($mutability)? LocalDecl) {
|
||||
self.super_arg_decl(local, decl)
|
||||
}
|
||||
|
||||
fn visit_local_decl(&mut self, local: Local, decl: &LocalDecl) {
|
||||
self.super_local_decl(local, decl)
|
||||
}
|
||||
fn visit_local_decl(&mut self, local: Local, decl: &$($mutability)? LocalDecl) {
|
||||
self.super_local_decl(local, decl)
|
||||
}
|
||||
|
||||
fn visit_statement(&mut self, stmt: &Statement, location: Location) {
|
||||
self.super_statement(stmt, location)
|
||||
}
|
||||
fn visit_statement(&mut self, stmt: &$($mutability)? Statement, location: Location) {
|
||||
self.super_statement(stmt, location)
|
||||
}
|
||||
|
||||
fn visit_terminator(&mut self, term: &Terminator, location: Location) {
|
||||
self.super_terminator(term, location)
|
||||
}
|
||||
fn visit_terminator(&mut self, term: &$($mutability)? Terminator, location: Location) {
|
||||
self.super_terminator(term, location)
|
||||
}
|
||||
|
||||
fn visit_span(&mut self, span: &Span) {
|
||||
self.super_span(span)
|
||||
}
|
||||
fn visit_span(&mut self, span: &$($mutability)? Span) {
|
||||
self.super_span(span)
|
||||
}
|
||||
|
||||
fn visit_place(&mut self, place: &Place, ptx: PlaceContext, location: Location) {
|
||||
self.super_place(place, ptx, location)
|
||||
}
|
||||
fn visit_place(&mut self, place: &$($mutability)? Place, ptx: PlaceContext, location: Location) {
|
||||
self.super_place(place, ptx, location)
|
||||
}
|
||||
|
||||
fn visit_projection_elem(
|
||||
&mut self,
|
||||
place_ref: PlaceRef<'_>,
|
||||
elem: &ProjectionElem,
|
||||
ptx: PlaceContext,
|
||||
location: Location,
|
||||
) {
|
||||
let _ = place_ref;
|
||||
self.super_projection_elem(elem, ptx, location);
|
||||
}
|
||||
visit_place_fns!($($mutability)?);
|
||||
|
||||
fn visit_local(&mut self, local: &Local, ptx: PlaceContext, location: Location) {
|
||||
let _ = (local, ptx, location);
|
||||
}
|
||||
fn visit_local(&mut self, local: &$($mutability)? Local, ptx: PlaceContext, location: Location) {
|
||||
let _ = (local, ptx, location);
|
||||
}
|
||||
|
||||
fn visit_rvalue(&mut self, rvalue: &Rvalue, location: Location) {
|
||||
self.super_rvalue(rvalue, location)
|
||||
}
|
||||
fn visit_rvalue(&mut self, rvalue: &$($mutability)? Rvalue, location: Location) {
|
||||
self.super_rvalue(rvalue, location)
|
||||
}
|
||||
|
||||
fn visit_operand(&mut self, operand: &Operand, location: Location) {
|
||||
self.super_operand(operand, location)
|
||||
}
|
||||
fn visit_operand(&mut self, operand: &$($mutability)? Operand, location: Location) {
|
||||
self.super_operand(operand, location)
|
||||
}
|
||||
|
||||
fn visit_user_type_projection(&mut self, projection: &UserTypeProjection) {
|
||||
self.super_user_type_projection(projection)
|
||||
}
|
||||
fn visit_user_type_projection(&mut self, projection: &$($mutability)? UserTypeProjection) {
|
||||
self.super_user_type_projection(projection)
|
||||
}
|
||||
|
||||
fn visit_ty(&mut self, ty: &Ty, location: Location) {
|
||||
let _ = location;
|
||||
self.super_ty(ty)
|
||||
}
|
||||
fn visit_ty(&mut self, ty: &$($mutability)? Ty, location: Location) {
|
||||
let _ = location;
|
||||
self.super_ty(ty)
|
||||
}
|
||||
|
||||
fn visit_const_operand(&mut self, constant: &ConstOperand, location: Location) {
|
||||
self.super_const_operand(constant, location)
|
||||
}
|
||||
fn visit_const_operand(&mut self, constant: &$($mutability)? ConstOperand, location: Location) {
|
||||
self.super_const_operand(constant, location)
|
||||
}
|
||||
|
||||
fn visit_mir_const(&mut self, constant: &MirConst, location: Location) {
|
||||
self.super_mir_const(constant, location)
|
||||
}
|
||||
fn visit_mir_const(&mut self, constant: &$($mutability)? MirConst, location: Location) {
|
||||
self.super_mir_const(constant, location)
|
||||
}
|
||||
|
||||
fn visit_ty_const(&mut self, constant: &TyConst, location: Location) {
|
||||
let _ = location;
|
||||
self.super_ty_const(constant)
|
||||
}
|
||||
fn visit_ty_const(&mut self, constant: &$($mutability)? TyConst, location: Location) {
|
||||
let _ = location;
|
||||
self.super_ty_const(constant)
|
||||
}
|
||||
|
||||
fn visit_region(&mut self, region: &Region, location: Location) {
|
||||
let _ = location;
|
||||
self.super_region(region)
|
||||
}
|
||||
fn visit_region(&mut self, region: &$($mutability)? Region, location: Location) {
|
||||
let _ = location;
|
||||
self.super_region(region)
|
||||
}
|
||||
|
||||
fn visit_args(&mut self, args: &GenericArgs, location: Location) {
|
||||
let _ = location;
|
||||
self.super_args(args)
|
||||
}
|
||||
fn visit_args(&mut self, args: &$($mutability)? GenericArgs, location: Location) {
|
||||
let _ = location;
|
||||
self.super_args(args)
|
||||
}
|
||||
|
||||
fn visit_assert_msg(&mut self, msg: &AssertMessage, location: Location) {
|
||||
self.super_assert_msg(msg, location)
|
||||
}
|
||||
fn visit_assert_msg(&mut self, msg: &$($mutability)? AssertMessage, location: Location) {
|
||||
self.super_assert_msg(msg, location)
|
||||
}
|
||||
|
||||
fn visit_var_debug_info(&mut self, var_debug_info: &VarDebugInfo) {
|
||||
self.super_var_debug_info(var_debug_info);
|
||||
}
|
||||
fn visit_var_debug_info(&mut self, var_debug_info: &$($mutability)? VarDebugInfo) {
|
||||
self.super_var_debug_info(var_debug_info);
|
||||
}
|
||||
|
||||
fn super_body(&mut self, body: &Body) {
|
||||
let Body { blocks, locals: _, arg_count, var_debug_info, spread_arg: _, span } = body;
|
||||
fn super_body(&mut self, body: &$($mutability)? Body) {
|
||||
super_body!(self, body, $($mutability)?);
|
||||
}
|
||||
|
||||
for bb in blocks {
|
||||
self.visit_basic_block(bb);
|
||||
fn super_basic_block(&mut self, bb: &$($mutability)? BasicBlock) {
|
||||
let BasicBlock { statements, terminator } = bb;
|
||||
for stmt in statements {
|
||||
self.visit_statement(stmt, Location(stmt.span));
|
||||
}
|
||||
self.visit_terminator(terminator, Location(terminator.span));
|
||||
}
|
||||
|
||||
fn super_local_decl(&mut self, local: Local, decl: &$($mutability)? LocalDecl) {
|
||||
let _ = local;
|
||||
let LocalDecl { ty, span, .. } = decl;
|
||||
self.visit_ty(ty, Location(*span));
|
||||
}
|
||||
|
||||
fn super_ret_decl(&mut self, local: Local, decl: &$($mutability)? LocalDecl) {
|
||||
self.super_local_decl(local, decl)
|
||||
}
|
||||
|
||||
fn super_arg_decl(&mut self, local: Local, decl: &$($mutability)? LocalDecl) {
|
||||
self.super_local_decl(local, decl)
|
||||
}
|
||||
|
||||
fn super_statement(&mut self, stmt: &$($mutability)? Statement, location: Location) {
|
||||
let Statement { kind, span } = stmt;
|
||||
self.visit_span(span);
|
||||
match kind {
|
||||
StatementKind::Assign(place, rvalue) => {
|
||||
self.visit_place(place, PlaceContext::MUTATING, location);
|
||||
self.visit_rvalue(rvalue, location);
|
||||
}
|
||||
StatementKind::FakeRead(_, place) | StatementKind::PlaceMention(place) => {
|
||||
self.visit_place(place, PlaceContext::NON_MUTATING, location);
|
||||
}
|
||||
StatementKind::SetDiscriminant { place, .. }
|
||||
| StatementKind::Deinit(place)
|
||||
| StatementKind::Retag(_, place) => {
|
||||
self.visit_place(place, PlaceContext::MUTATING, location);
|
||||
}
|
||||
StatementKind::StorageLive(local) | StatementKind::StorageDead(local) => {
|
||||
self.visit_local(local, PlaceContext::NON_USE, location);
|
||||
}
|
||||
StatementKind::AscribeUserType { place, projections, variance: _ } => {
|
||||
self.visit_place(place, PlaceContext::NON_USE, location);
|
||||
self.visit_user_type_projection(projections);
|
||||
}
|
||||
StatementKind::Coverage(coverage) => visit_opaque(coverage),
|
||||
StatementKind::Intrinsic(intrisic) => match intrisic {
|
||||
NonDivergingIntrinsic::Assume(operand) => {
|
||||
self.visit_operand(operand, location);
|
||||
}
|
||||
NonDivergingIntrinsic::CopyNonOverlapping(CopyNonOverlapping {
|
||||
src,
|
||||
dst,
|
||||
count,
|
||||
}) => {
|
||||
self.visit_operand(src, location);
|
||||
self.visit_operand(dst, location);
|
||||
self.visit_operand(count, location);
|
||||
}
|
||||
},
|
||||
StatementKind::ConstEvalCounter | StatementKind::Nop => {}
|
||||
}
|
||||
}
|
||||
|
||||
fn super_terminator(&mut self, term: &$($mutability)? Terminator, location: Location) {
|
||||
let Terminator { kind, span } = term;
|
||||
self.visit_span(span);
|
||||
match kind {
|
||||
TerminatorKind::Goto { .. }
|
||||
| TerminatorKind::Resume
|
||||
| TerminatorKind::Abort
|
||||
| TerminatorKind::Unreachable => {}
|
||||
TerminatorKind::Assert { cond, expected: _, msg, target: _, unwind: _ } => {
|
||||
self.visit_operand(cond, location);
|
||||
self.visit_assert_msg(msg, location);
|
||||
}
|
||||
TerminatorKind::Drop { place, target: _, unwind: _ } => {
|
||||
self.visit_place(place, PlaceContext::MUTATING, location);
|
||||
}
|
||||
TerminatorKind::Call { func, args, destination, target: _, unwind: _ } => {
|
||||
self.visit_operand(func, location);
|
||||
for arg in args {
|
||||
self.visit_operand(arg, location);
|
||||
}
|
||||
self.visit_place(destination, PlaceContext::MUTATING, location);
|
||||
}
|
||||
TerminatorKind::InlineAsm { operands, .. } => {
|
||||
for op in operands {
|
||||
let InlineAsmOperand { in_value, out_place, raw_rpr: _ } = op;
|
||||
if let Some(input) = in_value {
|
||||
self.visit_operand(input, location);
|
||||
}
|
||||
if let Some(output) = out_place {
|
||||
self.visit_place(output, PlaceContext::MUTATING, location);
|
||||
}
|
||||
}
|
||||
}
|
||||
TerminatorKind::Return => {
|
||||
let $($mutability)? local = RETURN_LOCAL;
|
||||
self.visit_local(&$($mutability)? local, PlaceContext::NON_MUTATING, location);
|
||||
}
|
||||
TerminatorKind::SwitchInt { discr, targets: _ } => {
|
||||
self.visit_operand(discr, location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn super_span(&mut self, span: &$($mutability)? Span) {
|
||||
let _ = span;
|
||||
}
|
||||
|
||||
fn super_rvalue(&mut self, rvalue: &$($mutability)? Rvalue, location: Location) {
|
||||
match rvalue {
|
||||
Rvalue::AddressOf(mutability, place) => {
|
||||
let pcx = PlaceContext { is_mut: *mutability == RawPtrKind::Mut };
|
||||
self.visit_place(place, pcx, location);
|
||||
}
|
||||
Rvalue::Aggregate(_, operands) => {
|
||||
for op in operands {
|
||||
self.visit_operand(op, location);
|
||||
}
|
||||
}
|
||||
Rvalue::BinaryOp(_, lhs, rhs) | Rvalue::CheckedBinaryOp(_, lhs, rhs) => {
|
||||
self.visit_operand(lhs, location);
|
||||
self.visit_operand(rhs, location);
|
||||
}
|
||||
Rvalue::Cast(_, op, ty) => {
|
||||
self.visit_operand(op, location);
|
||||
self.visit_ty(ty, location);
|
||||
}
|
||||
Rvalue::CopyForDeref(place) | Rvalue::Discriminant(place) | Rvalue::Len(place) => {
|
||||
self.visit_place(place, PlaceContext::NON_MUTATING, location);
|
||||
}
|
||||
Rvalue::Ref(region, kind, place) => {
|
||||
self.visit_region(region, location);
|
||||
let pcx = PlaceContext { is_mut: matches!(kind, BorrowKind::Mut { .. }) };
|
||||
self.visit_place(place, pcx, location);
|
||||
}
|
||||
Rvalue::Repeat(op, constant) => {
|
||||
self.visit_operand(op, location);
|
||||
self.visit_ty_const(constant, location);
|
||||
}
|
||||
Rvalue::ShallowInitBox(op, ty) => {
|
||||
self.visit_ty(ty, location);
|
||||
self.visit_operand(op, location)
|
||||
}
|
||||
Rvalue::ThreadLocalRef(_) => {}
|
||||
Rvalue::NullaryOp(_, ty) => {
|
||||
self.visit_ty(ty, location);
|
||||
}
|
||||
Rvalue::UnaryOp(_, op) | Rvalue::Use(op) => {
|
||||
self.visit_operand(op, location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn super_operand(&mut self, operand: &$($mutability)? Operand, location: Location) {
|
||||
match operand {
|
||||
Operand::Copy(place) | Operand::Move(place) => {
|
||||
self.visit_place(place, PlaceContext::NON_MUTATING, location)
|
||||
}
|
||||
Operand::Constant(constant) => {
|
||||
self.visit_const_operand(constant, location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn super_user_type_projection(&mut self, projection: &$($mutability)? UserTypeProjection) {
|
||||
// This is a no-op on mir::Visitor.
|
||||
let _ = projection;
|
||||
}
|
||||
|
||||
fn super_ty(&mut self, ty: &$($mutability)? Ty) {
|
||||
let _ = ty;
|
||||
}
|
||||
|
||||
fn super_const_operand(&mut self, constant: &$($mutability)? ConstOperand, location: Location) {
|
||||
let ConstOperand { span, user_ty: _, const_ } = constant;
|
||||
self.visit_span(span);
|
||||
self.visit_mir_const(const_, location);
|
||||
}
|
||||
|
||||
fn super_mir_const(&mut self, constant: &$($mutability)? MirConst, location: Location) {
|
||||
let MirConst { kind: _, ty, id: _ } = constant;
|
||||
self.visit_ty(ty, location);
|
||||
}
|
||||
|
||||
fn super_ty_const(&mut self, constant: &$($mutability)? TyConst) {
|
||||
let _ = constant;
|
||||
}
|
||||
|
||||
fn super_region(&mut self, region: &$($mutability)? Region) {
|
||||
let _ = region;
|
||||
}
|
||||
|
||||
fn super_args(&mut self, args: &$($mutability)? GenericArgs) {
|
||||
let _ = args;
|
||||
}
|
||||
|
||||
fn super_var_debug_info(&mut self, var_debug_info: &$($mutability)? VarDebugInfo) {
|
||||
let VarDebugInfo { source_info, composite, value, name: _, argument_index: _ } =
|
||||
var_debug_info;
|
||||
self.visit_span(&$($mutability)? source_info.span);
|
||||
let location = Location(source_info.span);
|
||||
if let Some(composite) = composite {
|
||||
self.visit_ty(&$($mutability)? composite.ty, location);
|
||||
}
|
||||
match value {
|
||||
VarDebugInfoContents::Place(place) => {
|
||||
self.visit_place(place, PlaceContext::NON_USE, location);
|
||||
}
|
||||
VarDebugInfoContents::Const(constant) => {
|
||||
self.visit_mir_const(&$($mutability)? constant.const_, location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn super_assert_msg(&mut self, msg: &$($mutability)? AssertMessage, location: Location) {
|
||||
match msg {
|
||||
AssertMessage::BoundsCheck { len, index } => {
|
||||
self.visit_operand(len, location);
|
||||
self.visit_operand(index, location);
|
||||
}
|
||||
AssertMessage::Overflow(_, left, right) => {
|
||||
self.visit_operand(left, location);
|
||||
self.visit_operand(right, location);
|
||||
}
|
||||
AssertMessage::OverflowNeg(op)
|
||||
| AssertMessage::DivisionByZero(op)
|
||||
| AssertMessage::RemainderByZero(op) => {
|
||||
self.visit_operand(op, location);
|
||||
}
|
||||
AssertMessage::ResumedAfterReturn(_)
|
||||
| AssertMessage::ResumedAfterPanic(_)
|
||||
| AssertMessage::NullPointerDereference => {
|
||||
//nothing to visit
|
||||
}
|
||||
AssertMessage::MisalignedPointerDereference { required, found } => {
|
||||
self.visit_operand(required, location);
|
||||
self.visit_operand(found, location);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! super_body {
|
||||
($self:ident, $body:ident, mut) => {
|
||||
for bb in $body.blocks.iter_mut() {
|
||||
$self.visit_basic_block(bb);
|
||||
}
|
||||
|
||||
self.visit_ret_decl(RETURN_LOCAL, body.ret_local());
|
||||
$self.visit_ret_decl(RETURN_LOCAL, $body.ret_local_mut());
|
||||
|
||||
for (idx, arg) in body.arg_locals().iter().enumerate() {
|
||||
self.visit_arg_decl(idx + 1, arg)
|
||||
for (idx, arg) in $body.arg_locals_mut().iter_mut().enumerate() {
|
||||
$self.visit_arg_decl(idx + 1, arg)
|
||||
}
|
||||
|
||||
let local_start = $body.arg_count + 1;
|
||||
for (idx, arg) in $body.inner_locals_mut().iter_mut().enumerate() {
|
||||
$self.visit_local_decl(idx + local_start, arg)
|
||||
}
|
||||
|
||||
for info in $body.var_debug_info.iter_mut() {
|
||||
$self.visit_var_debug_info(info);
|
||||
}
|
||||
|
||||
$self.visit_span(&mut $body.span)
|
||||
};
|
||||
|
||||
($self:ident, $body:ident, ) => {
|
||||
let Body { blocks, locals: _, arg_count, var_debug_info, spread_arg: _, span } = $body;
|
||||
|
||||
for bb in blocks {
|
||||
$self.visit_basic_block(bb);
|
||||
}
|
||||
|
||||
$self.visit_ret_decl(RETURN_LOCAL, $body.ret_local());
|
||||
|
||||
for (idx, arg) in $body.arg_locals().iter().enumerate() {
|
||||
$self.visit_arg_decl(idx + 1, arg)
|
||||
}
|
||||
|
||||
let local_start = arg_count + 1;
|
||||
for (idx, arg) in body.inner_locals().iter().enumerate() {
|
||||
self.visit_local_decl(idx + local_start, arg)
|
||||
for (idx, arg) in $body.inner_locals().iter().enumerate() {
|
||||
$self.visit_local_decl(idx + local_start, arg)
|
||||
}
|
||||
|
||||
for info in var_debug_info.iter() {
|
||||
self.visit_var_debug_info(info);
|
||||
$self.visit_var_debug_info(info);
|
||||
}
|
||||
|
||||
self.visit_span(span)
|
||||
}
|
||||
|
||||
fn super_basic_block(&mut self, bb: &BasicBlock) {
|
||||
let BasicBlock { statements, terminator } = bb;
|
||||
for stmt in statements {
|
||||
self.visit_statement(stmt, Location(stmt.span));
|
||||
}
|
||||
self.visit_terminator(terminator, Location(terminator.span));
|
||||
}
|
||||
|
||||
fn super_local_decl(&mut self, local: Local, decl: &LocalDecl) {
|
||||
let _ = local;
|
||||
let LocalDecl { ty, span, .. } = decl;
|
||||
self.visit_ty(ty, Location(*span));
|
||||
}
|
||||
|
||||
fn super_ret_decl(&mut self, local: Local, decl: &LocalDecl) {
|
||||
self.super_local_decl(local, decl)
|
||||
}
|
||||
|
||||
fn super_arg_decl(&mut self, local: Local, decl: &LocalDecl) {
|
||||
self.super_local_decl(local, decl)
|
||||
}
|
||||
|
||||
fn super_statement(&mut self, stmt: &Statement, location: Location) {
|
||||
let Statement { kind, span } = stmt;
|
||||
self.visit_span(span);
|
||||
match kind {
|
||||
StatementKind::Assign(place, rvalue) => {
|
||||
self.visit_place(place, PlaceContext::MUTATING, location);
|
||||
self.visit_rvalue(rvalue, location);
|
||||
}
|
||||
StatementKind::FakeRead(_, place) | StatementKind::PlaceMention(place) => {
|
||||
self.visit_place(place, PlaceContext::NON_MUTATING, location);
|
||||
}
|
||||
StatementKind::SetDiscriminant { place, .. }
|
||||
| StatementKind::Deinit(place)
|
||||
| StatementKind::Retag(_, place) => {
|
||||
self.visit_place(place, PlaceContext::MUTATING, location);
|
||||
}
|
||||
StatementKind::StorageLive(local) | StatementKind::StorageDead(local) => {
|
||||
self.visit_local(local, PlaceContext::NON_USE, location);
|
||||
}
|
||||
StatementKind::AscribeUserType { place, projections, variance: _ } => {
|
||||
self.visit_place(place, PlaceContext::NON_USE, location);
|
||||
self.visit_user_type_projection(projections);
|
||||
}
|
||||
StatementKind::Coverage(coverage) => visit_opaque(coverage),
|
||||
StatementKind::Intrinsic(intrisic) => match intrisic {
|
||||
NonDivergingIntrinsic::Assume(operand) => {
|
||||
self.visit_operand(operand, location);
|
||||
}
|
||||
NonDivergingIntrinsic::CopyNonOverlapping(CopyNonOverlapping {
|
||||
src,
|
||||
dst,
|
||||
count,
|
||||
}) => {
|
||||
self.visit_operand(src, location);
|
||||
self.visit_operand(dst, location);
|
||||
self.visit_operand(count, location);
|
||||
}
|
||||
},
|
||||
StatementKind::ConstEvalCounter | StatementKind::Nop => {}
|
||||
}
|
||||
}
|
||||
|
||||
fn super_terminator(&mut self, term: &Terminator, location: Location) {
|
||||
let Terminator { kind, span } = term;
|
||||
self.visit_span(span);
|
||||
match kind {
|
||||
TerminatorKind::Goto { .. }
|
||||
| TerminatorKind::Resume
|
||||
| TerminatorKind::Abort
|
||||
| TerminatorKind::Unreachable => {}
|
||||
TerminatorKind::Assert { cond, expected: _, msg, target: _, unwind: _ } => {
|
||||
self.visit_operand(cond, location);
|
||||
self.visit_assert_msg(msg, location);
|
||||
}
|
||||
TerminatorKind::Drop { place, target: _, unwind: _ } => {
|
||||
self.visit_place(place, PlaceContext::MUTATING, location);
|
||||
}
|
||||
TerminatorKind::Call { func, args, destination, target: _, unwind: _ } => {
|
||||
self.visit_operand(func, location);
|
||||
for arg in args {
|
||||
self.visit_operand(arg, location);
|
||||
}
|
||||
self.visit_place(destination, PlaceContext::MUTATING, location);
|
||||
}
|
||||
TerminatorKind::InlineAsm { operands, .. } => {
|
||||
for op in operands {
|
||||
let InlineAsmOperand { in_value, out_place, raw_rpr: _ } = op;
|
||||
if let Some(input) = in_value {
|
||||
self.visit_operand(input, location);
|
||||
}
|
||||
if let Some(output) = out_place {
|
||||
self.visit_place(output, PlaceContext::MUTATING, location);
|
||||
}
|
||||
}
|
||||
}
|
||||
TerminatorKind::Return => {
|
||||
let local = RETURN_LOCAL;
|
||||
self.visit_local(&local, PlaceContext::NON_MUTATING, location);
|
||||
}
|
||||
TerminatorKind::SwitchInt { discr, targets: _ } => {
|
||||
self.visit_operand(discr, location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn super_span(&mut self, span: &Span) {
|
||||
let _ = span;
|
||||
}
|
||||
|
||||
fn super_place(&mut self, place: &Place, ptx: PlaceContext, location: Location) {
|
||||
let _ = location;
|
||||
let _ = ptx;
|
||||
self.visit_local(&place.local, ptx, location);
|
||||
|
||||
for (idx, elem) in place.projection.iter().enumerate() {
|
||||
let place_ref = PlaceRef { local: place.local, projection: &place.projection[..idx] };
|
||||
self.visit_projection_elem(place_ref, elem, ptx, location);
|
||||
}
|
||||
}
|
||||
|
||||
fn super_projection_elem(
|
||||
&mut self,
|
||||
elem: &ProjectionElem,
|
||||
ptx: PlaceContext,
|
||||
location: Location,
|
||||
) {
|
||||
match elem {
|
||||
ProjectionElem::Downcast(_idx) => {}
|
||||
ProjectionElem::ConstantIndex { offset: _, min_length: _, from_end: _ }
|
||||
| ProjectionElem::Deref
|
||||
| ProjectionElem::Subslice { from: _, to: _, from_end: _ } => {}
|
||||
ProjectionElem::Field(_idx, ty) => self.visit_ty(ty, location),
|
||||
ProjectionElem::Index(local) => self.visit_local(local, ptx, location),
|
||||
ProjectionElem::OpaqueCast(ty) | ProjectionElem::Subtype(ty) => {
|
||||
self.visit_ty(ty, location)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn super_rvalue(&mut self, rvalue: &Rvalue, location: Location) {
|
||||
match rvalue {
|
||||
Rvalue::AddressOf(mutability, place) => {
|
||||
let pcx = PlaceContext { is_mut: *mutability == RawPtrKind::Mut };
|
||||
self.visit_place(place, pcx, location);
|
||||
}
|
||||
Rvalue::Aggregate(_, operands) => {
|
||||
for op in operands {
|
||||
self.visit_operand(op, location);
|
||||
}
|
||||
}
|
||||
Rvalue::BinaryOp(_, lhs, rhs) | Rvalue::CheckedBinaryOp(_, lhs, rhs) => {
|
||||
self.visit_operand(lhs, location);
|
||||
self.visit_operand(rhs, location);
|
||||
}
|
||||
Rvalue::Cast(_, op, ty) => {
|
||||
self.visit_operand(op, location);
|
||||
self.visit_ty(ty, location);
|
||||
}
|
||||
Rvalue::CopyForDeref(place) | Rvalue::Discriminant(place) | Rvalue::Len(place) => {
|
||||
self.visit_place(place, PlaceContext::NON_MUTATING, location);
|
||||
}
|
||||
Rvalue::Ref(region, kind, place) => {
|
||||
self.visit_region(region, location);
|
||||
let pcx = PlaceContext { is_mut: matches!(kind, BorrowKind::Mut { .. }) };
|
||||
self.visit_place(place, pcx, location);
|
||||
}
|
||||
Rvalue::Repeat(op, constant) => {
|
||||
self.visit_operand(op, location);
|
||||
self.visit_ty_const(constant, location);
|
||||
}
|
||||
Rvalue::ShallowInitBox(op, ty) => {
|
||||
self.visit_ty(ty, location);
|
||||
self.visit_operand(op, location)
|
||||
}
|
||||
Rvalue::ThreadLocalRef(_) => {}
|
||||
Rvalue::NullaryOp(_, ty) => {
|
||||
self.visit_ty(ty, location);
|
||||
}
|
||||
Rvalue::UnaryOp(_, op) | Rvalue::Use(op) => {
|
||||
self.visit_operand(op, location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn super_operand(&mut self, operand: &Operand, location: Location) {
|
||||
match operand {
|
||||
Operand::Copy(place) | Operand::Move(place) => {
|
||||
self.visit_place(place, PlaceContext::NON_MUTATING, location)
|
||||
}
|
||||
Operand::Constant(constant) => {
|
||||
self.visit_const_operand(constant, location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn super_user_type_projection(&mut self, projection: &UserTypeProjection) {
|
||||
// This is a no-op on mir::Visitor.
|
||||
let _ = projection;
|
||||
}
|
||||
|
||||
fn super_ty(&mut self, ty: &Ty) {
|
||||
let _ = ty;
|
||||
}
|
||||
|
||||
fn super_const_operand(&mut self, constant: &ConstOperand, location: Location) {
|
||||
let ConstOperand { span, user_ty: _, const_ } = constant;
|
||||
self.visit_span(span);
|
||||
self.visit_mir_const(const_, location);
|
||||
}
|
||||
|
||||
fn super_mir_const(&mut self, constant: &MirConst, location: Location) {
|
||||
let MirConst { kind: _, ty, id: _ } = constant;
|
||||
self.visit_ty(ty, location);
|
||||
}
|
||||
|
||||
fn super_ty_const(&mut self, constant: &TyConst) {
|
||||
let _ = constant;
|
||||
}
|
||||
|
||||
fn super_region(&mut self, region: &Region) {
|
||||
let _ = region;
|
||||
}
|
||||
|
||||
fn super_args(&mut self, args: &GenericArgs) {
|
||||
let _ = args;
|
||||
}
|
||||
|
||||
fn super_var_debug_info(&mut self, var_debug_info: &VarDebugInfo) {
|
||||
let VarDebugInfo { source_info, composite, value, name: _, argument_index: _ } =
|
||||
var_debug_info;
|
||||
self.visit_span(&source_info.span);
|
||||
let location = Location(source_info.span);
|
||||
if let Some(composite) = composite {
|
||||
self.visit_ty(&composite.ty, location);
|
||||
}
|
||||
match value {
|
||||
VarDebugInfoContents::Place(place) => {
|
||||
self.visit_place(place, PlaceContext::NON_USE, location);
|
||||
}
|
||||
VarDebugInfoContents::Const(constant) => {
|
||||
self.visit_mir_const(&constant.const_, location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn super_assert_msg(&mut self, msg: &AssertMessage, location: Location) {
|
||||
match msg {
|
||||
AssertMessage::BoundsCheck { len, index } => {
|
||||
self.visit_operand(len, location);
|
||||
self.visit_operand(index, location);
|
||||
}
|
||||
AssertMessage::Overflow(_, left, right) => {
|
||||
self.visit_operand(left, location);
|
||||
self.visit_operand(right, location);
|
||||
}
|
||||
AssertMessage::OverflowNeg(op)
|
||||
| AssertMessage::DivisionByZero(op)
|
||||
| AssertMessage::RemainderByZero(op) => {
|
||||
self.visit_operand(op, location);
|
||||
}
|
||||
AssertMessage::ResumedAfterReturn(_)
|
||||
| AssertMessage::ResumedAfterPanic(_)
|
||||
| AssertMessage::NullPointerDereference => {
|
||||
//nothing to visit
|
||||
}
|
||||
AssertMessage::MisalignedPointerDereference { required, found } => {
|
||||
self.visit_operand(required, location);
|
||||
self.visit_operand(found, location);
|
||||
}
|
||||
}
|
||||
}
|
||||
$self.visit_span(span)
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! visit_place_fns {
|
||||
(mut) => {
|
||||
fn super_place(&mut self, place: &mut Place, ptx: PlaceContext, location: Location) {
|
||||
self.visit_local(&mut place.local, ptx, location);
|
||||
|
||||
for elem in place.projection.iter_mut() {
|
||||
self.visit_projection_elem(elem, ptx, location);
|
||||
}
|
||||
}
|
||||
|
||||
// We don't have to replicate the `process_projection()` like we did in
|
||||
// `rustc_middle::mir::visit.rs` here because the `projection` field in `Place`
|
||||
// of Stable-MIR is not an immutable borrow, unlike in `Place` of MIR.
|
||||
fn visit_projection_elem(
|
||||
&mut self,
|
||||
elem: &mut ProjectionElem,
|
||||
ptx: PlaceContext,
|
||||
location: Location,
|
||||
) {
|
||||
self.super_projection_elem(elem, ptx, location)
|
||||
}
|
||||
|
||||
fn super_projection_elem(
|
||||
&mut self,
|
||||
elem: &mut ProjectionElem,
|
||||
ptx: PlaceContext,
|
||||
location: Location,
|
||||
) {
|
||||
match elem {
|
||||
ProjectionElem::Deref => {}
|
||||
ProjectionElem::Field(_idx, ty) => self.visit_ty(ty, location),
|
||||
ProjectionElem::Index(local) => self.visit_local(local, ptx, location),
|
||||
ProjectionElem::ConstantIndex { offset: _, min_length: _, from_end: _ } => {}
|
||||
ProjectionElem::Subslice { from: _, to: _, from_end: _ } => {}
|
||||
ProjectionElem::Downcast(_idx) => {}
|
||||
ProjectionElem::OpaqueCast(ty) => self.visit_ty(ty, location),
|
||||
ProjectionElem::Subtype(ty) => self.visit_ty(ty, location),
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
() => {
|
||||
fn super_place(&mut self, place: &Place, ptx: PlaceContext, location: Location) {
|
||||
self.visit_local(&place.local, ptx, location);
|
||||
|
||||
for (idx, elem) in place.projection.iter().enumerate() {
|
||||
let place_ref =
|
||||
PlaceRef { local: place.local, projection: &place.projection[..idx] };
|
||||
self.visit_projection_elem(place_ref, elem, ptx, location);
|
||||
}
|
||||
}
|
||||
|
||||
fn visit_projection_elem<'a>(
|
||||
&mut self,
|
||||
place_ref: PlaceRef<'a>,
|
||||
elem: &ProjectionElem,
|
||||
ptx: PlaceContext,
|
||||
location: Location,
|
||||
) {
|
||||
let _ = place_ref;
|
||||
self.super_projection_elem(elem, ptx, location);
|
||||
}
|
||||
|
||||
fn super_projection_elem(
|
||||
&mut self,
|
||||
elem: &ProjectionElem,
|
||||
ptx: PlaceContext,
|
||||
location: Location,
|
||||
) {
|
||||
match elem {
|
||||
ProjectionElem::Deref => {}
|
||||
ProjectionElem::Field(_idx, ty) => self.visit_ty(ty, location),
|
||||
ProjectionElem::Index(local) => self.visit_local(local, ptx, location),
|
||||
ProjectionElem::ConstantIndex { offset: _, min_length: _, from_end: _ } => {}
|
||||
ProjectionElem::Subslice { from: _, to: _, from_end: _ } => {}
|
||||
ProjectionElem::Downcast(_idx) => {}
|
||||
ProjectionElem::OpaqueCast(ty) => self.visit_ty(ty, location),
|
||||
ProjectionElem::Subtype(ty) => self.visit_ty(ty, location),
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
make_mir_visitor!(MirVisitor,);
|
||||
make_mir_visitor!(MutMirVisitor, mut);
|
||||
|
||||
/// This function is a no-op that gets used to ensure this visitor is kept up-to-date.
|
||||
///
|
||||
/// The idea is that whenever we replace an Opaque type by a real type, the compiler will fail
|
||||
|
|
|
@ -1343,6 +1343,9 @@ impl Seek for Arc<File> {
|
|||
fn seek(&mut self, pos: SeekFrom) -> io::Result<u64> {
|
||||
(&**self).seek(pos)
|
||||
}
|
||||
fn stream_position(&mut self) -> io::Result<u64> {
|
||||
(&**self).stream_position()
|
||||
}
|
||||
}
|
||||
|
||||
impl OpenOptions {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
extern "C" {
|
||||
unsafe extern "C" {
|
||||
fn trusty_rng_secure_rand(randomBuffer: *mut core::ffi::c_void, randomBufferLen: libc::size_t);
|
||||
}
|
||||
|
||||
|
|
|
@ -6,18 +6,25 @@ pub static CRATES: &[&str] = &[
|
|||
"annotate-snippets",
|
||||
"anstyle",
|
||||
"basic-toml",
|
||||
"block-buffer",
|
||||
"bumpalo",
|
||||
"cfg-if",
|
||||
"cpufeatures",
|
||||
"crypto-common",
|
||||
"darling",
|
||||
"darling_core",
|
||||
"derive_builder_core",
|
||||
"digest",
|
||||
"fluent-bundle",
|
||||
"fluent-langneg",
|
||||
"fluent-syntax",
|
||||
"fnv",
|
||||
"generic-array",
|
||||
"heck",
|
||||
"ident_case",
|
||||
"intl-memoizer",
|
||||
"intl_pluralrules",
|
||||
"libc",
|
||||
"log",
|
||||
"memchr",
|
||||
"mime",
|
||||
|
@ -25,12 +32,17 @@ pub static CRATES: &[&str] = &[
|
|||
"minimal-lexical",
|
||||
"nom",
|
||||
"num-conv",
|
||||
"once_cell",
|
||||
"pest",
|
||||
"pest_generator",
|
||||
"pest_meta",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"rinja_parser",
|
||||
"rustc-hash",
|
||||
"self_cell",
|
||||
"serde",
|
||||
"sha2",
|
||||
"smallvec",
|
||||
"stable_deref_trait",
|
||||
"strsim",
|
||||
|
@ -40,12 +52,15 @@ pub static CRATES: &[&str] = &[
|
|||
"time-core",
|
||||
"tinystr",
|
||||
"type-map",
|
||||
"typenum",
|
||||
"ucd-trie",
|
||||
"unic-langid",
|
||||
"unic-langid-impl",
|
||||
"unic-langid-macros",
|
||||
"unicase",
|
||||
"unicode-ident",
|
||||
"unicode-width",
|
||||
"version_check",
|
||||
"wasm-bindgen-backend",
|
||||
"wasm-bindgen-macro-support",
|
||||
"wasm-bindgen-shared",
|
||||
|
|
|
@ -1200,11 +1200,12 @@ impl LangString {
|
|||
data.ignore = Ignore::All;
|
||||
seen_rust_tags = !seen_other_tags;
|
||||
}
|
||||
LangStringToken::LangToken(x) if x.starts_with("ignore-") => {
|
||||
if enable_per_target_ignores {
|
||||
ignores.push(x.trim_start_matches("ignore-").to_owned());
|
||||
seen_rust_tags = !seen_other_tags;
|
||||
}
|
||||
LangStringToken::LangToken(x)
|
||||
if let Some(ignore) = x.strip_prefix("ignore-")
|
||||
&& enable_per_target_ignores =>
|
||||
{
|
||||
ignores.push(ignore.to_owned());
|
||||
seen_rust_tags = !seen_other_tags;
|
||||
}
|
||||
LangStringToken::LangToken("rust") => {
|
||||
data.rust = true;
|
||||
|
@ -1226,37 +1227,39 @@ impl LangString {
|
|||
data.standalone_crate = true;
|
||||
seen_rust_tags = !seen_other_tags || seen_rust_tags;
|
||||
}
|
||||
LangStringToken::LangToken(x) if x.starts_with("edition") => {
|
||||
data.edition = x[7..].parse::<Edition>().ok();
|
||||
LangStringToken::LangToken(x)
|
||||
if let Some(edition) = x.strip_prefix("edition") =>
|
||||
{
|
||||
data.edition = edition.parse::<Edition>().ok();
|
||||
}
|
||||
LangStringToken::LangToken(x)
|
||||
if x.starts_with("rust") && x[4..].parse::<Edition>().is_ok() =>
|
||||
if let Some(edition) = x.strip_prefix("rust")
|
||||
&& edition.parse::<Edition>().is_ok()
|
||||
&& let Some(extra) = extra =>
|
||||
{
|
||||
if let Some(extra) = extra {
|
||||
extra.error_invalid_codeblock_attr_with_help(
|
||||
format!("unknown attribute `{x}`"),
|
||||
|lint| {
|
||||
lint.help(format!(
|
||||
"there is an attribute with a similar name: `edition{}`",
|
||||
&x[4..],
|
||||
));
|
||||
},
|
||||
);
|
||||
}
|
||||
extra.error_invalid_codeblock_attr_with_help(
|
||||
format!("unknown attribute `{x}`"),
|
||||
|lint| {
|
||||
lint.help(format!(
|
||||
"there is an attribute with a similar name: `edition{edition}`"
|
||||
));
|
||||
},
|
||||
);
|
||||
}
|
||||
LangStringToken::LangToken(x)
|
||||
if allow_error_code_check && x.starts_with('E') && x.len() == 5 =>
|
||||
if allow_error_code_check
|
||||
&& let Some(error_code) = x.strip_prefix('E')
|
||||
&& error_code.len() == 4 =>
|
||||
{
|
||||
if x[1..].parse::<u32>().is_ok() {
|
||||
if error_code.parse::<u32>().is_ok() {
|
||||
data.error_codes.push(x.to_owned());
|
||||
seen_rust_tags = !seen_other_tags || seen_rust_tags;
|
||||
} else {
|
||||
seen_other_tags = true;
|
||||
}
|
||||
}
|
||||
LangStringToken::LangToken(x) if extra.is_some() => {
|
||||
let s = x.to_lowercase();
|
||||
if let Some(help) = match s.as_str() {
|
||||
LangStringToken::LangToken(x) if let Some(extra) = extra => {
|
||||
if let Some(help) = match x.to_lowercase().as_str() {
|
||||
"compile-fail" | "compile_fail" | "compilefail" => Some(
|
||||
"use `compile_fail` to invert the results of this test, so that it \
|
||||
passes if it cannot be compiled and fails if it can",
|
||||
|
@ -1273,33 +1276,27 @@ impl LangString {
|
|||
"use `test_harness` to run functions marked `#[test]` instead of a \
|
||||
potentially-implicit `main` function",
|
||||
),
|
||||
"standalone" | "standalone_crate" | "standalone-crate" => {
|
||||
if let Some(extra) = extra
|
||||
&& extra.sp.at_least_rust_2024()
|
||||
{
|
||||
Some(
|
||||
"use `standalone_crate` to compile this code block \
|
||||
"standalone" | "standalone_crate" | "standalone-crate"
|
||||
if extra.sp.at_least_rust_2024() =>
|
||||
{
|
||||
Some(
|
||||
"use `standalone_crate` to compile this code block \
|
||||
separately",
|
||||
)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
)
|
||||
}
|
||||
_ => None,
|
||||
} {
|
||||
if let Some(extra) = extra {
|
||||
extra.error_invalid_codeblock_attr_with_help(
|
||||
format!("unknown attribute `{x}`"),
|
||||
|lint| {
|
||||
lint.help(help).help(
|
||||
"this code block may be skipped during testing, \
|
||||
extra.error_invalid_codeblock_attr_with_help(
|
||||
format!("unknown attribute `{x}`"),
|
||||
|lint| {
|
||||
lint.help(help).help(
|
||||
"this code block may be skipped during testing, \
|
||||
because unknown attributes are treated as markers for \
|
||||
code samples written in other programming languages, \
|
||||
unless it is also explicitly marked as `rust`",
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
seen_other_tags = true;
|
||||
data.unknown.push(x.to_owned());
|
||||
|
|
|
@ -4,7 +4,7 @@ version = "0.1.0"
|
|||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
jsonpath_lib = "0.3"
|
||||
jsonpath-rust = "1.0.0"
|
||||
getopts = "0.2"
|
||||
regex = "1.4"
|
||||
shlex = "1.0"
|
||||
|
|
|
@ -30,6 +30,6 @@ impl Cache {
|
|||
|
||||
// FIXME: Make this failible, so jsonpath syntax error has line number.
|
||||
pub fn select(&self, path: &str) -> Vec<&Value> {
|
||||
jsonpath_lib::select(&self.value, path).unwrap()
|
||||
jsonpath_rust::query::js_path_vals(path, &self.value).unwrap()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,32 +3,32 @@
|
|||
pub struct Simple;
|
||||
|
||||
impl Simple {
|
||||
//@ has "$.index[*][?(@.name=='CONSTANT')].inner.assoc_const"
|
||||
//@ has "$.index[?(@.name=='CONSTANT')].inner.assoc_const"
|
||||
pub const CONSTANT: usize = 0;
|
||||
}
|
||||
|
||||
pub trait EasyToImpl {
|
||||
//@ has "$.index[*][?(@.docs=='ToDeclare trait')].inner.assoc_type"
|
||||
//@ is "$.index[*][?(@.docs=='ToDeclare trait')].inner.assoc_type.type" null
|
||||
//@ is "$.index[*][?(@.docs=='ToDeclare trait')].inner.assoc_type.bounds" []
|
||||
//@ has "$.index[?(@.docs=='ToDeclare trait')].inner.assoc_type"
|
||||
//@ is "$.index[?(@.docs=='ToDeclare trait')].inner.assoc_type.type" null
|
||||
//@ is "$.index[?(@.docs=='ToDeclare trait')].inner.assoc_type.bounds" []
|
||||
/// ToDeclare trait
|
||||
type ToDeclare;
|
||||
//@ has "$.index[*][?(@.docs=='AN_ATTRIBUTE trait')].inner.assoc_const"
|
||||
//@ is "$.index[*][?(@.docs=='AN_ATTRIBUTE trait')].inner.assoc_const.value" null
|
||||
//@ is "$.index[*][?(@.docs=='AN_ATTRIBUTE trait')].inner.assoc_const.type.primitive" '"usize"'
|
||||
//@ has "$.index[?(@.docs=='AN_ATTRIBUTE trait')].inner.assoc_const"
|
||||
//@ is "$.index[?(@.docs=='AN_ATTRIBUTE trait')].inner.assoc_const.value" null
|
||||
//@ is "$.index[?(@.docs=='AN_ATTRIBUTE trait')].inner.assoc_const.type.primitive" '"usize"'
|
||||
/// AN_ATTRIBUTE trait
|
||||
const AN_ATTRIBUTE: usize;
|
||||
}
|
||||
|
||||
impl EasyToImpl for Simple {
|
||||
//@ has "$.index[*][?(@.docs=='ToDeclare impl')].inner.assoc_type"
|
||||
//@ is "$.index[*][?(@.docs=='ToDeclare impl')].inner.assoc_type.type.primitive" \"usize\"
|
||||
//@ has "$.index[?(@.docs=='ToDeclare impl')].inner.assoc_type"
|
||||
//@ is "$.index[?(@.docs=='ToDeclare impl')].inner.assoc_type.type.primitive" \"usize\"
|
||||
/// ToDeclare impl
|
||||
type ToDeclare = usize;
|
||||
|
||||
//@ has "$.index[*][?(@.docs=='AN_ATTRIBUTE impl')].inner.assoc_const"
|
||||
//@ is "$.index[*][?(@.docs=='AN_ATTRIBUTE impl')].inner.assoc_const.type.primitive" \"usize\"
|
||||
//@ is "$.index[*][?(@.docs=='AN_ATTRIBUTE impl')].inner.assoc_const.value" \"12\"
|
||||
//@ has "$.index[?(@.docs=='AN_ATTRIBUTE impl')].inner.assoc_const"
|
||||
//@ is "$.index[?(@.docs=='AN_ATTRIBUTE impl')].inner.assoc_const.type.primitive" \"usize\"
|
||||
//@ is "$.index[?(@.docs=='AN_ATTRIBUTE impl')].inner.assoc_const.value" \"12\"
|
||||
/// AN_ATTRIBUTE impl
|
||||
const AN_ATTRIBUTE: usize = 12;
|
||||
}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Regression test for <https://github.com/rust-lang/rust/issues/98547>.
|
||||
|
||||
//@ has "$.index[*][?(@.name=='Trait')]"
|
||||
//@ has "$.index[*][?(@.name=='AssocType')]"
|
||||
//@ has "$.index[*][?(@.name=='S')]"
|
||||
//@ has "$.index[*][?(@.name=='S2')]"
|
||||
//@ has "$.index[?(@.name=='Trait')]"
|
||||
//@ has "$.index[?(@.name=='AssocType')]"
|
||||
//@ has "$.index[?(@.name=='S')]"
|
||||
//@ has "$.index[?(@.name=='S2')]"
|
||||
|
||||
pub trait Trait {
|
||||
type AssocType;
|
||||
|
|
|
@ -1,38 +1,38 @@
|
|||
//@ is "$.index[*][?(@.name=='not')].attrs" []
|
||||
//@ is "$.index[*][?(@.name=='not')].deprecation" null
|
||||
//@ is "$.index[?(@.name=='not')].attrs" []
|
||||
//@ is "$.index[?(@.name=='not')].deprecation" null
|
||||
pub fn not() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='raw')].attrs" []
|
||||
//@ is "$.index[*][?(@.name=='raw')].deprecation" '{"since": null, "note": null}'
|
||||
//@ is "$.index[?(@.name=='raw')].attrs" []
|
||||
//@ is "$.index[?(@.name=='raw')].deprecation" '{"since": null, "note": null}'
|
||||
#[deprecated]
|
||||
pub fn raw() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='equals_string')].attrs" []
|
||||
//@ is "$.index[*][?(@.name=='equals_string')].deprecation" '{"since": null, "note": "here is a reason"}'
|
||||
//@ is "$.index[?(@.name=='equals_string')].attrs" []
|
||||
//@ is "$.index[?(@.name=='equals_string')].deprecation" '{"since": null, "note": "here is a reason"}'
|
||||
#[deprecated = "here is a reason"]
|
||||
pub fn equals_string() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='since')].attrs" []
|
||||
//@ is "$.index[*][?(@.name=='since')].deprecation" '{"since": "yoinks ago", "note": null}'
|
||||
//@ is "$.index[?(@.name=='since')].attrs" []
|
||||
//@ is "$.index[?(@.name=='since')].deprecation" '{"since": "yoinks ago", "note": null}'
|
||||
#[deprecated(since = "yoinks ago")]
|
||||
pub fn since() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='note')].attrs" []
|
||||
//@ is "$.index[*][?(@.name=='note')].deprecation" '{"since": null, "note": "7"}'
|
||||
//@ is "$.index[?(@.name=='note')].attrs" []
|
||||
//@ is "$.index[?(@.name=='note')].deprecation" '{"since": null, "note": "7"}'
|
||||
#[deprecated(note = "7")]
|
||||
pub fn note() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='since_and_note')].attrs" []
|
||||
//@ is "$.index[*][?(@.name=='since_and_note')].deprecation" '{"since": "tomorrow", "note": "sorry"}'
|
||||
//@ is "$.index[?(@.name=='since_and_note')].attrs" []
|
||||
//@ is "$.index[?(@.name=='since_and_note')].deprecation" '{"since": "tomorrow", "note": "sorry"}'
|
||||
#[deprecated(since = "tomorrow", note = "sorry")]
|
||||
pub fn since_and_note() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='note_and_since')].attrs" []
|
||||
//@ is "$.index[*][?(@.name=='note_and_since')].deprecation" '{"since": "a year from tomorrow", "note": "your welcome"}'
|
||||
//@ is "$.index[?(@.name=='note_and_since')].attrs" []
|
||||
//@ is "$.index[?(@.name=='note_and_since')].deprecation" '{"since": "a year from tomorrow", "note": "your welcome"}'
|
||||
#[deprecated(note = "your welcome", since = "a year from tomorrow")]
|
||||
pub fn note_and_since() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='neither_but_parens')].attrs" []
|
||||
//@ is "$.index[*][?(@.name=='neither_but_parens')].deprecation" '{"since": null, "note": null}'
|
||||
//@ is "$.index[?(@.name=='neither_but_parens')].attrs" []
|
||||
//@ is "$.index[?(@.name=='neither_but_parens')].deprecation" '{"since": null, "note": null}'
|
||||
#[deprecated()]
|
||||
pub fn neither_but_parens() {}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
//@ edition: 2021
|
||||
#![no_std]
|
||||
|
||||
//@ is "$.index[*][?(@.name=='example')].attrs" '["#[export_name = \"altered\"]"]'
|
||||
//@ is "$.index[?(@.name=='example')].attrs" '["#[export_name = \"altered\"]"]'
|
||||
#[export_name = "altered"]
|
||||
pub extern "C" fn example() {}
|
||||
|
|
|
@ -4,6 +4,6 @@
|
|||
// The representation of `#[unsafe(export_name = ..)]` in rustdoc in edition 2024
|
||||
// is still `#[export_name = ..]` without the `unsafe` attribute wrapper.
|
||||
|
||||
//@ is "$.index[*][?(@.name=='example')].attrs" '["#[export_name = \"altered\"]"]'
|
||||
//@ is "$.index[?(@.name=='example')].attrs" '["#[export_name = \"altered\"]"]'
|
||||
#[unsafe(export_name = "altered")]
|
||||
pub extern "C" fn example() {}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
#![no_std]
|
||||
|
||||
//@ is "$.index[*][?(@.name=='example')].attrs" '["#[must_use]"]'
|
||||
//@ is "$.index[?(@.name=='example')].attrs" '["#[must_use]"]'
|
||||
#[must_use]
|
||||
pub fn example() -> impl Iterator<Item = i64> {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='explicit_message')].attrs" '["#[must_use = \"does nothing if you do not use it\"]"]'
|
||||
//@ is "$.index[?(@.name=='explicit_message')].attrs" '["#[must_use = \"does nothing if you do not use it\"]"]'
|
||||
#[must_use = "does nothing if you do not use it"]
|
||||
pub fn explicit_message() -> impl Iterator<Item = i64> {}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
//@ edition: 2021
|
||||
#![no_std]
|
||||
|
||||
//@ is "$.index[*][?(@.name=='example')].attrs" '["#[no_mangle]"]'
|
||||
//@ is "$.index[?(@.name=='example')].attrs" '["#[no_mangle]"]'
|
||||
#[no_mangle]
|
||||
pub extern "C" fn example() {}
|
||||
|
|
|
@ -4,6 +4,6 @@
|
|||
// The representation of `#[unsafe(no_mangle)]` in rustdoc in edition 2024
|
||||
// is still `#[no_mangle]` without the `unsafe` attribute wrapper.
|
||||
|
||||
//@ is "$.index[*][?(@.name=='example')].attrs" '["#[no_mangle]"]'
|
||||
//@ is "$.index[?(@.name=='example')].attrs" '["#[no_mangle]"]'
|
||||
#[unsafe(no_mangle)]
|
||||
pub extern "C" fn example() {}
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
#![no_std]
|
||||
|
||||
//@ is "$.index[*][?(@.name=='MyEnum')].attrs" '["#[non_exhaustive]"]'
|
||||
//@ is "$.index[?(@.name=='MyEnum')].attrs" '["#[non_exhaustive]"]'
|
||||
#[non_exhaustive]
|
||||
pub enum MyEnum {
|
||||
First,
|
||||
}
|
||||
|
||||
pub enum NonExhaustiveVariant {
|
||||
//@ is "$.index[*][?(@.name=='Variant')].attrs" '["#[non_exhaustive]"]'
|
||||
//@ is "$.index[?(@.name=='Variant')].attrs" '["#[non_exhaustive]"]'
|
||||
#[non_exhaustive]
|
||||
Variant(i64),
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='MyStruct')].attrs" '["#[non_exhaustive]"]'
|
||||
//@ is "$.index[?(@.name=='MyStruct')].attrs" '["#[non_exhaustive]"]'
|
||||
#[non_exhaustive]
|
||||
pub struct MyStruct {
|
||||
pub x: i64,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#![no_std]
|
||||
|
||||
//@ is "$.index[*][?(@.name=='Aligned')].attrs" '["#[attr = Repr([ReprAlign(Align(4 bytes))])]\n"]'
|
||||
//@ is "$.index[?(@.name=='Aligned')].attrs" '["#[attr = Repr([ReprAlign(Align(4 bytes))])]\n"]'
|
||||
#[repr(align(4))]
|
||||
pub struct Aligned {
|
||||
a: i8,
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
#![no_std]
|
||||
|
||||
//@ is "$.index[*][?(@.name=='ReprCStruct')].attrs" '["#[attr = Repr([ReprC])]\n"]'
|
||||
//@ is "$.index[?(@.name=='ReprCStruct')].attrs" '["#[attr = Repr([ReprC])]\n"]'
|
||||
#[repr(C)]
|
||||
pub struct ReprCStruct(pub i64);
|
||||
|
||||
//@ is "$.index[*][?(@.name=='ReprCEnum')].attrs" '["#[attr = Repr([ReprC])]\n"]'
|
||||
//@ is "$.index[?(@.name=='ReprCEnum')].attrs" '["#[attr = Repr([ReprC])]\n"]'
|
||||
#[repr(C)]
|
||||
pub enum ReprCEnum {
|
||||
First,
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='ReprCUnion')].attrs" '["#[attr = Repr([ReprC])]\n"]'
|
||||
//@ is "$.index[?(@.name=='ReprCUnion')].attrs" '["#[attr = Repr([ReprC])]\n"]'
|
||||
#[repr(C)]
|
||||
pub union ReprCUnion {
|
||||
pub left: i64,
|
||||
|
|
|
@ -2,33 +2,33 @@
|
|||
|
||||
// Combinations of `#[repr(..)]` attributes.
|
||||
|
||||
//@ is "$.index[*][?(@.name=='ReprCI8')].attrs" '["#[attr = Repr([ReprC, ReprInt(SignedInt(I8))])]\n"]'
|
||||
//@ is "$.index[?(@.name=='ReprCI8')].attrs" '["#[attr = Repr([ReprC, ReprInt(SignedInt(I8))])]\n"]'
|
||||
#[repr(C, i8)]
|
||||
pub enum ReprCI8 {
|
||||
First,
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='SeparateReprCI16')].attrs" '["#[attr = Repr([ReprC, ReprInt(SignedInt(I16))])]\n"]'
|
||||
//@ is "$.index[?(@.name=='SeparateReprCI16')].attrs" '["#[attr = Repr([ReprC, ReprInt(SignedInt(I16))])]\n"]'
|
||||
#[repr(C)]
|
||||
#[repr(i16)]
|
||||
pub enum SeparateReprCI16 {
|
||||
First,
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='ReversedReprCUsize')].attrs" '["#[attr = Repr([ReprInt(UnsignedInt(Usize)), ReprC])]\n"]'
|
||||
//@ is "$.index[?(@.name=='ReversedReprCUsize')].attrs" '["#[attr = Repr([ReprInt(UnsignedInt(Usize)), ReprC])]\n"]'
|
||||
#[repr(usize, C)]
|
||||
pub enum ReversedReprCUsize {
|
||||
First,
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='ReprCPacked')].attrs" '["#[attr = Repr([ReprC, ReprPacked(Align(1 bytes))])]\n"]'
|
||||
//@ is "$.index[?(@.name=='ReprCPacked')].attrs" '["#[attr = Repr([ReprC, ReprPacked(Align(1 bytes))])]\n"]'
|
||||
#[repr(C, packed)]
|
||||
pub struct ReprCPacked {
|
||||
a: i8,
|
||||
b: i64,
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='SeparateReprCPacked')].attrs" '["#[attr = Repr([ReprC, ReprPacked(Align(2 bytes))])]\n"]'
|
||||
//@ is "$.index[?(@.name=='SeparateReprCPacked')].attrs" '["#[attr = Repr([ReprC, ReprPacked(Align(2 bytes))])]\n"]'
|
||||
#[repr(C)]
|
||||
#[repr(packed(2))]
|
||||
pub struct SeparateReprCPacked {
|
||||
|
@ -36,21 +36,21 @@ pub struct SeparateReprCPacked {
|
|||
b: i64,
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='ReversedReprCPacked')].attrs" '["#[attr = Repr([ReprPacked(Align(2 bytes)), ReprC])]\n"]'
|
||||
//@ is "$.index[?(@.name=='ReversedReprCPacked')].attrs" '["#[attr = Repr([ReprPacked(Align(2 bytes)), ReprC])]\n"]'
|
||||
#[repr(packed(2), C)]
|
||||
pub struct ReversedReprCPacked {
|
||||
a: i8,
|
||||
b: i64,
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='ReprCAlign')].attrs" '["#[attr = Repr([ReprC, ReprAlign(Align(16 bytes))])]\n"]'
|
||||
//@ is "$.index[?(@.name=='ReprCAlign')].attrs" '["#[attr = Repr([ReprC, ReprAlign(Align(16 bytes))])]\n"]'
|
||||
#[repr(C, align(16))]
|
||||
pub struct ReprCAlign {
|
||||
a: i8,
|
||||
b: i64,
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='SeparateReprCAlign')].attrs" '["#[attr = Repr([ReprC, ReprAlign(Align(2 bytes))])]\n"]'
|
||||
//@ is "$.index[?(@.name=='SeparateReprCAlign')].attrs" '["#[attr = Repr([ReprC, ReprAlign(Align(2 bytes))])]\n"]'
|
||||
#[repr(C)]
|
||||
#[repr(align(2))]
|
||||
pub struct SeparateReprCAlign {
|
||||
|
@ -58,20 +58,20 @@ pub struct SeparateReprCAlign {
|
|||
b: i64,
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='ReversedReprCAlign')].attrs" '["#[attr = Repr([ReprAlign(Align(2 bytes)), ReprC])]\n"]'
|
||||
//@ is "$.index[?(@.name=='ReversedReprCAlign')].attrs" '["#[attr = Repr([ReprAlign(Align(2 bytes)), ReprC])]\n"]'
|
||||
#[repr(align(2), C)]
|
||||
pub struct ReversedReprCAlign {
|
||||
a: i8,
|
||||
b: i64,
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='AlignedExplicitRepr')].attrs" '["#[attr = Repr([ReprC, ReprAlign(Align(16 bytes)), ReprInt(SignedInt(Isize))])]\n"]'
|
||||
//@ is "$.index[?(@.name=='AlignedExplicitRepr')].attrs" '["#[attr = Repr([ReprC, ReprAlign(Align(16 bytes)), ReprInt(SignedInt(Isize))])]\n"]'
|
||||
#[repr(C, align(16), isize)]
|
||||
pub enum AlignedExplicitRepr {
|
||||
First,
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='ReorderedAlignedExplicitRepr')].attrs" '["#[attr = Repr([ReprInt(SignedInt(Isize)), ReprC, ReprAlign(Align(16 bytes))])]\n"]'
|
||||
//@ is "$.index[?(@.name=='ReorderedAlignedExplicitRepr')].attrs" '["#[attr = Repr([ReprInt(SignedInt(Isize)), ReprC, ReprAlign(Align(16 bytes))])]\n"]'
|
||||
#[repr(isize, C, align(16))]
|
||||
pub enum ReorderedAlignedExplicitRepr {
|
||||
First,
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
#![no_std]
|
||||
|
||||
//@ is "$.index[*][?(@.name=='I8')].attrs" '["#[attr = Repr([ReprInt(SignedInt(I8))])]\n"]'
|
||||
//@ is "$.index[?(@.name=='I8')].attrs" '["#[attr = Repr([ReprInt(SignedInt(I8))])]\n"]'
|
||||
#[repr(i8)]
|
||||
pub enum I8 {
|
||||
First,
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='I32')].attrs" '["#[attr = Repr([ReprInt(SignedInt(I32))])]\n"]'
|
||||
//@ is "$.index[?(@.name=='I32')].attrs" '["#[attr = Repr([ReprInt(SignedInt(I32))])]\n"]'
|
||||
#[repr(i32)]
|
||||
pub enum I32 {
|
||||
First,
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='Usize')].attrs" '["#[attr = Repr([ReprInt(UnsignedInt(Usize))])]\n"]'
|
||||
//@ is "$.index[?(@.name=='Usize')].attrs" '["#[attr = Repr([ReprInt(UnsignedInt(Usize))])]\n"]'
|
||||
#[repr(usize)]
|
||||
pub enum Usize {
|
||||
First,
|
||||
|
|
|
@ -3,14 +3,14 @@
|
|||
// Note the normalization:
|
||||
// `#[repr(packed)]` in has the implict "1" in rustdoc JSON.
|
||||
|
||||
//@ is "$.index[*][?(@.name=='Packed')].attrs" '["#[attr = Repr([ReprPacked(Align(1 bytes))])]\n"]'
|
||||
//@ is "$.index[?(@.name=='Packed')].attrs" '["#[attr = Repr([ReprPacked(Align(1 bytes))])]\n"]'
|
||||
#[repr(packed)]
|
||||
pub struct Packed {
|
||||
a: i8,
|
||||
b: i64,
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='PackedAligned')].attrs" '["#[attr = Repr([ReprPacked(Align(4 bytes))])]\n"]'
|
||||
//@ is "$.index[?(@.name=='PackedAligned')].attrs" '["#[attr = Repr([ReprPacked(Align(4 bytes))])]\n"]'
|
||||
#[repr(packed(4))]
|
||||
pub struct PackedAligned {
|
||||
a: i8,
|
||||
|
|
|
@ -5,18 +5,18 @@
|
|||
//
|
||||
// https://doc.rust-lang.org/nomicon/other-reprs.html#reprtransparent
|
||||
|
||||
//@ is "$.index[*][?(@.name=='Transparent')].attrs" '["#[attr = Repr([ReprTransparent])]\n"]'
|
||||
//@ is "$.index[?(@.name=='Transparent')].attrs" '["#[attr = Repr([ReprTransparent])]\n"]'
|
||||
#[repr(transparent)]
|
||||
pub struct Transparent(pub i64);
|
||||
|
||||
//@ is "$.index[*][?(@.name=='TransparentNonPub')].attrs" '["#[attr = Repr([ReprTransparent])]\n"]'
|
||||
//@ is "$.index[?(@.name=='TransparentNonPub')].attrs" '["#[attr = Repr([ReprTransparent])]\n"]'
|
||||
#[repr(transparent)]
|
||||
pub struct TransparentNonPub(i64);
|
||||
|
||||
//@ is "$.index[*][?(@.name=='AllZst')].attrs" '["#[attr = Repr([ReprTransparent])]\n"]'
|
||||
//@ is "$.index[?(@.name=='AllZst')].attrs" '["#[attr = Repr([ReprTransparent])]\n"]'
|
||||
#[repr(transparent)]
|
||||
pub struct AllZst<'a>(pub core::marker::PhantomData<&'a ()>, ());
|
||||
|
||||
//@ is "$.index[*][?(@.name=='AllZstNotPublic')].attrs" '["#[attr = Repr([ReprTransparent])]\n"]'
|
||||
//@ is "$.index[?(@.name=='AllZstNotPublic')].attrs" '["#[attr = Repr([ReprTransparent])]\n"]'
|
||||
#[repr(transparent)]
|
||||
pub struct AllZstNotPublic<'a>(core::marker::PhantomData<&'a ()>, ());
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
#![no_std]
|
||||
|
||||
//@ has "$.index[*][?(@.name=='Error')].inner.assoc_type"
|
||||
//@ has "$.index[*][?(@.name=='Error')].inner.assoc_type.type.resolved_path"
|
||||
//@ has "$.index[*][?(@.name=='Error')].inner.assoc_type.type.resolved_path.path" \"Infallible\"
|
||||
//@ has "$.index[?(@.name=='Error')].inner.assoc_type"
|
||||
//@ has "$.index[?(@.name=='Error')].inner.assoc_type.type.resolved_path"
|
||||
//@ has "$.index[?(@.name=='Error')].inner.assoc_type.type.resolved_path.path" \"Infallible\"
|
||||
pub struct ForBlanketTryFromImpl;
|
||||
|
|
|
@ -11,8 +11,8 @@ mod auto {
|
|||
}
|
||||
}
|
||||
|
||||
//@ count "$.index[*][?(@.name=='builders')]" 1
|
||||
//@ has "$.index[*][?(@.name == 'ActionRowBuilder')"]
|
||||
//@ count "$.index[?(@.name=='builders')]" 1
|
||||
//@ has "$.index[?(@.name == 'ActionRowBuilder')"]
|
||||
pub use auto::*;
|
||||
|
||||
pub mod builders {
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
#[repr(i8)]
|
||||
pub enum Ordering {
|
||||
//@ is "$.index[*][?(@.name=='Less')].inner.variant.discriminant.expr" '"-1"'
|
||||
//@ is "$.index[*][?(@.name=='Less')].inner.variant.discriminant.value" '"-1"'
|
||||
//@ is "$.index[?(@.name=='Less')].inner.variant.discriminant.expr" '"-1"'
|
||||
//@ is "$.index[?(@.name=='Less')].inner.variant.discriminant.value" '"-1"'
|
||||
Less = -1,
|
||||
//@ is "$.index[*][?(@.name=='Equal')].inner.variant.discriminant.expr" '"0"'
|
||||
//@ is "$.index[*][?(@.name=='Equal')].inner.variant.discriminant.value" '"0"'
|
||||
//@ is "$.index[?(@.name=='Equal')].inner.variant.discriminant.expr" '"0"'
|
||||
//@ is "$.index[?(@.name=='Equal')].inner.variant.discriminant.value" '"0"'
|
||||
Equal = 0,
|
||||
//@ is "$.index[*][?(@.name=='Greater')].inner.variant.discriminant.expr" '"1"'
|
||||
//@ is "$.index[*][?(@.name=='Greater')].inner.variant.discriminant.value" '"1"'
|
||||
//@ is "$.index[?(@.name=='Greater')].inner.variant.discriminant.expr" '"1"'
|
||||
//@ is "$.index[?(@.name=='Greater')].inner.variant.discriminant.value" '"1"'
|
||||
Greater = 1,
|
||||
}
|
||||
|
|
|
@ -1,30 +1,30 @@
|
|||
pub enum Foo {
|
||||
//@ is "$.index[*][?(@.name=='Addition')].inner.variant.discriminant.value" '"0"'
|
||||
//@ is "$.index[*][?(@.name=='Addition')].inner.variant.discriminant.expr" '"{ _ }"'
|
||||
//@ is "$.index[?(@.name=='Addition')].inner.variant.discriminant.value" '"0"'
|
||||
//@ is "$.index[?(@.name=='Addition')].inner.variant.discriminant.expr" '"{ _ }"'
|
||||
Addition = 0 + 0,
|
||||
//@ is "$.index[*][?(@.name=='Bin')].inner.variant.discriminant.value" '"1"'
|
||||
//@ is "$.index[*][?(@.name=='Bin')].inner.variant.discriminant.expr" '"0b1"'
|
||||
//@ is "$.index[?(@.name=='Bin')].inner.variant.discriminant.value" '"1"'
|
||||
//@ is "$.index[?(@.name=='Bin')].inner.variant.discriminant.expr" '"0b1"'
|
||||
Bin = 0b1,
|
||||
//@ is "$.index[*][?(@.name=='Oct')].inner.variant.discriminant.value" '"2"'
|
||||
//@ is "$.index[*][?(@.name=='Oct')].inner.variant.discriminant.expr" '"0o2"'
|
||||
//@ is "$.index[?(@.name=='Oct')].inner.variant.discriminant.value" '"2"'
|
||||
//@ is "$.index[?(@.name=='Oct')].inner.variant.discriminant.expr" '"0o2"'
|
||||
Oct = 0o2,
|
||||
//@ is "$.index[*][?(@.name=='PubConst')].inner.variant.discriminant.value" '"3"'
|
||||
//@ is "$.index[*][?(@.name=='PubConst')].inner.variant.discriminant.expr" '"THREE"'
|
||||
//@ is "$.index[?(@.name=='PubConst')].inner.variant.discriminant.value" '"3"'
|
||||
//@ is "$.index[?(@.name=='PubConst')].inner.variant.discriminant.expr" '"THREE"'
|
||||
PubConst = THREE,
|
||||
//@ is "$.index[*][?(@.name=='Hex')].inner.variant.discriminant.value" '"4"'
|
||||
//@ is "$.index[*][?(@.name=='Hex')].inner.variant.discriminant.expr" '"0x4"'
|
||||
//@ is "$.index[?(@.name=='Hex')].inner.variant.discriminant.value" '"4"'
|
||||
//@ is "$.index[?(@.name=='Hex')].inner.variant.discriminant.expr" '"0x4"'
|
||||
Hex = 0x4,
|
||||
//@ is "$.index[*][?(@.name=='Cast')].inner.variant.discriminant.value" '"5"'
|
||||
//@ is "$.index[*][?(@.name=='Cast')].inner.variant.discriminant.expr" '"{ _ }"'
|
||||
//@ is "$.index[?(@.name=='Cast')].inner.variant.discriminant.value" '"5"'
|
||||
//@ is "$.index[?(@.name=='Cast')].inner.variant.discriminant.expr" '"{ _ }"'
|
||||
Cast = 5 as isize,
|
||||
//@ is "$.index[*][?(@.name=='PubCall')].inner.variant.discriminant.value" '"6"'
|
||||
//@ is "$.index[*][?(@.name=='PubCall')].inner.variant.discriminant.expr" '"{ _ }"'
|
||||
//@ is "$.index[?(@.name=='PubCall')].inner.variant.discriminant.value" '"6"'
|
||||
//@ is "$.index[?(@.name=='PubCall')].inner.variant.discriminant.expr" '"{ _ }"'
|
||||
PubCall = six(),
|
||||
//@ is "$.index[*][?(@.name=='PrivCall')].inner.variant.discriminant.value" '"7"'
|
||||
//@ is "$.index[*][?(@.name=='PrivCall')].inner.variant.discriminant.expr" '"{ _ }"'
|
||||
//@ is "$.index[?(@.name=='PrivCall')].inner.variant.discriminant.value" '"7"'
|
||||
//@ is "$.index[?(@.name=='PrivCall')].inner.variant.discriminant.expr" '"{ _ }"'
|
||||
PrivCall = seven(),
|
||||
//@ is "$.index[*][?(@.name=='PrivConst')].inner.variant.discriminant.value" '"8"'
|
||||
//@ is "$.index[*][?(@.name=='PrivConst')].inner.variant.discriminant.expr" '"EIGHT"'
|
||||
//@ is "$.index[?(@.name=='PrivConst')].inner.variant.discriminant.value" '"8"'
|
||||
//@ is "$.index[?(@.name=='PrivConst')].inner.variant.discriminant.expr" '"EIGHT"'
|
||||
PrivConst = EIGHT,
|
||||
}
|
||||
|
||||
|
|
|
@ -3,40 +3,40 @@
|
|||
|
||||
#[repr(u64)]
|
||||
pub enum U64 {
|
||||
//@ is "$.index[*][?(@.name=='U64Min')].inner.variant.discriminant.value" '"0"'
|
||||
//@ is "$.index[*][?(@.name=='U64Min')].inner.variant.discriminant.expr" '"u64::MIN"'
|
||||
//@ is "$.index[?(@.name=='U64Min')].inner.variant.discriminant.value" '"0"'
|
||||
//@ is "$.index[?(@.name=='U64Min')].inner.variant.discriminant.expr" '"u64::MIN"'
|
||||
U64Min = u64::MIN,
|
||||
//@ is "$.index[*][?(@.name=='U64Max')].inner.variant.discriminant.value" '"18446744073709551615"'
|
||||
//@ is "$.index[*][?(@.name=='U64Max')].inner.variant.discriminant.expr" '"u64::MAX"'
|
||||
//@ is "$.index[?(@.name=='U64Max')].inner.variant.discriminant.value" '"18446744073709551615"'
|
||||
//@ is "$.index[?(@.name=='U64Max')].inner.variant.discriminant.expr" '"u64::MAX"'
|
||||
U64Max = u64::MAX,
|
||||
}
|
||||
|
||||
#[repr(i64)]
|
||||
pub enum I64 {
|
||||
//@ is "$.index[*][?(@.name=='I64Min')].inner.variant.discriminant.value" '"-9223372036854775808"'
|
||||
//@ is "$.index[*][?(@.name=='I64Min')].inner.variant.discriminant.expr" '"i64::MIN"'
|
||||
//@ is "$.index[?(@.name=='I64Min')].inner.variant.discriminant.value" '"-9223372036854775808"'
|
||||
//@ is "$.index[?(@.name=='I64Min')].inner.variant.discriminant.expr" '"i64::MIN"'
|
||||
I64Min = i64::MIN,
|
||||
//@ is "$.index[*][?(@.name=='I64Max')].inner.variant.discriminant.value" '"9223372036854775807"'
|
||||
//@ is "$.index[*][?(@.name=='I64Max')].inner.variant.discriminant.expr" '"i64::MAX"'
|
||||
//@ is "$.index[?(@.name=='I64Max')].inner.variant.discriminant.value" '"9223372036854775807"'
|
||||
//@ is "$.index[?(@.name=='I64Max')].inner.variant.discriminant.expr" '"i64::MAX"'
|
||||
I64Max = i64::MAX,
|
||||
}
|
||||
|
||||
#[repr(u128)]
|
||||
pub enum U128 {
|
||||
//@ is "$.index[*][?(@.name=='U128Min')].inner.variant.discriminant.value" '"0"'
|
||||
//@ is "$.index[*][?(@.name=='U128Min')].inner.variant.discriminant.expr" '"u128::MIN"'
|
||||
//@ is "$.index[?(@.name=='U128Min')].inner.variant.discriminant.value" '"0"'
|
||||
//@ is "$.index[?(@.name=='U128Min')].inner.variant.discriminant.expr" '"u128::MIN"'
|
||||
U128Min = u128::MIN,
|
||||
//@ is "$.index[*][?(@.name=='U128Max')].inner.variant.discriminant.value" '"340282366920938463463374607431768211455"'
|
||||
//@ is "$.index[*][?(@.name=='U128Max')].inner.variant.discriminant.expr" '"u128::MAX"'
|
||||
//@ is "$.index[?(@.name=='U128Max')].inner.variant.discriminant.value" '"340282366920938463463374607431768211455"'
|
||||
//@ is "$.index[?(@.name=='U128Max')].inner.variant.discriminant.expr" '"u128::MAX"'
|
||||
U128Max = u128::MAX,
|
||||
}
|
||||
|
||||
#[repr(i128)]
|
||||
pub enum I128 {
|
||||
//@ is "$.index[*][?(@.name=='I128Min')].inner.variant.discriminant.value" '"-170141183460469231731687303715884105728"'
|
||||
//@ is "$.index[*][?(@.name=='I128Min')].inner.variant.discriminant.expr" '"i128::MIN"'
|
||||
//@ is "$.index[?(@.name=='I128Min')].inner.variant.discriminant.value" '"-170141183460469231731687303715884105728"'
|
||||
//@ is "$.index[?(@.name=='I128Min')].inner.variant.discriminant.expr" '"i128::MIN"'
|
||||
I128Min = i128::MIN,
|
||||
//@ is "$.index[*][?(@.name=='I128Max')].inner.variant.discriminant.value" '"170141183460469231731687303715884105727"'
|
||||
//@ is "$.index[*][?(@.name=='I128Max')].inner.variant.discriminant.expr" '"i128::MAX"'
|
||||
//@ is "$.index[?(@.name=='I128Max')].inner.variant.discriminant.value" '"170141183460469231731687303715884105727"'
|
||||
//@ is "$.index[?(@.name=='I128Max')].inner.variant.discriminant.expr" '"i128::MAX"'
|
||||
I128Max = i128::MAX,
|
||||
}
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
#[repr(u32)]
|
||||
pub enum Foo {
|
||||
//@ is "$.index[*][?(@.name=='Basic')].inner.variant.discriminant.value" '"0"'
|
||||
//@ is "$.index[*][?(@.name=='Basic')].inner.variant.discriminant.expr" '"0"'
|
||||
//@ is "$.index[?(@.name=='Basic')].inner.variant.discriminant.value" '"0"'
|
||||
//@ is "$.index[?(@.name=='Basic')].inner.variant.discriminant.expr" '"0"'
|
||||
Basic = 0,
|
||||
//@ is "$.index[*][?(@.name=='Suffix')].inner.variant.discriminant.value" '"10"'
|
||||
//@ is "$.index[*][?(@.name=='Suffix')].inner.variant.discriminant.expr" '"10u32"'
|
||||
//@ is "$.index[?(@.name=='Suffix')].inner.variant.discriminant.value" '"10"'
|
||||
//@ is "$.index[?(@.name=='Suffix')].inner.variant.discriminant.expr" '"10u32"'
|
||||
Suffix = 10u32,
|
||||
//@ is "$.index[*][?(@.name=='Underscore')].inner.variant.discriminant.value" '"100"'
|
||||
//@ is "$.index[*][?(@.name=='Underscore')].inner.variant.discriminant.expr" '"1_0_0"'
|
||||
//@ is "$.index[?(@.name=='Underscore')].inner.variant.discriminant.value" '"100"'
|
||||
//@ is "$.index[?(@.name=='Underscore')].inner.variant.discriminant.expr" '"1_0_0"'
|
||||
Underscore = 1_0_0,
|
||||
//@ is "$.index[*][?(@.name=='SuffixUnderscore')].inner.variant.discriminant.value" '"1000"'
|
||||
//@ is "$.index[*][?(@.name=='SuffixUnderscore')].inner.variant.discriminant.expr" '"1_0_0_0u32"'
|
||||
//@ is "$.index[?(@.name=='SuffixUnderscore')].inner.variant.discriminant.value" '"1000"'
|
||||
//@ is "$.index[?(@.name=='SuffixUnderscore')].inner.variant.discriminant.expr" '"1_0_0_0u32"'
|
||||
SuffixUnderscore = 1_0_0_0u32,
|
||||
}
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
pub enum Foo {
|
||||
//@ is "$.index[*][?(@.name=='Has')].inner.variant.discriminant" '{"expr":"0", "value":"0"}'
|
||||
//@ is "$.index[?(@.name=='Has')].inner.variant.discriminant" '{"expr":"0", "value":"0"}'
|
||||
Has = 0,
|
||||
//@ is "$.index[*][?(@.name=='Doesnt')].inner.variant.discriminant" null
|
||||
//@ is "$.index[?(@.name=='Doesnt')].inner.variant.discriminant" null
|
||||
Doesnt,
|
||||
//@ is "$.index[*][?(@.name=='AlsoDoesnt')].inner.variant.discriminant" null
|
||||
//@ is "$.index[?(@.name=='AlsoDoesnt')].inner.variant.discriminant" null
|
||||
AlsoDoesnt,
|
||||
//@ is "$.index[*][?(@.name=='AlsoHas')].inner.variant.discriminant" '{"expr":"44", "value":"44"}'
|
||||
//@ is "$.index[?(@.name=='AlsoHas')].inner.variant.discriminant" '{"expr":"44", "value":"44"}'
|
||||
AlsoHas = 44,
|
||||
}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
#[repr(i32)]
|
||||
//@ is "$.index[*][?(@.name=='Foo')].attrs" '["#[attr = Repr([ReprInt(SignedInt(I32))])]\n"]'
|
||||
//@ is "$.index[?(@.name=='Foo')].attrs" '["#[attr = Repr([ReprInt(SignedInt(I32))])]\n"]'
|
||||
pub enum Foo {
|
||||
//@ is "$.index[*][?(@.name=='Struct')].inner.variant.discriminant" null
|
||||
//@ count "$.index[*][?(@.name=='Struct')].inner.variant.kind.struct.fields[*]" 0
|
||||
//@ is "$.index[?(@.name=='Struct')].inner.variant.discriminant" null
|
||||
//@ count "$.index[?(@.name=='Struct')].inner.variant.kind.struct.fields[*]" 0
|
||||
Struct {},
|
||||
//@ is "$.index[*][?(@.name=='StructWithDiscr')].inner.variant.discriminant" '{"expr": "42", "value": "42"}'
|
||||
//@ count "$.index[*][?(@.name=='StructWithDiscr')].inner.variant.kind.struct.fields[*]" 1
|
||||
//@ is "$.index[?(@.name=='StructWithDiscr')].inner.variant.discriminant" '{"expr": "42", "value": "42"}'
|
||||
//@ count "$.index[?(@.name=='StructWithDiscr')].inner.variant.kind.struct.fields[*]" 1
|
||||
StructWithDiscr { x: i32 } = 42,
|
||||
//@ is "$.index[*][?(@.name=='StructWithHexDiscr')].inner.variant.discriminant" '{"expr": "0x42", "value": "66"}'
|
||||
//@ count "$.index[*][?(@.name=='StructWithHexDiscr')].inner.variant.kind.struct.fields[*]" 2
|
||||
//@ is "$.index[?(@.name=='StructWithHexDiscr')].inner.variant.discriminant" '{"expr": "0x42", "value": "66"}'
|
||||
//@ count "$.index[?(@.name=='StructWithHexDiscr')].inner.variant.kind.struct.fields[*]" 2
|
||||
StructWithHexDiscr { x: i32, y: bool } = 0x42,
|
||||
}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
#[repr(u32)]
|
||||
//@ is "$.index[*][?(@.name=='Foo')].attrs" '["#[attr = Repr([ReprInt(UnsignedInt(U32))])]\n"]'
|
||||
//@ is "$.index[?(@.name=='Foo')].attrs" '["#[attr = Repr([ReprInt(UnsignedInt(U32))])]\n"]'
|
||||
pub enum Foo {
|
||||
//@ is "$.index[*][?(@.name=='Tuple')].inner.variant.discriminant" null
|
||||
//@ count "$.index[*][?(@.name=='Tuple')].inner.variant.kind.tuple[*]" 0
|
||||
//@ is "$.index[?(@.name=='Tuple')].inner.variant.discriminant" null
|
||||
//@ count "$.index[?(@.name=='Tuple')].inner.variant.kind.tuple[*]" 0
|
||||
Tuple(),
|
||||
//@ is "$.index[*][?(@.name=='TupleWithDiscr')].inner.variant.discriminant" '{"expr": "1", "value": "1"}'
|
||||
//@ count "$.index[*][?(@.name=='TupleWithDiscr')].inner.variant.kind.tuple[*]" 1
|
||||
//@ is "$.index[?(@.name=='TupleWithDiscr')].inner.variant.discriminant" '{"expr": "1", "value": "1"}'
|
||||
//@ count "$.index[?(@.name=='TupleWithDiscr')].inner.variant.kind.tuple[*]" 1
|
||||
TupleWithDiscr(i32) = 1,
|
||||
//@ is "$.index[*][?(@.name=='TupleWithBinDiscr')].inner.variant.discriminant" '{"expr": "0b10", "value": "2"}'
|
||||
//@ count "$.index[*][?(@.name=='TupleWithBinDiscr')].inner.variant.kind.tuple[*]" 2
|
||||
//@ is "$.index[?(@.name=='TupleWithBinDiscr')].inner.variant.discriminant" '{"expr": "0b10", "value": "2"}'
|
||||
//@ count "$.index[?(@.name=='TupleWithBinDiscr')].inner.variant.kind.tuple[*]" 2
|
||||
TupleWithBinDiscr(i32, i32) = 0b10,
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
extern crate color;
|
||||
use color::Color::Red;
|
||||
|
||||
//@ set red = "$.index[*][?(@.inner.module.is_crate)].links.Red"
|
||||
//@ set red = "$.index[?(@.inner.module.is_crate)].links.Red"
|
||||
|
||||
//@ !has "$.index[*][?(@.name == 'Red')]"
|
||||
//@ !has "$.index[*][?(@.name == 'Color')]"
|
||||
//@ !has "$.index[?(@.name == 'Red')]"
|
||||
//@ !has "$.index[?(@.name == 'Color')]"
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Regression test for <https://github.com/rust-lang/rust/issues/100529>.
|
||||
|
||||
//@ has "$.index[*][?(@.name=='ParseError')]"
|
||||
//@ has "$.index[*][?(@.name=='UnexpectedEndTag')]"
|
||||
//@ is "$.index[*][?(@.name=='UnexpectedEndTag')].inner.variant.kind.tuple" [null]
|
||||
//@ is "$.index[*][?(@.name=='UnexpectedEndTag')].inner.variant.discriminant" null
|
||||
//@ has "$.index[?(@.name=='ParseError')]"
|
||||
//@ has "$.index[?(@.name=='UnexpectedEndTag')]"
|
||||
//@ is "$.index[?(@.name=='UnexpectedEndTag')].inner.variant.kind.tuple" [null]
|
||||
//@ is "$.index[?(@.name=='UnexpectedEndTag')].inner.variant.discriminant" null
|
||||
|
||||
pub enum ParseError {
|
||||
UnexpectedEndTag(#[doc(hidden)] u32),
|
||||
|
|
|
@ -17,24 +17,24 @@ pub enum Whatever {
|
|||
},
|
||||
}
|
||||
|
||||
//@ set 0 = '$.index[*][?(@.name == "ews_0")].id'
|
||||
//@ set 1 = '$.index[*][?(@.name == "dik_1")].id'
|
||||
//@ set 2 = '$.index[*][?(@.name == "hsk_2")].id'
|
||||
//@ set 3 = '$.index[*][?(@.name == "djt_3")].id'
|
||||
//@ set 4 = '$.index[*][?(@.name == "jnr_4")].id'
|
||||
//@ set 5 = '$.index[*][?(@.name == "dfs_5")].id'
|
||||
//@ set 6 = '$.index[*][?(@.name == "bja_6")].id'
|
||||
//@ set 7 = '$.index[*][?(@.name == "lyc_7")].id'
|
||||
//@ set 8 = '$.index[*][?(@.name == "yqd_8")].id'
|
||||
//@ set 9 = '$.index[*][?(@.name == "vll_9")].id'
|
||||
//@ set 0 = '$.index[?(@.name == "ews_0")].id'
|
||||
//@ set 1 = '$.index[?(@.name == "dik_1")].id'
|
||||
//@ set 2 = '$.index[?(@.name == "hsk_2")].id'
|
||||
//@ set 3 = '$.index[?(@.name == "djt_3")].id'
|
||||
//@ set 4 = '$.index[?(@.name == "jnr_4")].id'
|
||||
//@ set 5 = '$.index[?(@.name == "dfs_5")].id'
|
||||
//@ set 6 = '$.index[?(@.name == "bja_6")].id'
|
||||
//@ set 7 = '$.index[?(@.name == "lyc_7")].id'
|
||||
//@ set 8 = '$.index[?(@.name == "yqd_8")].id'
|
||||
//@ set 9 = '$.index[?(@.name == "vll_9")].id'
|
||||
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.variant.kind.struct.fields[0]' $0
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.variant.kind.struct.fields[1]' $1
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.variant.kind.struct.fields[2]' $2
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.variant.kind.struct.fields[3]' $3
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.variant.kind.struct.fields[4]' $4
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.variant.kind.struct.fields[5]' $5
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.variant.kind.struct.fields[6]' $6
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.variant.kind.struct.fields[7]' $7
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.variant.kind.struct.fields[8]' $8
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.variant.kind.struct.fields[9]' $9
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.variant.kind.struct.fields[0]' $0
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.variant.kind.struct.fields[1]' $1
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.variant.kind.struct.fields[2]' $2
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.variant.kind.struct.fields[3]' $3
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.variant.kind.struct.fields[4]' $4
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.variant.kind.struct.fields[5]' $5
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.variant.kind.struct.fields[6]' $6
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.variant.kind.struct.fields[7]' $7
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.variant.kind.struct.fields[8]' $8
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.variant.kind.struct.fields[9]' $9
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
pub enum Foo {
|
||||
//@ set Unit = "$.index[*][?(@.name=='Unit')].id"
|
||||
//@ is "$.index[*][?(@.name=='Unit')].inner.variant.kind" '"plain"'
|
||||
//@ set Unit = "$.index[?(@.name=='Unit')].id"
|
||||
//@ is "$.index[?(@.name=='Unit')].inner.variant.kind" '"plain"'
|
||||
Unit,
|
||||
//@ set Named = "$.index[*][?(@.name=='Named')].id"
|
||||
//@ is "$.index[*][?(@.name=='Named')].inner.variant.kind.struct" '{"fields": [], "has_stripped_fields": false}'
|
||||
//@ set Named = "$.index[?(@.name=='Named')].id"
|
||||
//@ is "$.index[?(@.name=='Named')].inner.variant.kind.struct" '{"fields": [], "has_stripped_fields": false}'
|
||||
Named {},
|
||||
//@ set Tuple = "$.index[*][?(@.name=='Tuple')].id"
|
||||
//@ is "$.index[*][?(@.name=='Tuple')].inner.variant.kind.tuple" []
|
||||
//@ set Tuple = "$.index[?(@.name=='Tuple')].id"
|
||||
//@ is "$.index[?(@.name=='Tuple')].inner.variant.kind.tuple" []
|
||||
Tuple(),
|
||||
//@ set NamedField = "$.index[*][?(@.name=='NamedField')].id"
|
||||
//@ set x = "$.index[*][?(@.name=='x' && @.inner.struct_field)].id"
|
||||
//@ is "$.index[*][?(@.name=='NamedField')].inner.variant.kind.struct.fields[*]" $x
|
||||
//@ is "$.index[*][?(@.name=='NamedField')].inner.variant.kind.struct.has_stripped_fields" false
|
||||
//@ set NamedField = "$.index[?(@.name=='NamedField')].id"
|
||||
//@ set x = "$.index[?(@.name=='x' && @.inner.struct_field)].id"
|
||||
//@ is "$.index[?(@.name=='NamedField')].inner.variant.kind.struct.fields[*]" $x
|
||||
//@ is "$.index[?(@.name=='NamedField')].inner.variant.kind.struct.has_stripped_fields" false
|
||||
NamedField { x: i32 },
|
||||
//@ set TupleField = "$.index[*][?(@.name=='TupleField')].id"
|
||||
//@ set tup_field = "$.index[*][?(@.name=='0' && @.inner.struct_field)].id"
|
||||
//@ is "$.index[*][?(@.name=='TupleField')].inner.variant.kind.tuple[*]" $tup_field
|
||||
//@ set TupleField = "$.index[?(@.name=='TupleField')].id"
|
||||
//@ set tup_field = "$.index[?(@.name=='0' && @.inner.struct_field)].id"
|
||||
//@ is "$.index[?(@.name=='TupleField')].inner.variant.kind.tuple[*]" $tup_field
|
||||
TupleField(i32),
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='Foo')].inner.enum.variants[0]" $Unit
|
||||
//@ is "$.index[*][?(@.name=='Foo')].inner.enum.variants[1]" $Named
|
||||
//@ is "$.index[*][?(@.name=='Foo')].inner.enum.variants[2]" $Tuple
|
||||
//@ is "$.index[*][?(@.name=='Foo')].inner.enum.variants[3]" $NamedField
|
||||
//@ is "$.index[*][?(@.name=='Foo')].inner.enum.variants[4]" $TupleField
|
||||
//@ count "$.index[*][?(@.name=='Foo')].inner.enum.variants[*]" 5
|
||||
//@ is "$.index[?(@.name=='Foo')].inner.enum.variants[0]" $Unit
|
||||
//@ is "$.index[?(@.name=='Foo')].inner.enum.variants[1]" $Named
|
||||
//@ is "$.index[?(@.name=='Foo')].inner.enum.variants[2]" $Tuple
|
||||
//@ is "$.index[?(@.name=='Foo')].inner.enum.variants[3]" $NamedField
|
||||
//@ is "$.index[?(@.name=='Foo')].inner.enum.variants[4]" $TupleField
|
||||
//@ count "$.index[?(@.name=='Foo')].inner.enum.variants[*]" 5
|
||||
|
|
|
@ -2,15 +2,15 @@ pub enum Foo {
|
|||
Variant {
|
||||
#[doc(hidden)]
|
||||
a: i32,
|
||||
//@ set b = "$.index[*][?(@.name=='b')].id"
|
||||
//@ set b = "$.index[?(@.name=='b')].id"
|
||||
b: i32,
|
||||
#[doc(hidden)]
|
||||
x: i32,
|
||||
//@ set y = "$.index[*][?(@.name=='y')].id"
|
||||
//@ set y = "$.index[?(@.name=='y')].id"
|
||||
y: i32,
|
||||
},
|
||||
//@ is "$.index[*][?(@.name=='Variant')].inner.variant.kind.struct.has_stripped_fields" true
|
||||
//@ is "$.index[*][?(@.name=='Variant')].inner.variant.kind.struct.fields[0]" $b
|
||||
//@ is "$.index[*][?(@.name=='Variant')].inner.variant.kind.struct.fields[1]" $y
|
||||
//@ count "$.index[*][?(@.name=='Variant')].inner.variant.kind.struct.fields[*]" 2
|
||||
//@ is "$.index[?(@.name=='Variant')].inner.variant.kind.struct.has_stripped_fields" true
|
||||
//@ is "$.index[?(@.name=='Variant')].inner.variant.kind.struct.fields[0]" $b
|
||||
//@ is "$.index[?(@.name=='Variant')].inner.variant.kind.struct.fields[1]" $y
|
||||
//@ count "$.index[?(@.name=='Variant')].inner.variant.kind.struct.fields[*]" 2
|
||||
}
|
||||
|
|
|
@ -1,80 +1,80 @@
|
|||
//@ set 1.1.0 = "$.index[*][?(@.docs=='1.1.0')].id"
|
||||
//@ set 2.1.0 = "$.index[*][?(@.docs=='2.1.0')].id"
|
||||
//@ set 2.1.1 = "$.index[*][?(@.docs=='2.1.1')].id"
|
||||
//@ set 2.2.1 = "$.index[*][?(@.docs=='2.2.1')].id"
|
||||
//@ set 2.3.0 = "$.index[*][?(@.docs=='2.3.0')].id"
|
||||
//@ set 3.1.1 = "$.index[*][?(@.docs=='3.1.1')].id"
|
||||
//@ set 3.1.2 = "$.index[*][?(@.docs=='3.1.2')].id"
|
||||
//@ set 3.2.0 = "$.index[*][?(@.docs=='3.2.0')].id"
|
||||
//@ set 3.2.2 = "$.index[*][?(@.docs=='3.2.2')].id"
|
||||
//@ set 3.3.0 = "$.index[*][?(@.docs=='3.3.0')].id"
|
||||
//@ set 3.3.1 = "$.index[*][?(@.docs=='3.3.1')].id"
|
||||
//@ set 1.1.0 = "$.index[?(@.docs=='1.1.0')].id"
|
||||
//@ set 2.1.0 = "$.index[?(@.docs=='2.1.0')].id"
|
||||
//@ set 2.1.1 = "$.index[?(@.docs=='2.1.1')].id"
|
||||
//@ set 2.2.1 = "$.index[?(@.docs=='2.2.1')].id"
|
||||
//@ set 2.3.0 = "$.index[?(@.docs=='2.3.0')].id"
|
||||
//@ set 3.1.1 = "$.index[?(@.docs=='3.1.1')].id"
|
||||
//@ set 3.1.2 = "$.index[?(@.docs=='3.1.2')].id"
|
||||
//@ set 3.2.0 = "$.index[?(@.docs=='3.2.0')].id"
|
||||
//@ set 3.2.2 = "$.index[?(@.docs=='3.2.2')].id"
|
||||
//@ set 3.3.0 = "$.index[?(@.docs=='3.3.0')].id"
|
||||
//@ set 3.3.1 = "$.index[?(@.docs=='3.3.1')].id"
|
||||
|
||||
pub enum EnumWithStrippedTupleVariants {
|
||||
//@ count "$.index[*][?(@.name=='None')].inner.variant.kind.tuple[*]" 0
|
||||
//@ count "$.index[?(@.name=='None')].inner.variant.kind.tuple[*]" 0
|
||||
None(),
|
||||
|
||||
//@ count "$.index[*][?(@.name=='One')].inner.variant.kind.tuple[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='One')].inner.variant.kind.tuple[0]" $1.1.0
|
||||
//@ count "$.index[?(@.name=='One')].inner.variant.kind.tuple[*]" 1
|
||||
//@ is "$.index[?(@.name=='One')].inner.variant.kind.tuple[0]" $1.1.0
|
||||
One(/** 1.1.0*/ bool),
|
||||
//@ count "$.index[*][?(@.name=='OneHidden')].inner.variant.kind.tuple[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='OneHidden')].inner.variant.kind.tuple[0]" null
|
||||
//@ count "$.index[?(@.name=='OneHidden')].inner.variant.kind.tuple[*]" 1
|
||||
//@ is "$.index[?(@.name=='OneHidden')].inner.variant.kind.tuple[0]" null
|
||||
OneHidden(#[doc(hidden)] bool),
|
||||
|
||||
//@ count "$.index[*][?(@.name=='Two')].inner.variant.kind.tuple[*]" 2
|
||||
//@ is "$.index[*][?(@.name=='Two')].inner.variant.kind.tuple[0]" $2.1.0
|
||||
//@ is "$.index[*][?(@.name=='Two')].inner.variant.kind.tuple[1]" $2.1.1
|
||||
//@ count "$.index[?(@.name=='Two')].inner.variant.kind.tuple[*]" 2
|
||||
//@ is "$.index[?(@.name=='Two')].inner.variant.kind.tuple[0]" $2.1.0
|
||||
//@ is "$.index[?(@.name=='Two')].inner.variant.kind.tuple[1]" $2.1.1
|
||||
Two(/** 2.1.0*/ bool, /** 2.1.1*/ bool),
|
||||
//@ count "$.index[*][?(@.name=='TwoLeftHidden')].inner.variant.kind.tuple[*]" 2
|
||||
//@ is "$.index[*][?(@.name=='TwoLeftHidden')].inner.variant.kind.tuple[0]" null
|
||||
//@ is "$.index[*][?(@.name=='TwoLeftHidden')].inner.variant.kind.tuple[1]" $2.2.1
|
||||
//@ count "$.index[?(@.name=='TwoLeftHidden')].inner.variant.kind.tuple[*]" 2
|
||||
//@ is "$.index[?(@.name=='TwoLeftHidden')].inner.variant.kind.tuple[0]" null
|
||||
//@ is "$.index[?(@.name=='TwoLeftHidden')].inner.variant.kind.tuple[1]" $2.2.1
|
||||
TwoLeftHidden(#[doc(hidden)] bool, /** 2.2.1*/ bool),
|
||||
//@ count "$.index[*][?(@.name=='TwoRightHidden')].inner.variant.kind.tuple[*]" 2
|
||||
//@ is "$.index[*][?(@.name=='TwoRightHidden')].inner.variant.kind.tuple[0]" $2.3.0
|
||||
//@ is "$.index[*][?(@.name=='TwoRightHidden')].inner.variant.kind.tuple[1]" null
|
||||
//@ count "$.index[?(@.name=='TwoRightHidden')].inner.variant.kind.tuple[*]" 2
|
||||
//@ is "$.index[?(@.name=='TwoRightHidden')].inner.variant.kind.tuple[0]" $2.3.0
|
||||
//@ is "$.index[?(@.name=='TwoRightHidden')].inner.variant.kind.tuple[1]" null
|
||||
TwoRightHidden(/** 2.3.0*/ bool, #[doc(hidden)] bool),
|
||||
//@ count "$.index[*][?(@.name=='TwoBothHidden')].inner.variant.kind.tuple[*]" 2
|
||||
//@ is "$.index[*][?(@.name=='TwoBothHidden')].inner.variant.kind.tuple[0]" null
|
||||
//@ is "$.index[*][?(@.name=='TwoBothHidden')].inner.variant.kind.tuple[1]" null
|
||||
//@ count "$.index[?(@.name=='TwoBothHidden')].inner.variant.kind.tuple[*]" 2
|
||||
//@ is "$.index[?(@.name=='TwoBothHidden')].inner.variant.kind.tuple[0]" null
|
||||
//@ is "$.index[?(@.name=='TwoBothHidden')].inner.variant.kind.tuple[1]" null
|
||||
TwoBothHidden(#[doc(hidden)] bool, #[doc(hidden)] bool),
|
||||
|
||||
//@ count "$.index[*][?(@.name=='Three1')].inner.variant.kind.tuple[*]" 3
|
||||
//@ is "$.index[*][?(@.name=='Three1')].inner.variant.kind.tuple[0]" null
|
||||
//@ is "$.index[*][?(@.name=='Three1')].inner.variant.kind.tuple[1]" $3.1.1
|
||||
//@ is "$.index[*][?(@.name=='Three1')].inner.variant.kind.tuple[2]" $3.1.2
|
||||
//@ count "$.index[?(@.name=='Three1')].inner.variant.kind.tuple[*]" 3
|
||||
//@ is "$.index[?(@.name=='Three1')].inner.variant.kind.tuple[0]" null
|
||||
//@ is "$.index[?(@.name=='Three1')].inner.variant.kind.tuple[1]" $3.1.1
|
||||
//@ is "$.index[?(@.name=='Three1')].inner.variant.kind.tuple[2]" $3.1.2
|
||||
Three1(#[doc(hidden)] bool, /** 3.1.1*/ bool, /** 3.1.2*/ bool),
|
||||
//@ count "$.index[*][?(@.name=='Three2')].inner.variant.kind.tuple[*]" 3
|
||||
//@ is "$.index[*][?(@.name=='Three2')].inner.variant.kind.tuple[0]" $3.2.0
|
||||
//@ is "$.index[*][?(@.name=='Three2')].inner.variant.kind.tuple[1]" null
|
||||
//@ is "$.index[*][?(@.name=='Three2')].inner.variant.kind.tuple[2]" $3.2.2
|
||||
//@ count "$.index[?(@.name=='Three2')].inner.variant.kind.tuple[*]" 3
|
||||
//@ is "$.index[?(@.name=='Three2')].inner.variant.kind.tuple[0]" $3.2.0
|
||||
//@ is "$.index[?(@.name=='Three2')].inner.variant.kind.tuple[1]" null
|
||||
//@ is "$.index[?(@.name=='Three2')].inner.variant.kind.tuple[2]" $3.2.2
|
||||
Three2(/** 3.2.0*/ bool, #[doc(hidden)] bool, /** 3.2.2*/ bool),
|
||||
//@ count "$.index[*][?(@.name=='Three3')].inner.variant.kind.tuple[*]" 3
|
||||
//@ is "$.index[*][?(@.name=='Three3')].inner.variant.kind.tuple[0]" $3.3.0
|
||||
//@ is "$.index[*][?(@.name=='Three3')].inner.variant.kind.tuple[1]" $3.3.1
|
||||
//@ is "$.index[*][?(@.name=='Three3')].inner.variant.kind.tuple[2]" null
|
||||
//@ count "$.index[?(@.name=='Three3')].inner.variant.kind.tuple[*]" 3
|
||||
//@ is "$.index[?(@.name=='Three3')].inner.variant.kind.tuple[0]" $3.3.0
|
||||
//@ is "$.index[?(@.name=='Three3')].inner.variant.kind.tuple[1]" $3.3.1
|
||||
//@ is "$.index[?(@.name=='Three3')].inner.variant.kind.tuple[2]" null
|
||||
Three3(/** 3.3.0*/ bool, /** 3.3.1*/ bool, #[doc(hidden)] bool),
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.docs=='1.1.0')].name" '"0"'
|
||||
//@ is "$.index[*][?(@.docs=='2.1.0')].name" '"0"'
|
||||
//@ is "$.index[*][?(@.docs=='2.1.1')].name" '"1"'
|
||||
//@ is "$.index[*][?(@.docs=='2.2.1')].name" '"1"'
|
||||
//@ is "$.index[*][?(@.docs=='2.3.0')].name" '"0"'
|
||||
//@ is "$.index[*][?(@.docs=='3.1.1')].name" '"1"'
|
||||
//@ is "$.index[*][?(@.docs=='3.1.2')].name" '"2"'
|
||||
//@ is "$.index[*][?(@.docs=='3.2.0')].name" '"0"'
|
||||
//@ is "$.index[*][?(@.docs=='3.2.2')].name" '"2"'
|
||||
//@ is "$.index[*][?(@.docs=='3.3.0')].name" '"0"'
|
||||
//@ is "$.index[*][?(@.docs=='3.3.1')].name" '"1"'
|
||||
//@ is "$.index[?(@.docs=='1.1.0')].name" '"0"'
|
||||
//@ is "$.index[?(@.docs=='2.1.0')].name" '"0"'
|
||||
//@ is "$.index[?(@.docs=='2.1.1')].name" '"1"'
|
||||
//@ is "$.index[?(@.docs=='2.2.1')].name" '"1"'
|
||||
//@ is "$.index[?(@.docs=='2.3.0')].name" '"0"'
|
||||
//@ is "$.index[?(@.docs=='3.1.1')].name" '"1"'
|
||||
//@ is "$.index[?(@.docs=='3.1.2')].name" '"2"'
|
||||
//@ is "$.index[?(@.docs=='3.2.0')].name" '"0"'
|
||||
//@ is "$.index[?(@.docs=='3.2.2')].name" '"2"'
|
||||
//@ is "$.index[?(@.docs=='3.3.0')].name" '"0"'
|
||||
//@ is "$.index[?(@.docs=='3.3.1')].name" '"1"'
|
||||
|
||||
//@ is "$.index[*][?(@.docs=='1.1.0')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[*][?(@.docs=='2.1.0')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[*][?(@.docs=='2.1.1')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[*][?(@.docs=='2.2.1')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[*][?(@.docs=='2.3.0')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[*][?(@.docs=='3.1.1')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[*][?(@.docs=='3.1.2')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[*][?(@.docs=='3.2.0')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[*][?(@.docs=='3.2.2')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[*][?(@.docs=='3.3.0')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[*][?(@.docs=='3.3.1')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[?(@.docs=='1.1.0')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[?(@.docs=='2.1.0')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[?(@.docs=='2.1.1')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[?(@.docs=='2.2.1')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[?(@.docs=='2.3.0')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[?(@.docs=='3.1.1')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[?(@.docs=='3.1.2')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[?(@.docs=='3.2.0')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[?(@.docs=='3.2.2')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[?(@.docs=='3.3.0')].inner.struct_field" '{"primitive": "bool"}'
|
||||
//@ is "$.index[?(@.docs=='3.3.1')].inner.struct_field" '{"primitive": "bool"}'
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
// Regression test for <https://github.com/rust-lang/rust/issues/104942>
|
||||
|
||||
//@ set Color = "$.index[*][?(@.name == 'Color')].id"
|
||||
//@ set Color = "$.index[?(@.name == 'Color')].id"
|
||||
pub enum Color {
|
||||
Red,
|
||||
Green,
|
||||
Blue,
|
||||
}
|
||||
|
||||
//@ set use_Color = "$.index[*][?(@.inner.use)].id"
|
||||
//@ is "$.index[*][?(@.inner.use)].inner.use.id" $Color
|
||||
//@ is "$.index[*][?(@.inner.use)].inner.use.is_glob" true
|
||||
//@ set use_Color = "$.index[?(@.inner.use)].id"
|
||||
//@ is "$.index[?(@.inner.use)].inner.use.id" $Color
|
||||
//@ is "$.index[?(@.inner.use)].inner.use.is_glob" true
|
||||
pub use Color::*;
|
||||
|
||||
//@ ismany "$.index[*][?(@.name == 'use_glob')].inner.module.items[*]" $Color $use_Color
|
||||
//@ ismany "$.index[?(@.name == 'use_glob')].inner.module.items[*]" $Color $use_Color
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
//@ set AlwaysNone = "$.index[*][?(@.name == 'AlwaysNone')].id"
|
||||
//@ set AlwaysNone = "$.index[?(@.name == 'AlwaysNone')].id"
|
||||
pub enum AlwaysNone {
|
||||
//@ set None = "$.index[*][?(@.name == 'None')].id"
|
||||
//@ set None = "$.index[?(@.name == 'None')].id"
|
||||
None,
|
||||
}
|
||||
//@ is "$.index[*][?(@.name == 'AlwaysNone')].inner.enum.variants[*]" $None
|
||||
//@ is "$.index[?(@.name == 'AlwaysNone')].inner.enum.variants[*]" $None
|
||||
|
||||
//@ set use_None = "$.index[*][?(@.inner.use)].id"
|
||||
//@ is "$.index[*][?(@.inner.use)].inner.use.id" $None
|
||||
//@ set use_None = "$.index[?(@.inner.use)].id"
|
||||
//@ is "$.index[?(@.inner.use)].inner.use.id" $None
|
||||
pub use AlwaysNone::None;
|
||||
|
||||
//@ ismany "$.index[*][?(@.name == 'use_variant')].inner.module.items[*]" $AlwaysNone $use_None
|
||||
//@ ismany "$.index[?(@.name == 'use_variant')].inner.module.items[*]" $AlwaysNone $use_None
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
extern crate color;
|
||||
|
||||
//@ has "$.index[*].inner.use[?(@.name == 'Red')]"
|
||||
//@ has "$.index[?(@.inner.use.name == 'Red')]"
|
||||
pub use color::Color::Red;
|
||||
|
||||
//@ !has "$.index[*][?(@.name == 'Red')]"
|
||||
//@ !has "$.index[*][?(@.name == 'Color')]"
|
||||
//@ !has "$.index[?(@.name == 'Red')]"
|
||||
//@ !has "$.index[?(@.name == 'Color')]"
|
||||
|
|
|
@ -15,24 +15,24 @@ pub enum Foo {
|
|||
Vll9,
|
||||
}
|
||||
|
||||
//@ set 0 = '$.index[*][?(@.name == "Ews0")].id'
|
||||
//@ set 1 = '$.index[*][?(@.name == "Dik1")].id'
|
||||
//@ set 2 = '$.index[*][?(@.name == "Hsk2")].id'
|
||||
//@ set 3 = '$.index[*][?(@.name == "Djt3")].id'
|
||||
//@ set 4 = '$.index[*][?(@.name == "Jnr4")].id'
|
||||
//@ set 5 = '$.index[*][?(@.name == "Dfs5")].id'
|
||||
//@ set 6 = '$.index[*][?(@.name == "Bja6")].id'
|
||||
//@ set 7 = '$.index[*][?(@.name == "Lyc7")].id'
|
||||
//@ set 8 = '$.index[*][?(@.name == "Yqd8")].id'
|
||||
//@ set 9 = '$.index[*][?(@.name == "Vll9")].id'
|
||||
//@ set 0 = '$.index[?(@.name == "Ews0")].id'
|
||||
//@ set 1 = '$.index[?(@.name == "Dik1")].id'
|
||||
//@ set 2 = '$.index[?(@.name == "Hsk2")].id'
|
||||
//@ set 3 = '$.index[?(@.name == "Djt3")].id'
|
||||
//@ set 4 = '$.index[?(@.name == "Jnr4")].id'
|
||||
//@ set 5 = '$.index[?(@.name == "Dfs5")].id'
|
||||
//@ set 6 = '$.index[?(@.name == "Bja6")].id'
|
||||
//@ set 7 = '$.index[?(@.name == "Lyc7")].id'
|
||||
//@ set 8 = '$.index[?(@.name == "Yqd8")].id'
|
||||
//@ set 9 = '$.index[?(@.name == "Vll9")].id'
|
||||
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.enum.variants[0]' $0
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.enum.variants[1]' $1
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.enum.variants[2]' $2
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.enum.variants[3]' $3
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.enum.variants[4]' $4
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.enum.variants[5]' $5
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.enum.variants[6]' $6
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.enum.variants[7]' $7
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.enum.variants[8]' $8
|
||||
//@ is '$.index[*][?(@.name == "Foo")].inner.enum.variants[9]' $9
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.enum.variants[0]' $0
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.enum.variants[1]' $1
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.enum.variants[2]' $2
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.enum.variants[3]' $3
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.enum.variants[4]' $4
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.enum.variants[5]' $5
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.enum.variants[6]' $6
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.enum.variants[7]' $7
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.enum.variants[8]' $8
|
||||
//@ is '$.index[?(@.name == "Foo")].inner.enum.variants[9]' $9
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
//@ is "$.index[*][?(@.name=='EnumStruct')].visibility" \"public\"
|
||||
//@ has "$.index[*][?(@.name=='EnumStruct')].inner.enum"
|
||||
//@ is "$.index[?(@.name=='EnumStruct')].visibility" \"public\"
|
||||
//@ has "$.index[?(@.name=='EnumStruct')].inner.enum"
|
||||
pub enum EnumStruct {
|
||||
//@ has "$.index[*][?(@.name=='x')].inner.struct_field"
|
||||
//@ set x = "$.index[*][?(@.name=='x')].id"
|
||||
//@ has "$.index[*][?(@.name=='y')].inner.struct_field"
|
||||
//@ set y = "$.index[*][?(@.name=='y')].id"
|
||||
//@ ismany "$.index[*][?(@.name=='VariantS')].inner.variant.kind.struct.fields[*]" $x $y
|
||||
//@ has "$.index[?(@.name=='x')].inner.struct_field"
|
||||
//@ set x = "$.index[?(@.name=='x')].id"
|
||||
//@ has "$.index[?(@.name=='y')].inner.struct_field"
|
||||
//@ set y = "$.index[?(@.name=='y')].id"
|
||||
//@ ismany "$.index[?(@.name=='VariantS')].inner.variant.kind.struct.fields[*]" $x $y
|
||||
VariantS { x: u32, y: String },
|
||||
}
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
//@ is "$.index[*][?(@.name=='EnumTupleStruct')].visibility" \"public\"
|
||||
//@ has "$.index[*][?(@.name=='EnumTupleStruct')].inner.enum"
|
||||
//@ is "$.index[?(@.name=='EnumTupleStruct')].visibility" \"public\"
|
||||
//@ has "$.index[?(@.name=='EnumTupleStruct')].inner.enum"
|
||||
pub enum EnumTupleStruct {
|
||||
//@ has "$.index[*][?(@.name=='0')].inner.struct_field"
|
||||
//@ set f0 = "$.index[*][?(@.name=='0')].id"
|
||||
//@ has "$.index[*][?(@.name=='1')].inner.struct_field"
|
||||
//@ set f1 = "$.index[*][?(@.name=='1')].id"
|
||||
//@ ismany "$.index[*][?(@.name=='VariantA')].inner.variant.kind.tuple[*]" $f0 $f1
|
||||
//@ has "$.index[?(@.name=='0')].inner.struct_field"
|
||||
//@ set f0 = "$.index[?(@.name=='0')].id"
|
||||
//@ has "$.index[?(@.name=='1')].inner.struct_field"
|
||||
//@ set f1 = "$.index[?(@.name=='1')].id"
|
||||
//@ ismany "$.index[?(@.name=='VariantA')].inner.variant.kind.tuple[*]" $f0 $f1
|
||||
VariantA(u32, String),
|
||||
}
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
#![feature(abi_vectorcall)]
|
||||
|
||||
//@ is "$.index[*][?(@.name=='AbiRust')].inner.type_alias.type.function_pointer.header.abi" \"Rust\"
|
||||
//@ is "$.index[?(@.name=='AbiRust')].inner.type_alias.type.function_pointer.header.abi" \"Rust\"
|
||||
pub type AbiRust = fn();
|
||||
|
||||
//@ is "$.index[*][?(@.name=='AbiC')].inner.type_alias.type.function_pointer.header.abi" '{"C": {"unwind": false}}'
|
||||
//@ is "$.index[?(@.name=='AbiC')].inner.type_alias.type.function_pointer.header.abi" '{"C": {"unwind": false}}'
|
||||
pub type AbiC = extern "C" fn();
|
||||
|
||||
//@ is "$.index[*][?(@.name=='AbiSystem')].inner.type_alias.type.function_pointer.header.abi" '{"System": {"unwind": false}}'
|
||||
//@ is "$.index[?(@.name=='AbiSystem')].inner.type_alias.type.function_pointer.header.abi" '{"System": {"unwind": false}}'
|
||||
pub type AbiSystem = extern "system" fn();
|
||||
|
||||
//@ is "$.index[*][?(@.name=='AbiCUnwind')].inner.type_alias.type.function_pointer.header.abi" '{"C": {"unwind": true}}'
|
||||
//@ is "$.index[?(@.name=='AbiCUnwind')].inner.type_alias.type.function_pointer.header.abi" '{"C": {"unwind": true}}'
|
||||
pub type AbiCUnwind = extern "C-unwind" fn();
|
||||
|
||||
//@ is "$.index[*][?(@.name=='AbiSystemUnwind')].inner.type_alias.type.function_pointer.header.abi" '{"System": {"unwind": true}}'
|
||||
//@ is "$.index[?(@.name=='AbiSystemUnwind')].inner.type_alias.type.function_pointer.header.abi" '{"System": {"unwind": true}}'
|
||||
pub type AbiSystemUnwind = extern "system-unwind" fn();
|
||||
|
||||
//@ is "$.index[*][?(@.name=='AbiVecorcall')].inner.type_alias.type.function_pointer.header.abi.Other" '"\"vectorcall\""'
|
||||
//@ is "$.index[?(@.name=='AbiVecorcall')].inner.type_alias.type.function_pointer.header.abi.Other" '"\"vectorcall\""'
|
||||
pub type AbiVecorcall = extern "vectorcall" fn();
|
||||
|
||||
//@ is "$.index[*][?(@.name=='AbiVecorcallUnwind')].inner.type_alias.type.function_pointer.header.abi.Other" '"\"vectorcall-unwind\""'
|
||||
//@ is "$.index[?(@.name=='AbiVecorcallUnwind')].inner.type_alias.type.function_pointer.header.abi.Other" '"\"vectorcall-unwind\""'
|
||||
pub type AbiVecorcallUnwind = extern "vectorcall-unwind" fn();
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
//@ count "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.type_alias.type.function_pointer.sig.inputs[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.type_alias.type.function_pointer.sig.inputs[0][0]" '"val"'
|
||||
//@ is "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.type_alias.type.function_pointer.sig.inputs[0][1].borrowed_ref.lifetime" \"\'c\"
|
||||
//@ is "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.type_alias.type.function_pointer.sig.output.primitive" \"i32\"
|
||||
//@ count "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.type_alias.type.function_pointer.generic_params[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.type_alias.type.function_pointer.generic_params[0].name" \"\'c\"
|
||||
//@ is "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.type_alias.type.function_pointer.generic_params[0].kind" '{ "lifetime": { "outlives": [] } }'
|
||||
//@ count "$.index[?(@.name=='WithHigherRankTraitBounds')].inner.type_alias.type.function_pointer.sig.inputs[*]" 1
|
||||
//@ is "$.index[?(@.name=='WithHigherRankTraitBounds')].inner.type_alias.type.function_pointer.sig.inputs[0][0]" '"val"'
|
||||
//@ is "$.index[?(@.name=='WithHigherRankTraitBounds')].inner.type_alias.type.function_pointer.sig.inputs[0][1].borrowed_ref.lifetime" \"\'c\"
|
||||
//@ is "$.index[?(@.name=='WithHigherRankTraitBounds')].inner.type_alias.type.function_pointer.sig.output.primitive" \"i32\"
|
||||
//@ count "$.index[?(@.name=='WithHigherRankTraitBounds')].inner.type_alias.type.function_pointer.generic_params[*]" 1
|
||||
//@ is "$.index[?(@.name=='WithHigherRankTraitBounds')].inner.type_alias.type.function_pointer.generic_params[0].name" \"\'c\"
|
||||
//@ is "$.index[?(@.name=='WithHigherRankTraitBounds')].inner.type_alias.type.function_pointer.generic_params[0].kind" '{ "lifetime": { "outlives": [] } }'
|
||||
pub type WithHigherRankTraitBounds = for<'c> fn(val: &'c i32) -> i32;
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
//@ is "$.index[*][?(@.name=='FnPointer')].inner.type_alias.type.function_pointer.header.is_unsafe" false
|
||||
//@ is "$.index[*][?(@.name=='FnPointer')].inner.type_alias.type.function_pointer.header.is_const" false
|
||||
//@ is "$.index[*][?(@.name=='FnPointer')].inner.type_alias.type.function_pointer.header.is_async" false
|
||||
//@ is "$.index[?(@.name=='FnPointer')].inner.type_alias.type.function_pointer.header.is_unsafe" false
|
||||
//@ is "$.index[?(@.name=='FnPointer')].inner.type_alias.type.function_pointer.header.is_const" false
|
||||
//@ is "$.index[?(@.name=='FnPointer')].inner.type_alias.type.function_pointer.header.is_async" false
|
||||
pub type FnPointer = fn();
|
||||
|
||||
//@ is "$.index[*][?(@.name=='UnsafePointer')].inner.type_alias.type.function_pointer.header.is_unsafe" true
|
||||
//@ is "$.index[*][?(@.name=='UnsafePointer')].inner.type_alias.type.function_pointer.header.is_const" false
|
||||
//@ is "$.index[*][?(@.name=='UnsafePointer')].inner.type_alias.type.function_pointer.header.is_async" false
|
||||
//@ is "$.index[?(@.name=='UnsafePointer')].inner.type_alias.type.function_pointer.header.is_unsafe" true
|
||||
//@ is "$.index[?(@.name=='UnsafePointer')].inner.type_alias.type.function_pointer.header.is_const" false
|
||||
//@ is "$.index[?(@.name=='UnsafePointer')].inner.type_alias.type.function_pointer.header.is_async" false
|
||||
pub type UnsafePointer = unsafe fn();
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
#![feature(abi_vectorcall)]
|
||||
|
||||
//@ is "$.index[*][?(@.name=='abi_rust')].inner.function.header.abi" \"Rust\"
|
||||
//@ is "$.index[?(@.name=='abi_rust')].inner.function.header.abi" \"Rust\"
|
||||
pub fn abi_rust() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='abi_c')].inner.function.header.abi" '{"C": {"unwind": false}}'
|
||||
//@ is "$.index[?(@.name=='abi_c')].inner.function.header.abi" '{"C": {"unwind": false}}'
|
||||
pub extern "C" fn abi_c() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='abi_system')].inner.function.header.abi" '{"System": {"unwind": false}}'
|
||||
//@ is "$.index[?(@.name=='abi_system')].inner.function.header.abi" '{"System": {"unwind": false}}'
|
||||
pub extern "system" fn abi_system() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='abi_c_unwind')].inner.function.header.abi" '{"C": {"unwind": true}}'
|
||||
//@ is "$.index[?(@.name=='abi_c_unwind')].inner.function.header.abi" '{"C": {"unwind": true}}'
|
||||
pub extern "C-unwind" fn abi_c_unwind() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='abi_system_unwind')].inner.function.header.abi" '{"System": {"unwind": true}}'
|
||||
//@ is "$.index[?(@.name=='abi_system_unwind')].inner.function.header.abi" '{"System": {"unwind": true}}'
|
||||
pub extern "system-unwind" fn abi_system_unwind() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='abi_vectorcall')].inner.function.header.abi.Other" '"\"vectorcall\""'
|
||||
//@ is "$.index[?(@.name=='abi_vectorcall')].inner.function.header.abi.Other" '"\"vectorcall\""'
|
||||
pub extern "vectorcall" fn abi_vectorcall() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='abi_vectorcall_unwind')].inner.function.header.abi.Other" '"\"vectorcall-unwind\""'
|
||||
//@ is "$.index[?(@.name=='abi_vectorcall_unwind')].inner.function.header.abi.Other" '"\"vectorcall-unwind\""'
|
||||
pub extern "vectorcall-unwind" fn abi_vectorcall_unwind() {}
|
||||
|
|
|
@ -4,30 +4,30 @@
|
|||
|
||||
use std::future::Future;
|
||||
|
||||
//@ is "$.index[*][?(@.name=='get_int')].inner.function.sig.output.primitive" \"i32\"
|
||||
//@ is "$.index[*][?(@.name=='get_int')].inner.function.header.is_async" false
|
||||
//@ is "$.index[?(@.name=='get_int')].inner.function.sig.output.primitive" \"i32\"
|
||||
//@ is "$.index[?(@.name=='get_int')].inner.function.header.is_async" false
|
||||
pub fn get_int() -> i32 {
|
||||
42
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='get_int_async')].inner.function.sig.output.primitive" \"i32\"
|
||||
//@ is "$.index[*][?(@.name=='get_int_async')].inner.function.header.is_async" true
|
||||
//@ is "$.index[?(@.name=='get_int_async')].inner.function.sig.output.primitive" \"i32\"
|
||||
//@ is "$.index[?(@.name=='get_int_async')].inner.function.header.is_async" true
|
||||
pub async fn get_int_async() -> i32 {
|
||||
42
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='get_int_future')].inner.function.sig.output.impl_trait[0].trait_bound.trait.path" '"Future"'
|
||||
//@ is "$.index[*][?(@.name=='get_int_future')].inner.function.sig.output.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[0].name" '"Output"'
|
||||
//@ is "$.index[*][?(@.name=='get_int_future')].inner.function.sig.output.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[0].binding.equality.type.primitive" \"i32\"
|
||||
//@ is "$.index[*][?(@.name=='get_int_future')].inner.function.header.is_async" false
|
||||
//@ is "$.index[?(@.name=='get_int_future')].inner.function.sig.output.impl_trait[0].trait_bound.trait.path" '"Future"'
|
||||
//@ is "$.index[?(@.name=='get_int_future')].inner.function.sig.output.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[0].name" '"Output"'
|
||||
//@ is "$.index[?(@.name=='get_int_future')].inner.function.sig.output.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[0].binding.equality.type.primitive" \"i32\"
|
||||
//@ is "$.index[?(@.name=='get_int_future')].inner.function.header.is_async" false
|
||||
pub fn get_int_future() -> impl Future<Output = i32> {
|
||||
async { 42 }
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='get_int_future_async')].inner.function.sig.output.impl_trait[0].trait_bound.trait.path" '"Future"'
|
||||
//@ is "$.index[*][?(@.name=='get_int_future_async')].inner.function.sig.output.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[0].name" '"Output"'
|
||||
//@ is "$.index[*][?(@.name=='get_int_future_async')].inner.function.sig.output.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[0].binding.equality.type.primitive" \"i32\"
|
||||
//@ is "$.index[*][?(@.name=='get_int_future_async')].inner.function.header.is_async" true
|
||||
//@ is "$.index[?(@.name=='get_int_future_async')].inner.function.sig.output.impl_trait[0].trait_bound.trait.path" '"Future"'
|
||||
//@ is "$.index[?(@.name=='get_int_future_async')].inner.function.sig.output.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[0].name" '"Output"'
|
||||
//@ is "$.index[?(@.name=='get_int_future_async')].inner.function.sig.output.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[0].binding.equality.type.primitive" \"i32\"
|
||||
//@ is "$.index[?(@.name=='get_int_future_async')].inner.function.header.is_async" true
|
||||
pub async fn get_int_future_async() -> impl Future<Output = i32> {
|
||||
async { 42 }
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
extern "C" {
|
||||
//@ is "$.index[*][?(@.name == 'not_variadic')].inner.function.sig.is_c_variadic" false
|
||||
//@ is "$.index[?(@.name == 'not_variadic')].inner.function.sig.is_c_variadic" false
|
||||
pub fn not_variadic(_: i32);
|
||||
//@ is "$.index[*][?(@.name == 'variadic')].inner.function.sig.is_c_variadic" true
|
||||
//@ is "$.index[?(@.name == 'variadic')].inner.function.sig.is_c_variadic" true
|
||||
pub fn variadic(_: i32, ...);
|
||||
}
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
extern "C" {
|
||||
//@ is "$.index[*][?(@.name=='f1')].inner.function.header.is_unsafe" true
|
||||
//@ is "$.index[?(@.name=='f1')].inner.function.header.is_unsafe" true
|
||||
pub fn f1();
|
||||
|
||||
// items in `extern` blocks without an `unsafe` qualifier cannot have safety qualifiers
|
||||
}
|
||||
|
||||
unsafe extern "C" {
|
||||
//@ is "$.index[*][?(@.name=='f4')].inner.function.header.is_unsafe" true
|
||||
//@ is "$.index[?(@.name=='f4')].inner.function.header.is_unsafe" true
|
||||
pub fn f4();
|
||||
|
||||
//@ is "$.index[*][?(@.name=='f5')].inner.function.header.is_unsafe" true
|
||||
//@ is "$.index[?(@.name=='f5')].inner.function.header.is_unsafe" true
|
||||
pub unsafe fn f5();
|
||||
|
||||
//@ is "$.index[*][?(@.name=='f6')].inner.function.header.is_unsafe" false
|
||||
//@ is "$.index[?(@.name=='f6')].inner.function.header.is_unsafe" false
|
||||
pub safe fn f6();
|
||||
}
|
||||
|
|
|
@ -1,58 +1,58 @@
|
|||
//@ set foo = "$.index[*][?(@.name=='Foo')].id"
|
||||
//@ set foo = "$.index[?(@.name=='Foo')].id"
|
||||
pub trait Foo {}
|
||||
|
||||
//@ set generic_foo = "$.index[*][?(@.name=='GenericFoo')].id"
|
||||
//@ set generic_foo = "$.index[?(@.name=='GenericFoo')].id"
|
||||
pub trait GenericFoo<'a> {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='generics')].inner.function.generics.where_predicates" "[]"
|
||||
//@ count "$.index[*][?(@.name=='generics')].inner.function.generics.params[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='generics')].inner.function.generics.params[0].name" '"F"'
|
||||
//@ is "$.index[*][?(@.name=='generics')].inner.function.generics.params[0].kind.type.default" 'null'
|
||||
//@ count "$.index[*][?(@.name=='generics')].inner.function.generics.params[0].kind.type.bounds[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='generics')].inner.function.generics.params[0].kind.type.bounds[0].trait_bound.trait.id" '$foo'
|
||||
//@ count "$.index[*][?(@.name=='generics')].inner.function.sig.inputs[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='generics')].inner.function.sig.inputs[0][0]" '"f"'
|
||||
//@ is "$.index[*][?(@.name=='generics')].inner.function.sig.inputs[0][1].generic" '"F"'
|
||||
//@ is "$.index[?(@.name=='generics')].inner.function.generics.where_predicates" "[]"
|
||||
//@ count "$.index[?(@.name=='generics')].inner.function.generics.params[*]" 1
|
||||
//@ is "$.index[?(@.name=='generics')].inner.function.generics.params[0].name" '"F"'
|
||||
//@ is "$.index[?(@.name=='generics')].inner.function.generics.params[0].kind.type.default" 'null'
|
||||
//@ count "$.index[?(@.name=='generics')].inner.function.generics.params[0].kind.type.bounds[*]" 1
|
||||
//@ is "$.index[?(@.name=='generics')].inner.function.generics.params[0].kind.type.bounds[0].trait_bound.trait.id" '$foo'
|
||||
//@ count "$.index[?(@.name=='generics')].inner.function.sig.inputs[*]" 1
|
||||
//@ is "$.index[?(@.name=='generics')].inner.function.sig.inputs[0][0]" '"f"'
|
||||
//@ is "$.index[?(@.name=='generics')].inner.function.sig.inputs[0][1].generic" '"F"'
|
||||
pub fn generics<F: Foo>(f: F) {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='impl_trait')].inner.function.generics.where_predicates" "[]"
|
||||
//@ count "$.index[*][?(@.name=='impl_trait')].inner.function.generics.params[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='impl_trait')].inner.function.generics.params[0].name" '"impl Foo"'
|
||||
//@ is "$.index[*][?(@.name=='impl_trait')].inner.function.generics.params[0].kind.type.bounds[0].trait_bound.trait.id" $foo
|
||||
//@ count "$.index[*][?(@.name=='impl_trait')].inner.function.sig.inputs[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='impl_trait')].inner.function.sig.inputs[0][0]" '"f"'
|
||||
//@ count "$.index[*][?(@.name=='impl_trait')].inner.function.sig.inputs[0][1].impl_trait[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='impl_trait')].inner.function.sig.inputs[0][1].impl_trait[0].trait_bound.trait.id" $foo
|
||||
//@ is "$.index[?(@.name=='impl_trait')].inner.function.generics.where_predicates" "[]"
|
||||
//@ count "$.index[?(@.name=='impl_trait')].inner.function.generics.params[*]" 1
|
||||
//@ is "$.index[?(@.name=='impl_trait')].inner.function.generics.params[0].name" '"impl Foo"'
|
||||
//@ is "$.index[?(@.name=='impl_trait')].inner.function.generics.params[0].kind.type.bounds[0].trait_bound.trait.id" $foo
|
||||
//@ count "$.index[?(@.name=='impl_trait')].inner.function.sig.inputs[*]" 1
|
||||
//@ is "$.index[?(@.name=='impl_trait')].inner.function.sig.inputs[0][0]" '"f"'
|
||||
//@ count "$.index[?(@.name=='impl_trait')].inner.function.sig.inputs[0][1].impl_trait[*]" 1
|
||||
//@ is "$.index[?(@.name=='impl_trait')].inner.function.sig.inputs[0][1].impl_trait[0].trait_bound.trait.id" $foo
|
||||
pub fn impl_trait(f: impl Foo) {}
|
||||
|
||||
//@ count "$.index[*][?(@.name=='where_clase')].inner.function.generics.params[*]" 3
|
||||
//@ is "$.index[*][?(@.name=='where_clase')].inner.function.generics.params[0].name" '"F"'
|
||||
//@ is "$.index[*][?(@.name=='where_clase')].inner.function.generics.params[0].kind" '{"type": {"bounds": [], "default": null, "is_synthetic": false}}'
|
||||
//@ count "$.index[*][?(@.name=='where_clase')].inner.function.sig.inputs[*]" 3
|
||||
//@ is "$.index[*][?(@.name=='where_clase')].inner.function.sig.inputs[0][0]" '"f"'
|
||||
//@ is "$.index[*][?(@.name=='where_clase')].inner.function.sig.inputs[0][1].generic" '"F"'
|
||||
//@ count "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[*]" 3
|
||||
//@ count "$.index[?(@.name=='where_clase')].inner.function.generics.params[*]" 3
|
||||
//@ is "$.index[?(@.name=='where_clase')].inner.function.generics.params[0].name" '"F"'
|
||||
//@ is "$.index[?(@.name=='where_clase')].inner.function.generics.params[0].kind" '{"type": {"bounds": [], "default": null, "is_synthetic": false}}'
|
||||
//@ count "$.index[?(@.name=='where_clase')].inner.function.sig.inputs[*]" 3
|
||||
//@ is "$.index[?(@.name=='where_clase')].inner.function.sig.inputs[0][0]" '"f"'
|
||||
//@ is "$.index[?(@.name=='where_clase')].inner.function.sig.inputs[0][1].generic" '"F"'
|
||||
//@ count "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[*]" 3
|
||||
|
||||
//@ is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[0].bound_predicate.type.generic" \"F\"
|
||||
//@ count "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[0].bound_predicate.bounds[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[0].bound_predicate.bounds[0].trait_bound.trait.id" $foo
|
||||
//@ is "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[0].bound_predicate.type.generic" \"F\"
|
||||
//@ count "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[0].bound_predicate.bounds[*]" 1
|
||||
//@ is "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[0].bound_predicate.bounds[0].trait_bound.trait.id" $foo
|
||||
|
||||
//@ is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.type.generic" \"G\"
|
||||
//@ count "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.bounds[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.bounds[0].trait_bound.trait.id" $generic_foo
|
||||
//@ count "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.bounds[0].trait_bound.generic_params[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.bounds[0].trait_bound.generic_params[0].name" \"\'a\"
|
||||
//@ is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.bounds[0].trait_bound.generic_params[0].kind.lifetime.outlives" "[]"
|
||||
//@ is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.generic_params" "[]"
|
||||
//@ is "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.type.generic" \"G\"
|
||||
//@ count "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.bounds[*]" 1
|
||||
//@ is "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.bounds[0].trait_bound.trait.id" $generic_foo
|
||||
//@ count "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.bounds[0].trait_bound.generic_params[*]" 1
|
||||
//@ is "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.bounds[0].trait_bound.generic_params[0].name" \"\'a\"
|
||||
//@ is "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.bounds[0].trait_bound.generic_params[0].kind.lifetime.outlives" "[]"
|
||||
//@ is "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.generic_params" "[]"
|
||||
|
||||
//@ is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.type.borrowed_ref.lifetime" \"\'b\"
|
||||
//@ is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.type.borrowed_ref.type.generic" \"H\"
|
||||
//@ count "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.bounds[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.bounds[0].trait_bound.trait.id" $foo
|
||||
//@ is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.bounds[0].trait_bound.generic_params" "[]"
|
||||
//@ count "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.generic_params[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.generic_params[0].name" \"\'b\"
|
||||
//@ is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.generic_params[0].kind.lifetime.outlives" "[]"
|
||||
//@ is "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.type.borrowed_ref.lifetime" \"\'b\"
|
||||
//@ is "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.type.borrowed_ref.type.generic" \"H\"
|
||||
//@ count "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.bounds[*]" 1
|
||||
//@ is "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.bounds[0].trait_bound.trait.id" $foo
|
||||
//@ is "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.bounds[0].trait_bound.generic_params" "[]"
|
||||
//@ count "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.generic_params[*]" 1
|
||||
//@ is "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.generic_params[0].name" \"\'b\"
|
||||
//@ is "$.index[?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.generic_params[0].kind.lifetime.outlives" "[]"
|
||||
pub fn where_clase<F, G, H>(f: F, g: G, h: H)
|
||||
where
|
||||
F: Foo,
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
//@ count "$.index[*][?(@.name=='generic_returns')].inner.module.items[*]" 2
|
||||
//@ count "$.index[?(@.name=='generic_returns')].inner.module.items[*]" 2
|
||||
|
||||
//@ set foo = "$.index[*][?(@.name=='Foo')].id"
|
||||
//@ set foo = "$.index[?(@.name=='Foo')].id"
|
||||
pub trait Foo {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='get_foo')].inner.function.sig.inputs" []
|
||||
//@ count "$.index[*][?(@.name=='get_foo')].inner.function.sig.output.impl_trait[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='get_foo')].inner.function.sig.output.impl_trait[0].trait_bound.trait.id" $foo
|
||||
//@ is "$.index[?(@.name=='get_foo')].inner.function.sig.inputs" []
|
||||
//@ count "$.index[?(@.name=='get_foo')].inner.function.sig.output.impl_trait[*]" 1
|
||||
//@ is "$.index[?(@.name=='get_foo')].inner.function.sig.output.impl_trait[0].trait_bound.trait.id" $foo
|
||||
pub fn get_foo() -> impl Foo {
|
||||
Fooer {}
|
||||
}
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
//@ set wham_id = "$.index[*][?(@.name=='Wham')].id"
|
||||
//@ set wham_id = "$.index[?(@.name=='Wham')].id"
|
||||
pub trait Wham {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='one_generic_param_fn')].inner.function.generics.where_predicates" []
|
||||
//@ count "$.index[*][?(@.name=='one_generic_param_fn')].inner.function.generics.params[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='one_generic_param_fn')].inner.function.generics.params[0].name" '"T"'
|
||||
//@ is "$.index[*][?(@.name=='one_generic_param_fn')].inner.function.generics.params[0].kind.type.is_synthetic" false
|
||||
//@ is "$.index[*][?(@.name=='one_generic_param_fn')].inner.function.generics.params[0].kind.type.bounds[0].trait_bound.trait.id" $wham_id
|
||||
//@ is "$.index[*][?(@.name=='one_generic_param_fn')].inner.function.sig.inputs" '[["w", {"generic": "T"}]]'
|
||||
//@ is "$.index[?(@.name=='one_generic_param_fn')].inner.function.generics.where_predicates" []
|
||||
//@ count "$.index[?(@.name=='one_generic_param_fn')].inner.function.generics.params[*]" 1
|
||||
//@ is "$.index[?(@.name=='one_generic_param_fn')].inner.function.generics.params[0].name" '"T"'
|
||||
//@ is "$.index[?(@.name=='one_generic_param_fn')].inner.function.generics.params[0].kind.type.is_synthetic" false
|
||||
//@ is "$.index[?(@.name=='one_generic_param_fn')].inner.function.generics.params[0].kind.type.bounds[0].trait_bound.trait.id" $wham_id
|
||||
//@ is "$.index[?(@.name=='one_generic_param_fn')].inner.function.sig.inputs" '[["w", {"generic": "T"}]]'
|
||||
pub fn one_generic_param_fn<T: Wham>(w: T) {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.function.generics.where_predicates" []
|
||||
//@ count "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.function.generics.params[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.function.generics.params[0].name" '"impl Wham"'
|
||||
//@ is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.function.generics.params[0].kind.type.is_synthetic" true
|
||||
//@ is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.function.generics.params[0].kind.type.bounds[0].trait_bound.trait.id" $wham_id
|
||||
//@ count "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.function.sig.inputs[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.function.sig.inputs[0][0]" '"w"'
|
||||
//@ is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.function.sig.inputs[0][1].impl_trait[0].trait_bound.trait.id" $wham_id
|
||||
//@ is "$.index[?(@.name=='one_synthetic_generic_param_fn')].inner.function.generics.where_predicates" []
|
||||
//@ count "$.index[?(@.name=='one_synthetic_generic_param_fn')].inner.function.generics.params[*]" 1
|
||||
//@ is "$.index[?(@.name=='one_synthetic_generic_param_fn')].inner.function.generics.params[0].name" '"impl Wham"'
|
||||
//@ is "$.index[?(@.name=='one_synthetic_generic_param_fn')].inner.function.generics.params[0].kind.type.is_synthetic" true
|
||||
//@ is "$.index[?(@.name=='one_synthetic_generic_param_fn')].inner.function.generics.params[0].kind.type.bounds[0].trait_bound.trait.id" $wham_id
|
||||
//@ count "$.index[?(@.name=='one_synthetic_generic_param_fn')].inner.function.sig.inputs[*]" 1
|
||||
//@ is "$.index[?(@.name=='one_synthetic_generic_param_fn')].inner.function.sig.inputs[0][0]" '"w"'
|
||||
//@ is "$.index[?(@.name=='one_synthetic_generic_param_fn')].inner.function.sig.inputs[0][1].impl_trait[0].trait_bound.trait.id" $wham_id
|
||||
pub fn one_synthetic_generic_param_fn(w: impl Wham) {}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
//@ is "$.index[*][?(@.name=='fst')].inner.function.sig.inputs[0][0]" '"(x, _)"'
|
||||
//@ is "$.index[?(@.name=='fst')].inner.function.sig.inputs[0][0]" '"(x, _)"'
|
||||
pub fn fst<X, Y>((x, _): (X, Y)) -> X {
|
||||
x
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='drop_int')].inner.function.sig.inputs[0][0]" '"_"'
|
||||
//@ is "$.index[?(@.name=='drop_int')].inner.function.sig.inputs[0][0]" '"_"'
|
||||
pub fn drop_int(_: i32) {}
|
||||
|
|
|
@ -1,33 +1,33 @@
|
|||
//@ edition:2018
|
||||
|
||||
//@ is "$.index[*][?(@.name=='nothing_fn')].inner.function.header.is_async" false
|
||||
//@ is "$.index[*][?(@.name=='nothing_fn')].inner.function.header.is_const" false
|
||||
//@ is "$.index[*][?(@.name=='nothing_fn')].inner.function.header.is_unsafe" false
|
||||
//@ is "$.index[?(@.name=='nothing_fn')].inner.function.header.is_async" false
|
||||
//@ is "$.index[?(@.name=='nothing_fn')].inner.function.header.is_const" false
|
||||
//@ is "$.index[?(@.name=='nothing_fn')].inner.function.header.is_unsafe" false
|
||||
pub fn nothing_fn() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='unsafe_fn')].inner.function.header.is_async" false
|
||||
//@ is "$.index[*][?(@.name=='unsafe_fn')].inner.function.header.is_const" false
|
||||
//@ is "$.index[*][?(@.name=='unsafe_fn')].inner.function.header.is_unsafe" true
|
||||
//@ is "$.index[?(@.name=='unsafe_fn')].inner.function.header.is_async" false
|
||||
//@ is "$.index[?(@.name=='unsafe_fn')].inner.function.header.is_const" false
|
||||
//@ is "$.index[?(@.name=='unsafe_fn')].inner.function.header.is_unsafe" true
|
||||
pub unsafe fn unsafe_fn() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='const_fn')].inner.function.header.is_async" false
|
||||
//@ is "$.index[*][?(@.name=='const_fn')].inner.function.header.is_const" true
|
||||
//@ is "$.index[*][?(@.name=='const_fn')].inner.function.header.is_unsafe" false
|
||||
//@ is "$.index[?(@.name=='const_fn')].inner.function.header.is_async" false
|
||||
//@ is "$.index[?(@.name=='const_fn')].inner.function.header.is_const" true
|
||||
//@ is "$.index[?(@.name=='const_fn')].inner.function.header.is_unsafe" false
|
||||
pub const fn const_fn() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='async_fn')].inner.function.header.is_async" true
|
||||
//@ is "$.index[*][?(@.name=='async_fn')].inner.function.header.is_const" false
|
||||
//@ is "$.index[*][?(@.name=='async_fn')].inner.function.header.is_unsafe" false
|
||||
//@ is "$.index[?(@.name=='async_fn')].inner.function.header.is_async" true
|
||||
//@ is "$.index[?(@.name=='async_fn')].inner.function.header.is_const" false
|
||||
//@ is "$.index[?(@.name=='async_fn')].inner.function.header.is_unsafe" false
|
||||
pub async fn async_fn() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='async_unsafe_fn')].inner.function.header.is_async" true
|
||||
//@ is "$.index[*][?(@.name=='async_unsafe_fn')].inner.function.header.is_const" false
|
||||
//@ is "$.index[*][?(@.name=='async_unsafe_fn')].inner.function.header.is_unsafe" true
|
||||
//@ is "$.index[?(@.name=='async_unsafe_fn')].inner.function.header.is_async" true
|
||||
//@ is "$.index[?(@.name=='async_unsafe_fn')].inner.function.header.is_const" false
|
||||
//@ is "$.index[?(@.name=='async_unsafe_fn')].inner.function.header.is_unsafe" true
|
||||
pub async unsafe fn async_unsafe_fn() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='const_unsafe_fn')].inner.function.header.is_async" false
|
||||
//@ is "$.index[*][?(@.name=='const_unsafe_fn')].inner.function.header.is_const" true
|
||||
//@ is "$.index[*][?(@.name=='const_unsafe_fn')].inner.function.header.is_unsafe" true
|
||||
//@ is "$.index[?(@.name=='const_unsafe_fn')].inner.function.header.is_async" false
|
||||
//@ is "$.index[?(@.name=='const_unsafe_fn')].inner.function.header.is_const" true
|
||||
//@ is "$.index[?(@.name=='const_unsafe_fn')].inner.function.header.is_unsafe" true
|
||||
pub const unsafe fn const_unsafe_fn() {}
|
||||
|
||||
// It's impossible for a function to be both const and async, so no test for that
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
// Regression test for <https://github.com/rust-lang/rust/issues/104851>
|
||||
|
||||
///@ set foo = "$.index[*][?(@.name=='Foo')].id"
|
||||
///@ set foo = "$.index[?(@.name=='Foo')].id"
|
||||
pub type Foo = i32;
|
||||
|
||||
//@ is "$.index[*][?(@.name=='demo')].inner.function.sig.output.resolved_path.id" $foo
|
||||
//@ is "$.index[?(@.name=='demo')].inner.function.sig.output.resolved_path.id" $foo
|
||||
pub fn demo() -> Foo {
|
||||
42
|
||||
}
|
||||
|
|
|
@ -1,32 +1,32 @@
|
|||
pub trait Display {}
|
||||
|
||||
pub trait LendingIterator {
|
||||
//@ count "$.index[*][?(@.name=='LendingItem')].inner.assoc_type.generics.params[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='LendingItem')].inner.assoc_type.generics.params[*].name" \"\'a\"
|
||||
//@ count "$.index[*][?(@.name=='LendingItem')].inner.assoc_type.generics.where_predicates[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='LendingItem')].inner.assoc_type.generics.where_predicates[*].bound_predicate.type.generic" \"Self\"
|
||||
//@ is "$.index[*][?(@.name=='LendingItem')].inner.assoc_type.generics.where_predicates[*].bound_predicate.bounds[*].outlives" \"\'a\"
|
||||
//@ count "$.index[*][?(@.name=='LendingItem')].inner.assoc_type.bounds[*]" 1
|
||||
//@ count "$.index[?(@.name=='LendingItem')].inner.assoc_type.generics.params[*]" 1
|
||||
//@ is "$.index[?(@.name=='LendingItem')].inner.assoc_type.generics.params[*].name" \"\'a\"
|
||||
//@ count "$.index[?(@.name=='LendingItem')].inner.assoc_type.generics.where_predicates[*]" 1
|
||||
//@ is "$.index[?(@.name=='LendingItem')].inner.assoc_type.generics.where_predicates[*].bound_predicate.type.generic" \"Self\"
|
||||
//@ is "$.index[?(@.name=='LendingItem')].inner.assoc_type.generics.where_predicates[*].bound_predicate.bounds[*].outlives" \"\'a\"
|
||||
//@ count "$.index[?(@.name=='LendingItem')].inner.assoc_type.bounds[*]" 1
|
||||
type LendingItem<'a>: Display
|
||||
where
|
||||
Self: 'a;
|
||||
|
||||
//@ count "$.index[*][?(@.name=='lending_next')].inner.function.sig.output.qualified_path.args.angle_bracketed.args[*]" 1
|
||||
//@ count "$.index[*][?(@.name=='lending_next')].inner.function.sig.output.qualified_path.args.angle_bracketed.bindings[*]" 0
|
||||
//@ is "$.index[*][?(@.name=='lending_next')].inner.function.sig.output.qualified_path.self_type.generic" \"Self\"
|
||||
//@ is "$.index[*][?(@.name=='lending_next')].inner.function.sig.output.qualified_path.name" \"LendingItem\"
|
||||
//@ count "$.index[?(@.name=='lending_next')].inner.function.sig.output.qualified_path.args.angle_bracketed.args[*]" 1
|
||||
//@ count "$.index[?(@.name=='lending_next')].inner.function.sig.output.qualified_path.args.angle_bracketed.bindings[*]" 0
|
||||
//@ is "$.index[?(@.name=='lending_next')].inner.function.sig.output.qualified_path.self_type.generic" \"Self\"
|
||||
//@ is "$.index[?(@.name=='lending_next')].inner.function.sig.output.qualified_path.name" \"LendingItem\"
|
||||
fn lending_next<'a>(&'a self) -> Self::LendingItem<'a>;
|
||||
}
|
||||
|
||||
pub trait Iterator {
|
||||
//@ count "$.index[*][?(@.name=='Item')].inner.assoc_type.generics.params[*]" 0
|
||||
//@ count "$.index[*][?(@.name=='Item')].inner.assoc_type.generics.where_predicates[*]" 0
|
||||
//@ count "$.index[*][?(@.name=='Item')].inner.assoc_type.bounds[*]" 1
|
||||
//@ count "$.index[?(@.name=='Item')].inner.assoc_type.generics.params[*]" 0
|
||||
//@ count "$.index[?(@.name=='Item')].inner.assoc_type.generics.where_predicates[*]" 0
|
||||
//@ count "$.index[?(@.name=='Item')].inner.assoc_type.bounds[*]" 1
|
||||
type Item: Display;
|
||||
|
||||
//@ count "$.index[*][?(@.name=='next')].inner.function.sig.output.qualified_path.args.angle_bracketed.args[*]" 0
|
||||
//@ count "$.index[*][?(@.name=='next')].inner.function.sig.output.qualified_path.args.angle_bracketed.bindings[*]" 0
|
||||
//@ is "$.index[*][?(@.name=='next')].inner.function.sig.output.qualified_path.self_type.generic" \"Self\"
|
||||
//@ is "$.index[*][?(@.name=='next')].inner.function.sig.output.qualified_path.name" \"Item\"
|
||||
//@ count "$.index[?(@.name=='next')].inner.function.sig.output.qualified_path.args.angle_bracketed.args[*]" 0
|
||||
//@ count "$.index[?(@.name=='next')].inner.function.sig.output.qualified_path.args.angle_bracketed.bindings[*]" 0
|
||||
//@ is "$.index[?(@.name=='next')].inner.function.sig.output.qualified_path.self_type.generic" \"Self\"
|
||||
//@ is "$.index[?(@.name=='next')].inner.function.sig.output.qualified_path.name" \"Item\"
|
||||
fn next<'a>(&'a self) -> Self::Item;
|
||||
}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
// Regression test for <https://github.com/rust-lang/rust/issues/97986>.
|
||||
|
||||
//@ has "$.index[*][?(@.name=='f')]"
|
||||
//@ has "$.index[*][?(@.name=='AssocTy')]"
|
||||
//@ has "$.index[*][?(@.name=='AssocConst')]"
|
||||
//@ has "$.index[?(@.name=='f')]"
|
||||
//@ has "$.index[?(@.name=='AssocTy')]"
|
||||
//@ has "$.index[?(@.name=='AssocConst')]"
|
||||
|
||||
pub mod m {
|
||||
pub struct S;
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
#![no_std]
|
||||
|
||||
//@ has "$.index[*][?(@.name=='glob')]"
|
||||
//@ has "$.index[*][?(@.inner.use)].inner.use.name" \"*\"
|
||||
//@ has "$.index[?(@.name=='glob')]"
|
||||
//@ has "$.index[?(@.inner.use)].inner.use.name" \"*\"
|
||||
|
||||
mod m1 {
|
||||
pub fn f() {}
|
||||
|
|
|
@ -4,25 +4,25 @@ pub struct AlwaysTrue;
|
|||
|
||||
/// impl IntoIterator
|
||||
impl IntoIterator for AlwaysTrue {
|
||||
//@ set Item = '$.index[*][?(@.docs=="type Item")].id'
|
||||
//@ set Item = '$.index[?(@.docs=="type Item")].id'
|
||||
/// type Item
|
||||
type Item = bool;
|
||||
|
||||
//@ count '$.index[*][?(@.docs=="type IntoIter")].inner.assoc_type.type.impl_trait[*]' 1
|
||||
//@ is '$.index[*][?(@.docs=="type IntoIter")].inner.assoc_type.type.impl_trait[0].trait_bound.trait.path' '"Iterator"'
|
||||
//@ count '$.index[*][?(@.docs=="type IntoIter")].inner.assoc_type.type.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[*]' 1
|
||||
//@ is '$.index[*][?(@.docs=="type IntoIter")].inner.assoc_type.type.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[0].name' '"Item"'
|
||||
//@ is '$.index[*][?(@.docs=="type IntoIter")].inner.assoc_type.type.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[0].binding.equality.type.primitive' '"bool"'
|
||||
//@ count '$.index[?(@.docs=="type IntoIter")].inner.assoc_type.type.impl_trait[*]' 1
|
||||
//@ is '$.index[?(@.docs=="type IntoIter")].inner.assoc_type.type.impl_trait[0].trait_bound.trait.path' '"Iterator"'
|
||||
//@ count '$.index[?(@.docs=="type IntoIter")].inner.assoc_type.type.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[*]' 1
|
||||
//@ is '$.index[?(@.docs=="type IntoIter")].inner.assoc_type.type.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[0].name' '"Item"'
|
||||
//@ is '$.index[?(@.docs=="type IntoIter")].inner.assoc_type.type.impl_trait[0].trait_bound.trait.args.angle_bracketed.constraints[0].binding.equality.type.primitive' '"bool"'
|
||||
|
||||
//@ set IntoIter = '$.index[*][?(@.docs=="type IntoIter")].id'
|
||||
//@ set IntoIter = '$.index[?(@.docs=="type IntoIter")].id'
|
||||
/// type IntoIter
|
||||
type IntoIter = impl Iterator<Item = bool>;
|
||||
|
||||
//@ set into_iter = '$.index[*][?(@.docs=="fn into_iter")].id'
|
||||
//@ set into_iter = '$.index[?(@.docs=="fn into_iter")].id'
|
||||
/// fn into_iter
|
||||
fn into_iter(self) -> Self::IntoIter {
|
||||
std::iter::repeat(true)
|
||||
}
|
||||
}
|
||||
|
||||
//@ ismany '$.index[*][?(@.docs=="impl IntoIterator")].inner.impl.items[*]' $Item $IntoIter $into_iter
|
||||
//@ ismany '$.index[?(@.docs=="impl IntoIterator")].inner.impl.items[*]' $Item $IntoIter $into_iter
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
//@ is "$.index[*][?(@.name=='hello')].inner.function.sig.output.impl_trait[1].use[0].lifetime" \"\'a\"
|
||||
//@ is "$.index[*][?(@.name=='hello')].inner.function.sig.output.impl_trait[1].use[1].param" \"T\"
|
||||
//@ is "$.index[*][?(@.name=='hello')].inner.function.sig.output.impl_trait[1].use[2].param" \"N\"
|
||||
//@ is "$.index[?(@.name=='hello')].inner.function.sig.output.impl_trait[1].use[0].lifetime" \"\'a\"
|
||||
//@ is "$.index[?(@.name=='hello')].inner.function.sig.output.impl_trait[1].use[1].param" \"T\"
|
||||
//@ is "$.index[?(@.name=='hello')].inner.function.sig.output.impl_trait[1].use[2].param" \"N\"
|
||||
pub fn hello<'a, T, const N: usize>() -> impl Sized + use<'a, T, N> {}
|
||||
|
|
|
@ -15,8 +15,8 @@ impl Foo {
|
|||
}
|
||||
|
||||
// Testing spans, so all tests below code
|
||||
//@ is "$.index[*][?(@.docs=='has span')].span.begin" "[13, 0]"
|
||||
//@ is "$.index[*][?(@.docs=='has span')].span.end" "[15, 1]"
|
||||
//@ is "$.index[?(@.docs=='has span')].span.begin" "[13, 0]"
|
||||
//@ is "$.index[?(@.docs=='has span')].span.end" "[15, 1]"
|
||||
// FIXME: this doesn't work due to https://github.com/freestrings/jsonpath/issues/91
|
||||
// is "$.index[*][?(@.inner.impl.is_synthetic==true)].span" null
|
||||
// is "$.index[?(@.inner.impl.is_synthetic==true)].span" null
|
||||
pub struct Foo;
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// Test for the ICE in rust/83718
|
||||
// A blanket impl plus a local type together shouldn't result in mismatched ID issues
|
||||
|
||||
//@ has "$.index[*][?(@.name=='Load')]"
|
||||
//@ has "$.index[?(@.name=='Load')]"
|
||||
pub trait Load {
|
||||
//@ has "$.index[*][?(@.name=='load')]"
|
||||
//@ has "$.index[?(@.name=='load')]"
|
||||
fn load() {}
|
||||
//@ has "$.index[*][?(@.name=='write')]"
|
||||
//@ has "$.index[?(@.name=='write')]"
|
||||
fn write(self) {}
|
||||
}
|
||||
|
||||
|
@ -14,5 +14,5 @@ impl<P> Load for P {
|
|||
fn write(self) {}
|
||||
}
|
||||
|
||||
//@ has "$.index[*][?(@.name=='Wrapper')]"
|
||||
//@ has "$.index[?(@.name=='Wrapper')]"
|
||||
pub struct Wrapper {}
|
||||
|
|
|
@ -3,16 +3,16 @@ extern crate foreign_trait;
|
|||
|
||||
/// ForeignTrait id hack
|
||||
pub use foreign_trait::ForeignTrait as _;
|
||||
//@ set ForeignTrait = "$.index[*][?(@.docs=='ForeignTrait id hack')].inner.use.id"
|
||||
//@ set ForeignTrait = "$.index[?(@.docs=='ForeignTrait id hack')].inner.use.id"
|
||||
|
||||
pub struct LocalStruct;
|
||||
//@ set LocalStruct = "$.index[*][?(@.name=='LocalStruct')].id"
|
||||
//@ set LocalStruct = "$.index[?(@.name=='LocalStruct')].id"
|
||||
|
||||
/// foreign for local
|
||||
impl foreign_trait::ForeignTrait for LocalStruct {}
|
||||
|
||||
//@ set impl = "$.index[*][?(@.docs=='foreign for local')].id"
|
||||
//@ is "$.index[*][?(@.docs=='foreign for local')].inner.impl.for.resolved_path.id" $LocalStruct
|
||||
//@ is "$.index[*][?(@.docs=='foreign for local')].inner.impl.trait.id" $ForeignTrait
|
||||
//@ set impl = "$.index[?(@.docs=='foreign for local')].id"
|
||||
//@ is "$.index[?(@.docs=='foreign for local')].inner.impl.for.resolved_path.id" $LocalStruct
|
||||
//@ is "$.index[?(@.docs=='foreign for local')].inner.impl.trait.id" $ForeignTrait
|
||||
|
||||
//@ has "$.index[*][?(@.name=='LocalStruct')].inner.struct.impls[*]" $impl
|
||||
//@ has "$.index[?(@.name=='LocalStruct')].inner.struct.impls[*]" $impl
|
||||
|
|
|
@ -4,13 +4,13 @@ pub struct Foo;
|
|||
impl Foo {
|
||||
fn baz() {}
|
||||
}
|
||||
//@ !has '$.index[*][?(@.docs=="impl Foo priv")]'
|
||||
//@ !has '$.index[?(@.docs=="impl Foo priv")]'
|
||||
|
||||
/// impl Foo pub
|
||||
impl Foo {
|
||||
pub fn qux() {}
|
||||
}
|
||||
//@ is '$.index[*][?(@.docs=="impl Foo pub")].visibility' '"default"'
|
||||
//@ is '$.index[?(@.docs=="impl Foo pub")].visibility' '"default"'
|
||||
|
||||
/// impl Foo hidden
|
||||
impl Foo {
|
||||
|
@ -18,4 +18,4 @@ impl Foo {
|
|||
pub fn __quazl() {}
|
||||
}
|
||||
// FIXME(#111564): Is this the right behaviour?
|
||||
//@ is '$.index[*][?(@.docs=="impl Foo hidden")].visibility' '"default"'
|
||||
//@ is '$.index[?(@.docs=="impl Foo hidden")].visibility' '"default"'
|
||||
|
|
|
@ -7,13 +7,13 @@ impl Foo {
|
|||
fn baz() {}
|
||||
}
|
||||
// FIXME(#111564): Is this the right behaviour?
|
||||
//@ is '$.index[*][?(@.docs=="impl Foo priv")].visibility' '"default"'
|
||||
//@ is '$.index[?(@.docs=="impl Foo priv")].visibility' '"default"'
|
||||
|
||||
/// impl Foo pub
|
||||
impl Foo {
|
||||
pub fn qux() {}
|
||||
}
|
||||
//@ is '$.index[*][?(@.docs=="impl Foo pub")].visibility' '"default"'
|
||||
//@ is '$.index[?(@.docs=="impl Foo pub")].visibility' '"default"'
|
||||
|
||||
/// impl Foo hidden
|
||||
impl Foo {
|
||||
|
@ -21,4 +21,4 @@ impl Foo {
|
|||
pub fn __quazl() {}
|
||||
}
|
||||
// FIXME(#111564): Is this the right behaviour?
|
||||
//@ is '$.index[*][?(@.docs=="impl Foo hidden")].visibility' '"default"'
|
||||
//@ is '$.index[?(@.docs=="impl Foo hidden")].visibility' '"default"'
|
||||
|
|
|
@ -6,13 +6,13 @@ pub struct Foo;
|
|||
impl Foo {
|
||||
fn baz() {}
|
||||
}
|
||||
//@ is '$.index[*][?(@.docs=="impl Foo priv")].visibility' '"default"'
|
||||
//@ is '$.index[?(@.docs=="impl Foo priv")].visibility' '"default"'
|
||||
|
||||
/// impl Foo pub
|
||||
impl Foo {
|
||||
pub fn qux() {}
|
||||
}
|
||||
//@ is '$.index[*][?(@.docs=="impl Foo pub")].visibility' '"default"'
|
||||
//@ is '$.index[?(@.docs=="impl Foo pub")].visibility' '"default"'
|
||||
|
||||
/// impl Foo hidden
|
||||
impl Foo {
|
||||
|
@ -20,4 +20,4 @@ impl Foo {
|
|||
pub fn __quazl() {}
|
||||
}
|
||||
// FIXME(#111564): Is this the right behaviour?
|
||||
//@ is '$.index[*][?(@.docs=="impl Foo hidden")].visibility' '"default"'
|
||||
//@ is '$.index[?(@.docs=="impl Foo hidden")].visibility' '"default"'
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
// https://github.com/rust-lang/rust/issues/100252
|
||||
|
||||
mod bar {
|
||||
//@ set baz = "$.index[*][?(@.name == 'Baz')].id"
|
||||
//@ set baz = "$.index[?(@.name == 'Baz')].id"
|
||||
pub struct Baz;
|
||||
//@ set impl = "$.index[*][?(@.docs == 'impl')].id"
|
||||
//@ set impl = "$.index[?(@.docs == 'impl')].id"
|
||||
/// impl
|
||||
impl Baz {
|
||||
//@ set doit = "$.index[*][?(@.name == 'doit')].id"
|
||||
//@ set doit = "$.index[?(@.name == 'doit')].id"
|
||||
pub fn doit() {}
|
||||
}
|
||||
}
|
||||
|
||||
//@ set import = "$.index[*][?(@.inner.use)].id"
|
||||
//@ set import = "$.index[?(@.inner.use)].id"
|
||||
pub use bar::Baz;
|
||||
|
||||
//@ is "$.index[*].inner.module.items[*]" $import
|
||||
//@ is "$.index[*].inner.use.id" $baz
|
||||
//@ has "$.index[*][?(@.name == 'Baz')].inner.struct.impls[*]" $impl
|
||||
//@ is "$.index[*][?(@.docs=='impl')].inner.impl.items[*]" $doit
|
||||
//@ has "$.index[?(@.name == 'Baz')].inner.struct.impls[*]" $impl
|
||||
//@ is "$.index[?(@.docs=='impl')].inner.impl.items[*]" $doit
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
//@ has "$.index[*][?(@.docs=='Here')]"
|
||||
//@ !has "$.index[*][?(@.docs=='Not Here')]"
|
||||
//@ !has "$.index[*][?(@.name == 'HiddenPubStruct')]"
|
||||
//@ has "$.index[*][?(@.name == 'NotHiddenPubStruct')]"
|
||||
//@ has "$.index[*][?(@.name=='PubTrait')]"
|
||||
//@ has "$.index[?(@.docs=='Here')]"
|
||||
//@ !has "$.index[?(@.docs=='Not Here')]"
|
||||
//@ !has "$.index[?(@.name == 'HiddenPubStruct')]"
|
||||
//@ has "$.index[?(@.name == 'NotHiddenPubStruct')]"
|
||||
//@ has "$.index[?(@.name=='PubTrait')]"
|
||||
pub trait PubTrait {}
|
||||
|
||||
#[doc(hidden)]
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
//@ compile-flags: --document-hidden-items
|
||||
|
||||
//@ has "$.index[*][?(@.name == 'HiddenPubStruct')]"
|
||||
//@ has "$.index[*][?(@.inner.impl)]"
|
||||
//@ has "$.index[*][?(@.name=='PubTrait')]"
|
||||
//@ has "$.index[?(@.name == 'HiddenPubStruct')]"
|
||||
//@ has "$.index[?(@.inner.impl)]"
|
||||
//@ has "$.index[?(@.name=='PubTrait')]"
|
||||
pub trait PubTrait {}
|
||||
|
||||
#[doc(hidden)]
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
//@ has "$.index[*][?(@.name=='PubTrait')]"
|
||||
//@ has "$.index[?(@.name=='PubTrait')]"
|
||||
pub trait PubTrait {}
|
||||
|
||||
#[doc(hidden)]
|
||||
pub mod hidden {
|
||||
//@ !has "$.index[*][?(@.name == 'HiddenPubStruct')]"
|
||||
//@ !has "$.index[?(@.name == 'HiddenPubStruct')]"
|
||||
pub struct HiddenPubStruct;
|
||||
|
||||
//@ !has "$.index[*][?(@.docs == 'Not Here')]"
|
||||
//@ !has "$.index[?(@.docs == 'Not Here')]"
|
||||
/// Not Here
|
||||
impl crate::PubTrait for HiddenPubStruct {}
|
||||
}
|
||||
|
||||
pub mod not_hidden {
|
||||
//@ has "$.index[*][?(@.name == 'NotHiddenPubStruct')]"
|
||||
//@ has "$.index[?(@.name == 'NotHiddenPubStruct')]"
|
||||
pub struct NotHiddenPubStruct;
|
||||
|
||||
//@ has "$.index[*][?(@.docs == 'Here')]"
|
||||
//@ has "$.index[?(@.docs == 'Here')]"
|
||||
/// Here
|
||||
impl crate::PubTrait for NotHiddenPubStruct {}
|
||||
}
|
||||
|
|
|
@ -3,16 +3,16 @@ extern crate foreign_struct;
|
|||
|
||||
/// ForeignStruct id hack
|
||||
pub use foreign_struct::ForeignStruct as _;
|
||||
//@ set ForeignStruct = "$.index[*][?(@.docs=='ForeignStruct id hack')].inner.use.id"
|
||||
//@ set ForeignStruct = "$.index[?(@.docs=='ForeignStruct id hack')].inner.use.id"
|
||||
|
||||
pub trait LocalTrait {}
|
||||
//@ set LocalTrait = "$.index[*][?(@.name=='LocalTrait')].id"
|
||||
//@ set LocalTrait = "$.index[?(@.name=='LocalTrait')].id"
|
||||
|
||||
/// local for foreign
|
||||
impl LocalTrait for foreign_struct::ForeignStruct {}
|
||||
|
||||
//@ set impl = "$.index[*][?(@.docs=='local for foreign')].id"
|
||||
//@ is "$.index[*][?(@.docs=='local for foreign')].inner.impl.trait.id" $LocalTrait
|
||||
//@ is "$.index[*][?(@.docs=='local for foreign')].inner.impl.for.resolved_path.id" $ForeignStruct
|
||||
//@ set impl = "$.index[?(@.docs=='local for foreign')].id"
|
||||
//@ is "$.index[?(@.docs=='local for foreign')].inner.impl.trait.id" $LocalTrait
|
||||
//@ is "$.index[?(@.docs=='local for foreign')].inner.impl.for.resolved_path.id" $ForeignStruct
|
||||
|
||||
//@ is "$.index[*][?(@.name=='LocalTrait')].inner.trait.implementations[*]" $impl
|
||||
//@ is "$.index[?(@.name=='LocalTrait')].inner.trait.implementations[*]" $impl
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
//@ set struct = "$.index[*][?(@.name=='Struct')].id"
|
||||
//@ set struct = "$.index[?(@.name=='Struct')].id"
|
||||
pub struct Struct;
|
||||
//@ set trait = "$.index[*][?(@.name=='Trait')].id"
|
||||
//@ set trait = "$.index[?(@.name=='Trait')].id"
|
||||
pub trait Trait {}
|
||||
//@ set impl = "$.index[*][?(@.docs=='impl')].id"
|
||||
//@ set impl = "$.index[?(@.docs=='impl')].id"
|
||||
/// impl
|
||||
impl Trait for Struct {}
|
||||
|
||||
//@ has "$.index[*][?(@.name=='Struct')].inner.struct.impls[*]" $impl
|
||||
//@ is "$.index[*][?(@.name=='Trait')].inner.trait.implementations[*]" $impl
|
||||
//@ is "$.index[*][?(@.docs=='impl')].inner.impl.trait.id" $trait
|
||||
//@ is "$.index[*][?(@.docs=='impl')].inner.impl.for.resolved_path.id" $struct
|
||||
//@ has "$.index[?(@.name=='Struct')].inner.struct.impls[*]" $impl
|
||||
//@ is "$.index[?(@.name=='Trait')].inner.trait.implementations[*]" $impl
|
||||
//@ is "$.index[?(@.docs=='impl')].inner.impl.trait.id" $trait
|
||||
//@ is "$.index[?(@.docs=='impl')].inner.impl.for.resolved_path.id" $struct
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
#![feature(rustc_attrs)]
|
||||
|
||||
//@ set Local = "$.index[*][?(@.name=='Local')].id"
|
||||
//@ set Local = "$.index[?(@.name=='Local')].id"
|
||||
pub trait Local {}
|
||||
|
||||
//@ is "$.index[*][?(@.docs=='Local for bool')].inner.impl.trait.id" $Local
|
||||
//@ is "$.index[*][?(@.docs=='Local for bool')].inner.impl.for.primitive" '"bool"'
|
||||
//@ is "$.index[?(@.docs=='Local for bool')].inner.impl.trait.id" $Local
|
||||
//@ is "$.index[?(@.docs=='Local for bool')].inner.impl.for.primitive" '"bool"'
|
||||
/// Local for bool
|
||||
impl Local for bool {}
|
||||
|
||||
//@ set impl = "$.index[*][?(@.docs=='Local for bool')].id"
|
||||
//@ is "$.index[*][?(@.name=='Local')].inner.trait.implementations[*]" $impl
|
||||
//@ set impl = "$.index[?(@.docs=='Local for bool')].id"
|
||||
//@ is "$.index[?(@.name=='Local')].inner.trait.implementations[*]" $impl
|
||||
|
||||
// FIXME(#101695): Test bool's `impls` include "Local for bool"
|
||||
//@ has "$.index[*][?(@.name=='bool')]"
|
||||
//@ has "$.index[?(@.name=='bool')]"
|
||||
#[rustc_doc_primitive = "bool"]
|
||||
/// Boolean docs
|
||||
mod prim_bool {}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
//@ set local = "$.index[*][?(@.name=='Local')]"
|
||||
//@ set local = "$.index[?(@.name=='Local')]"
|
||||
pub trait Local {}
|
||||
|
||||
//@ set impl = "$.index[*][?(@.docs=='local for bool')].id"
|
||||
//@ is "$.index[*][?(@.name=='Local')].inner.trait.implementations[*]" $impl
|
||||
//@ set impl = "$.index[?(@.docs=='local for bool')].id"
|
||||
//@ is "$.index[?(@.name=='Local')].inner.trait.implementations[*]" $impl
|
||||
/// local for bool
|
||||
impl Local for bool {}
|
||||
|
|
|
@ -5,6 +5,6 @@ pub trait TheTrait {}
|
|||
#[doc(hidden)]
|
||||
struct Value {}
|
||||
|
||||
//@ has '$.index[*][?(@.docs=="THE IMPL")]'
|
||||
//@ has '$.index[?(@.docs=="THE IMPL")]'
|
||||
/// THE IMPL
|
||||
impl TheTrait for Value {}
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
//@ set t1 = '$.index[*][?(@.name=="T1")].id'
|
||||
//@ set t1 = '$.index[?(@.name=="T1")].id'
|
||||
pub trait T1 {}
|
||||
|
||||
//@ set t2 = '$.index[*][?(@.name=="T2")].id'
|
||||
//@ set t2 = '$.index[?(@.name=="T2")].id'
|
||||
pub trait T2 {}
|
||||
|
||||
/// Fun impl
|
||||
impl T1 for dyn T2 {}
|
||||
|
||||
//@ set impl = '$.index[*][?(@.docs=="Fun impl")].id'
|
||||
//@ is '$.index[*][?(@.name=="T1")].inner.trait.implementations[*]' $impl
|
||||
//@ is '$.index[*][?(@.name=="T2")].inner.trait.implementations' []
|
||||
//@ set impl = '$.index[?(@.docs=="Fun impl")].id'
|
||||
//@ is '$.index[?(@.name=="T1")].inner.trait.implementations[*]' $impl
|
||||
//@ is '$.index[?(@.name=="T2")].inner.trait.implementations' []
|
||||
|
||||
//@ is '$.index[*][?(@.docs=="Fun impl")].inner.impl.trait.id' $t1
|
||||
//@ is '$.index[*][?(@.docs=="Fun impl")].inner.impl.for.dyn_trait.traits[*].trait.id' $t2
|
||||
//@ is '$.index[?(@.docs=="Fun impl")].inner.impl.trait.id' $t1
|
||||
//@ is '$.index[?(@.docs=="Fun impl")].inner.impl.for.dyn_trait.traits[*].trait.id' $t2
|
||||
|
|
|
@ -8,6 +8,6 @@ pub struct Local;
|
|||
/// local impl
|
||||
impl enum_variant_in_trait_method::Trait for Local {}
|
||||
|
||||
//@ !has "$.index[*][?(@.name == 'Trait')]"
|
||||
//@ !has "$.index[*][?(@.name == 'method')]"
|
||||
//@ count "$.index[*][?(@.docs == 'local impl')].inner.items[*]" 0
|
||||
//@ !has "$.index[?(@.name == 'Trait')]"
|
||||
//@ !has "$.index[?(@.name == 'method')]"
|
||||
//@ count "$.index[?(@.docs == 'local impl')].inner.items[*]" 0
|
||||
|
|
|
@ -7,17 +7,17 @@
|
|||
//! [`Trait::ASSOC_CONST`]
|
||||
//! [`Trait::method`]
|
||||
|
||||
//@ set struct_field = "$.index[*][?(@.name=='struct_field')].id"
|
||||
//@ set Variant = "$.index[*][?(@.name=='Variant')].id"
|
||||
//@ set AssocType = "$.index[*][?(@.name=='AssocType')].id"
|
||||
//@ set ASSOC_CONST = "$.index[*][?(@.name=='ASSOC_CONST')].id"
|
||||
//@ set method = "$.index[*][?(@.name=='method')].id"
|
||||
//@ set struct_field = "$.index[?(@.name=='struct_field')].id"
|
||||
//@ set Variant = "$.index[?(@.name=='Variant')].id"
|
||||
//@ set AssocType = "$.index[?(@.name=='AssocType')].id"
|
||||
//@ set ASSOC_CONST = "$.index[?(@.name=='ASSOC_CONST')].id"
|
||||
//@ set method = "$.index[?(@.name=='method')].id"
|
||||
|
||||
//@ is "$.index[*][?(@.name=='non_page')].links['`Struct::struct_field`']" $struct_field
|
||||
//@ is "$.index[*][?(@.name=='non_page')].links['`Enum::Variant`']" $Variant
|
||||
//@ is "$.index[*][?(@.name=='non_page')].links['`Trait::AssocType`']" $AssocType
|
||||
//@ is "$.index[*][?(@.name=='non_page')].links['`Trait::ASSOC_CONST`']" $ASSOC_CONST
|
||||
//@ is "$.index[*][?(@.name=='non_page')].links['`Trait::method`']" $method
|
||||
//@ is "$.index[?(@.name=='non_page')].links['`Struct::struct_field`']" $struct_field
|
||||
//@ is "$.index[?(@.name=='non_page')].links['`Enum::Variant`']" $Variant
|
||||
//@ is "$.index[?(@.name=='non_page')].links['`Trait::AssocType`']" $AssocType
|
||||
//@ is "$.index[?(@.name=='non_page')].links['`Trait::ASSOC_CONST`']" $ASSOC_CONST
|
||||
//@ is "$.index[?(@.name=='non_page')].links['`Trait::method`']" $method
|
||||
|
||||
pub struct Struct {
|
||||
pub struct_field: i32,
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
/// To test rustdoc json
|
||||
pub fn foo() {}
|
||||
|
||||
//@ set foo = "$.index[*][?(@.name=='foo')].id"
|
||||
//@ is "$.index[*][?(@.name=='user_written')].links['foo#reasons']" $foo
|
||||
//@ set foo = "$.index[?(@.name=='foo')].id"
|
||||
//@ is "$.index[?(@.name=='user_written')].links['foo#reasons']" $foo
|
||||
|
|
|
@ -6,15 +6,15 @@
|
|||
#![feature(rustdoc_internals)]
|
||||
#![no_std]
|
||||
|
||||
//@ !has "$.index[*][?(@.name=='match')]"
|
||||
//@ has "$.index[*][?(@.name=='foo')]"
|
||||
//@ !has "$.index[?(@.name=='match')]"
|
||||
//@ has "$.index[?(@.name=='foo')]"
|
||||
|
||||
#[doc(keyword = "match")]
|
||||
/// this is a test!
|
||||
pub mod foo {}
|
||||
|
||||
//@ !has "$.index[*][?(@.name=='break')]"
|
||||
//@ !has "$.index[*][?(@.name=='bar')]"
|
||||
//@ !has "$.index[?(@.name=='break')]"
|
||||
//@ !has "$.index[?(@.name=='bar')]"
|
||||
#[doc(keyword = "break")]
|
||||
/// hello
|
||||
mod bar {}
|
||||
|
|
|
@ -3,18 +3,18 @@
|
|||
//@ compile-flags: --document-private-items
|
||||
#![feature(rustdoc_internals)]
|
||||
|
||||
//@ !has "$.index[*][?(@.name=='match')]"
|
||||
//@ has "$.index[*][?(@.name=='foo')]"
|
||||
//@ is "$.index[*][?(@.name=='foo')].attrs" '["#[doc(keyword = \"match\")]"]'
|
||||
//@ is "$.index[*][?(@.name=='foo')].docs" '"this is a test!"'
|
||||
//@ !has "$.index[?(@.name=='match')]"
|
||||
//@ has "$.index[?(@.name=='foo')]"
|
||||
//@ is "$.index[?(@.name=='foo')].attrs" '["#[doc(keyword = \"match\")]"]'
|
||||
//@ is "$.index[?(@.name=='foo')].docs" '"this is a test!"'
|
||||
#[doc(keyword = "match")]
|
||||
/// this is a test!
|
||||
pub mod foo {}
|
||||
|
||||
//@ !has "$.index[*][?(@.name=='break')]"
|
||||
//@ has "$.index[*][?(@.name=='bar')]"
|
||||
//@ is "$.index[*][?(@.name=='bar')].attrs" '["#[doc(keyword = \"break\")]"]'
|
||||
//@ is "$.index[*][?(@.name=='bar')].docs" '"hello"'
|
||||
//@ !has "$.index[?(@.name=='break')]"
|
||||
//@ has "$.index[?(@.name=='bar')]"
|
||||
//@ is "$.index[?(@.name=='bar')].attrs" '["#[doc(keyword = \"break\")]"]'
|
||||
//@ is "$.index[?(@.name=='bar')].docs" '"hello"'
|
||||
#[doc(keyword = "break")]
|
||||
/// hello
|
||||
mod bar {}
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
//@ is "$.index[*][?(@.name=='longest')].inner.function.generics.params[0].name" \"\'a\"
|
||||
//@ is "$.index[*][?(@.name=='longest')].inner.function.generics.params[0].kind" '{"lifetime": {"outlives": []}}'
|
||||
//@ is "$.index[*][?(@.name=='longest')].inner.function.generics.params[0].kind" '{"lifetime": {"outlives": []}}'
|
||||
//@ count "$.index[*][?(@.name=='longest')].inner.function.generics.params[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='longest')].inner.function.generics.where_predicates" []
|
||||
//@ is "$.index[?(@.name=='longest')].inner.function.generics.params[0].name" \"\'a\"
|
||||
//@ is "$.index[?(@.name=='longest')].inner.function.generics.params[0].kind" '{"lifetime": {"outlives": []}}'
|
||||
//@ is "$.index[?(@.name=='longest')].inner.function.generics.params[0].kind" '{"lifetime": {"outlives": []}}'
|
||||
//@ count "$.index[?(@.name=='longest')].inner.function.generics.params[*]" 1
|
||||
//@ is "$.index[?(@.name=='longest')].inner.function.generics.where_predicates" []
|
||||
|
||||
//@ count "$.index[*][?(@.name=='longest')].inner.function.sig.inputs[*]" 2
|
||||
//@ is "$.index[*][?(@.name=='longest')].inner.function.sig.inputs[0][0]" '"l"'
|
||||
//@ is "$.index[*][?(@.name=='longest')].inner.function.sig.inputs[1][0]" '"r"'
|
||||
//@ count "$.index[?(@.name=='longest')].inner.function.sig.inputs[*]" 2
|
||||
//@ is "$.index[?(@.name=='longest')].inner.function.sig.inputs[0][0]" '"l"'
|
||||
//@ is "$.index[?(@.name=='longest')].inner.function.sig.inputs[1][0]" '"r"'
|
||||
|
||||
//@ is "$.index[*][?(@.name=='longest')].inner.function.sig.inputs[0][1].borrowed_ref.lifetime" \"\'a\"
|
||||
//@ is "$.index[*][?(@.name=='longest')].inner.function.sig.inputs[0][1].borrowed_ref.is_mutable" false
|
||||
//@ is "$.index[*][?(@.name=='longest')].inner.function.sig.inputs[0][1].borrowed_ref.type.primitive" \"str\"
|
||||
//@ is "$.index[?(@.name=='longest')].inner.function.sig.inputs[0][1].borrowed_ref.lifetime" \"\'a\"
|
||||
//@ is "$.index[?(@.name=='longest')].inner.function.sig.inputs[0][1].borrowed_ref.is_mutable" false
|
||||
//@ is "$.index[?(@.name=='longest')].inner.function.sig.inputs[0][1].borrowed_ref.type.primitive" \"str\"
|
||||
|
||||
//@ is "$.index[*][?(@.name=='longest')].inner.function.sig.inputs[1][1].borrowed_ref.lifetime" \"\'a\"
|
||||
//@ is "$.index[*][?(@.name=='longest')].inner.function.sig.inputs[1][1].borrowed_ref.is_mutable" false
|
||||
//@ is "$.index[*][?(@.name=='longest')].inner.function.sig.inputs[1][1].borrowed_ref.type.primitive" \"str\"
|
||||
//@ is "$.index[?(@.name=='longest')].inner.function.sig.inputs[1][1].borrowed_ref.lifetime" \"\'a\"
|
||||
//@ is "$.index[?(@.name=='longest')].inner.function.sig.inputs[1][1].borrowed_ref.is_mutable" false
|
||||
//@ is "$.index[?(@.name=='longest')].inner.function.sig.inputs[1][1].borrowed_ref.type.primitive" \"str\"
|
||||
|
||||
//@ is "$.index[*][?(@.name=='longest')].inner.function.sig.output.borrowed_ref.lifetime" \"\'a\"
|
||||
//@ is "$.index[*][?(@.name=='longest')].inner.function.sig.output.borrowed_ref.is_mutable" false
|
||||
//@ is "$.index[*][?(@.name=='longest')].inner.function.sig.output.borrowed_ref.type.primitive" \"str\"
|
||||
//@ is "$.index[?(@.name=='longest')].inner.function.sig.output.borrowed_ref.lifetime" \"\'a\"
|
||||
//@ is "$.index[?(@.name=='longest')].inner.function.sig.output.borrowed_ref.is_mutable" false
|
||||
//@ is "$.index[?(@.name=='longest')].inner.function.sig.output.borrowed_ref.type.primitive" \"str\"
|
||||
|
||||
pub fn longest<'a>(l: &'a str, r: &'a str) -> &'a str {
|
||||
if l.len() > r.len() { l } else { r }
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
//@ count "$.index[*][?(@.name=='foo')].inner.function.generics.params[*]" 3
|
||||
//@ is "$.index[*][?(@.name=='foo')].inner.function.generics.where_predicates" []
|
||||
//@ is "$.index[*][?(@.name=='foo')].inner.function.generics.params[0].name" \"\'a\"
|
||||
//@ is "$.index[*][?(@.name=='foo')].inner.function.generics.params[1].name" \"\'b\"
|
||||
//@ is "$.index[*][?(@.name=='foo')].inner.function.generics.params[2].name" '"T"'
|
||||
//@ is "$.index[*][?(@.name=='foo')].inner.function.generics.params[0].kind.lifetime.outlives" []
|
||||
//@ is "$.index[*][?(@.name=='foo')].inner.function.generics.params[1].kind.lifetime.outlives" [\"\'a\"]
|
||||
//@ is "$.index[*][?(@.name=='foo')].inner.function.generics.params[2].kind.type.default" null
|
||||
//@ count "$.index[*][?(@.name=='foo')].inner.function.generics.params[2].kind.type.bounds[*]" 1
|
||||
//@ is "$.index[*][?(@.name=='foo')].inner.function.generics.params[2].kind.type.bounds[0].outlives" \"\'b\"
|
||||
//@ is "$.index[*][?(@.name=='foo')].inner.function.sig.inputs[0][1].borrowed_ref.lifetime" \"\'a\"
|
||||
//@ is "$.index[*][?(@.name=='foo')].inner.function.sig.inputs[0][1].borrowed_ref.is_mutable" false
|
||||
//@ is "$.index[*][?(@.name=='foo')].inner.function.sig.inputs[0][1].borrowed_ref.type.borrowed_ref.lifetime" \"\'b\"
|
||||
//@ is "$.index[*][?(@.name=='foo')].inner.function.sig.inputs[0][1].borrowed_ref.type.borrowed_ref.is_mutable" false
|
||||
//@ is "$.index[*][?(@.name=='foo')].inner.function.sig.inputs[0][1].borrowed_ref.type.borrowed_ref.type.generic" \"T\"
|
||||
//@ count "$.index[?(@.name=='foo')].inner.function.generics.params[*]" 3
|
||||
//@ is "$.index[?(@.name=='foo')].inner.function.generics.where_predicates" []
|
||||
//@ is "$.index[?(@.name=='foo')].inner.function.generics.params[0].name" \"\'a\"
|
||||
//@ is "$.index[?(@.name=='foo')].inner.function.generics.params[1].name" \"\'b\"
|
||||
//@ is "$.index[?(@.name=='foo')].inner.function.generics.params[2].name" '"T"'
|
||||
//@ is "$.index[?(@.name=='foo')].inner.function.generics.params[0].kind.lifetime.outlives" []
|
||||
//@ is "$.index[?(@.name=='foo')].inner.function.generics.params[1].kind.lifetime.outlives" [\"\'a\"]
|
||||
//@ is "$.index[?(@.name=='foo')].inner.function.generics.params[2].kind.type.default" null
|
||||
//@ count "$.index[?(@.name=='foo')].inner.function.generics.params[2].kind.type.bounds[*]" 1
|
||||
//@ is "$.index[?(@.name=='foo')].inner.function.generics.params[2].kind.type.bounds[0].outlives" \"\'b\"
|
||||
//@ is "$.index[?(@.name=='foo')].inner.function.sig.inputs[0][1].borrowed_ref.lifetime" \"\'a\"
|
||||
//@ is "$.index[?(@.name=='foo')].inner.function.sig.inputs[0][1].borrowed_ref.is_mutable" false
|
||||
//@ is "$.index[?(@.name=='foo')].inner.function.sig.inputs[0][1].borrowed_ref.type.borrowed_ref.lifetime" \"\'b\"
|
||||
//@ is "$.index[?(@.name=='foo')].inner.function.sig.inputs[0][1].borrowed_ref.type.borrowed_ref.is_mutable" false
|
||||
//@ is "$.index[?(@.name=='foo')].inner.function.sig.inputs[0][1].borrowed_ref.type.borrowed_ref.type.generic" \"T\"
|
||||
pub fn foo<'a, 'b: 'a, T: 'b>(_: &'a &'b T) {}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
//@ count '$.index[*][?(@.name=="outlives")].inner.function.generics.params[*]' 2
|
||||
//@ is '$.index[*][?(@.name=="outlives")].inner.function.generics.params[0].name' \"\'a\"
|
||||
//@ is '$.index[*][?(@.name=="outlives")].inner.function.generics.params[0].kind.lifetime.outlives' []
|
||||
//@ is '$.index[*][?(@.name=="outlives")].inner.function.generics.params[1].name' '"T"'
|
||||
//@ is '$.index[*][?(@.name=="outlives")].inner.function.generics.params[1].kind.type.bounds' '[{"outlives": "'\''a"}]'
|
||||
//@ count '$.index[?(@.name=="outlives")].inner.function.generics.params[*]' 2
|
||||
//@ is '$.index[?(@.name=="outlives")].inner.function.generics.params[0].name' \"\'a\"
|
||||
//@ is '$.index[?(@.name=="outlives")].inner.function.generics.params[0].kind.lifetime.outlives' []
|
||||
//@ is '$.index[?(@.name=="outlives")].inner.function.generics.params[1].name' '"T"'
|
||||
//@ is '$.index[?(@.name=="outlives")].inner.function.generics.params[1].kind.type.bounds' '[{"outlives": "'\''a"}]'
|
||||
pub fn outlives<'a, T: 'a>() {}
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
//@ is '$.index[*][?(@.name=="on_lifetimes")].inner.function.generics.where_predicates' '[{"lifetime_predicate": {"lifetime": "'\''all", "outlives": ["'\''a", "'\''b", "'\''c"]}}]'
|
||||
//@ is '$.index[?(@.name=="on_lifetimes")].inner.function.generics.where_predicates' '[{"lifetime_predicate": {"lifetime": "'\''all", "outlives": ["'\''a", "'\''b", "'\''c"]}}]'
|
||||
pub fn on_lifetimes<'a, 'b, 'c, 'all>()
|
||||
where
|
||||
'all: 'a + 'b + 'c,
|
||||
{
|
||||
}
|
||||
|
||||
//@ count '$.index[*][?(@.name=="on_trait")].inner.function.generics.params[*]' 2
|
||||
//@ is '$.index[*][?(@.name=="on_trait")].inner.function.generics.params[0].name' \"\'a\"
|
||||
//@ is '$.index[*][?(@.name=="on_trait")].inner.function.generics.params[0].kind.lifetime.outlives' []
|
||||
//@ is '$.index[*][?(@.name=="on_trait")].inner.function.generics.params[1].name' '"T"'
|
||||
//@ is '$.index[*][?(@.name=="on_trait")].inner.function.generics.params[1].kind.type.bounds' []
|
||||
//@ is '$.index[*][?(@.name=="on_trait")].inner.function.generics.params[1].kind.type.bounds' []
|
||||
//@ count '$.index[*][?(@.name=="on_trait")].inner.function.generics.where_predicates[*]' 1
|
||||
//@ is '$.index[*][?(@.name=="on_trait")].inner.function.generics.where_predicates[0].bound_predicate.type.generic' '"T"'
|
||||
//@ count '$.index[*][?(@.name=="on_trait")].inner.function.generics.where_predicates[0].bound_predicate.bounds[*]' 1
|
||||
//@ is '$.index[*][?(@.name=="on_trait")].inner.function.generics.where_predicates[0].bound_predicate.bounds[0].outlives' \"\'a\"
|
||||
//@ count '$.index[?(@.name=="on_trait")].inner.function.generics.params[*]' 2
|
||||
//@ is '$.index[?(@.name=="on_trait")].inner.function.generics.params[0].name' \"\'a\"
|
||||
//@ is '$.index[?(@.name=="on_trait")].inner.function.generics.params[0].kind.lifetime.outlives' []
|
||||
//@ is '$.index[?(@.name=="on_trait")].inner.function.generics.params[1].name' '"T"'
|
||||
//@ is '$.index[?(@.name=="on_trait")].inner.function.generics.params[1].kind.type.bounds' []
|
||||
//@ is '$.index[?(@.name=="on_trait")].inner.function.generics.params[1].kind.type.bounds' []
|
||||
//@ count '$.index[?(@.name=="on_trait")].inner.function.generics.where_predicates[*]' 1
|
||||
//@ is '$.index[?(@.name=="on_trait")].inner.function.generics.where_predicates[0].bound_predicate.type.generic' '"T"'
|
||||
//@ count '$.index[?(@.name=="on_trait")].inner.function.generics.where_predicates[0].bound_predicate.bounds[*]' 1
|
||||
//@ is '$.index[?(@.name=="on_trait")].inner.function.generics.where_predicates[0].bound_predicate.bounds[0].outlives' \"\'a\"
|
||||
pub fn on_trait<'a, T>()
|
||||
where
|
||||
T: 'a,
|
||||
|
|
|
@ -1,50 +1,50 @@
|
|||
#![feature(abi_vectorcall)]
|
||||
|
||||
//@ has "$.index[*][?(@.name=='Foo')]"
|
||||
//@ has "$.index[?(@.name=='Foo')]"
|
||||
pub struct Foo;
|
||||
|
||||
impl Foo {
|
||||
//@ is "$.index[*][?(@.name=='abi_rust')].inner.function.header.abi" \"Rust\"
|
||||
//@ is "$.index[?(@.name=='abi_rust')].inner.function.header.abi" \"Rust\"
|
||||
pub fn abi_rust() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='abi_c')].inner.function.header.abi" '{"C": {"unwind": false}}'
|
||||
//@ is "$.index[?(@.name=='abi_c')].inner.function.header.abi" '{"C": {"unwind": false}}'
|
||||
pub extern "C" fn abi_c() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='abi_system')].inner.function.header.abi" '{"System": {"unwind": false}}'
|
||||
//@ is "$.index[?(@.name=='abi_system')].inner.function.header.abi" '{"System": {"unwind": false}}'
|
||||
pub extern "system" fn abi_system() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='abi_c_unwind')].inner.function.header.abi" '{"C": {"unwind": true}}'
|
||||
//@ is "$.index[?(@.name=='abi_c_unwind')].inner.function.header.abi" '{"C": {"unwind": true}}'
|
||||
pub extern "C-unwind" fn abi_c_unwind() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='abi_system_unwind')].inner.function.header.abi" '{"System": {"unwind": true}}'
|
||||
//@ is "$.index[?(@.name=='abi_system_unwind')].inner.function.header.abi" '{"System": {"unwind": true}}'
|
||||
pub extern "system-unwind" fn abi_system_unwind() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='abi_vectorcall')].inner.function.header.abi.Other" '"\"vectorcall\""'
|
||||
//@ is "$.index[?(@.name=='abi_vectorcall')].inner.function.header.abi.Other" '"\"vectorcall\""'
|
||||
pub extern "vectorcall" fn abi_vectorcall() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='abi_vectorcall_unwind')].inner.function.header.abi.Other" '"\"vectorcall-unwind\""'
|
||||
//@ is "$.index[?(@.name=='abi_vectorcall_unwind')].inner.function.header.abi.Other" '"\"vectorcall-unwind\""'
|
||||
pub extern "vectorcall-unwind" fn abi_vectorcall_unwind() {}
|
||||
}
|
||||
|
||||
pub trait Bar {
|
||||
//@ is "$.index[*][?(@.name=='trait_abi_rust')].inner.function.header.abi" \"Rust\"
|
||||
//@ is "$.index[?(@.name=='trait_abi_rust')].inner.function.header.abi" \"Rust\"
|
||||
fn trait_abi_rust() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='trait_abi_c')].inner.function.header.abi" '{"C": {"unwind": false}}'
|
||||
//@ is "$.index[?(@.name=='trait_abi_c')].inner.function.header.abi" '{"C": {"unwind": false}}'
|
||||
extern "C" fn trait_abi_c() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='trait_abi_system')].inner.function.header.abi" '{"System": {"unwind": false}}'
|
||||
//@ is "$.index[?(@.name=='trait_abi_system')].inner.function.header.abi" '{"System": {"unwind": false}}'
|
||||
extern "system" fn trait_abi_system() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='trait_abi_c_unwind')].inner.function.header.abi" '{"C": {"unwind": true}}'
|
||||
//@ is "$.index[?(@.name=='trait_abi_c_unwind')].inner.function.header.abi" '{"C": {"unwind": true}}'
|
||||
extern "C-unwind" fn trait_abi_c_unwind() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='trait_abi_system_unwind')].inner.function.header.abi" '{"System": {"unwind": true}}'
|
||||
//@ is "$.index[?(@.name=='trait_abi_system_unwind')].inner.function.header.abi" '{"System": {"unwind": true}}'
|
||||
extern "system-unwind" fn trait_abi_system_unwind() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='trait_abi_vectorcall')].inner.function.header.abi.Other" '"\"vectorcall\""'
|
||||
//@ is "$.index[?(@.name=='trait_abi_vectorcall')].inner.function.header.abi.Other" '"\"vectorcall\""'
|
||||
extern "vectorcall" fn trait_abi_vectorcall() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='trait_abi_vectorcall_unwind')].inner.function.header.abi.Other" '"\"vectorcall-unwind\""'
|
||||
//@ is "$.index[?(@.name=='trait_abi_vectorcall_unwind')].inner.function.header.abi.Other" '"\"vectorcall-unwind\""'
|
||||
extern "vectorcall-unwind" fn trait_abi_vectorcall_unwind() {}
|
||||
}
|
||||
|
|
|
@ -3,34 +3,34 @@
|
|||
pub struct Foo;
|
||||
|
||||
impl Foo {
|
||||
//@ is "$.index[*][?(@.name=='const_meth')].inner.function.header.is_async" false
|
||||
//@ is "$.index[*][?(@.name=='const_meth')].inner.function.header.is_const" true
|
||||
//@ is "$.index[*][?(@.name=='const_meth')].inner.function.header.is_unsafe" false
|
||||
//@ is "$.index[?(@.name=='const_meth')].inner.function.header.is_async" false
|
||||
//@ is "$.index[?(@.name=='const_meth')].inner.function.header.is_const" true
|
||||
//@ is "$.index[?(@.name=='const_meth')].inner.function.header.is_unsafe" false
|
||||
pub const fn const_meth() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='nothing_meth')].inner.function.header.is_async" false
|
||||
//@ is "$.index[*][?(@.name=='nothing_meth')].inner.function.header.is_const" false
|
||||
//@ is "$.index[*][?(@.name=='nothing_meth')].inner.function.header.is_unsafe" false
|
||||
//@ is "$.index[?(@.name=='nothing_meth')].inner.function.header.is_async" false
|
||||
//@ is "$.index[?(@.name=='nothing_meth')].inner.function.header.is_const" false
|
||||
//@ is "$.index[?(@.name=='nothing_meth')].inner.function.header.is_unsafe" false
|
||||
pub fn nothing_meth() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='unsafe_meth')].inner.function.header.is_async" false
|
||||
//@ is "$.index[*][?(@.name=='unsafe_meth')].inner.function.header.is_const" false
|
||||
//@ is "$.index[*][?(@.name=='unsafe_meth')].inner.function.header.is_unsafe" true
|
||||
//@ is "$.index[?(@.name=='unsafe_meth')].inner.function.header.is_async" false
|
||||
//@ is "$.index[?(@.name=='unsafe_meth')].inner.function.header.is_const" false
|
||||
//@ is "$.index[?(@.name=='unsafe_meth')].inner.function.header.is_unsafe" true
|
||||
pub unsafe fn unsafe_meth() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='async_meth')].inner.function.header.is_async" true
|
||||
//@ is "$.index[*][?(@.name=='async_meth')].inner.function.header.is_const" false
|
||||
//@ is "$.index[*][?(@.name=='async_meth')].inner.function.header.is_unsafe" false
|
||||
//@ is "$.index[?(@.name=='async_meth')].inner.function.header.is_async" true
|
||||
//@ is "$.index[?(@.name=='async_meth')].inner.function.header.is_const" false
|
||||
//@ is "$.index[?(@.name=='async_meth')].inner.function.header.is_unsafe" false
|
||||
pub async fn async_meth() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='async_unsafe_meth')].inner.function.header.is_async" true
|
||||
//@ is "$.index[*][?(@.name=='async_unsafe_meth')].inner.function.header.is_const" false
|
||||
//@ is "$.index[*][?(@.name=='async_unsafe_meth')].inner.function.header.is_unsafe" true
|
||||
//@ is "$.index[?(@.name=='async_unsafe_meth')].inner.function.header.is_async" true
|
||||
//@ is "$.index[?(@.name=='async_unsafe_meth')].inner.function.header.is_const" false
|
||||
//@ is "$.index[?(@.name=='async_unsafe_meth')].inner.function.header.is_unsafe" true
|
||||
pub async unsafe fn async_unsafe_meth() {}
|
||||
|
||||
//@ is "$.index[*][?(@.name=='const_unsafe_meth')].inner.function.header.is_async" false
|
||||
//@ is "$.index[*][?(@.name=='const_unsafe_meth')].inner.function.header.is_const" true
|
||||
//@ is "$.index[*][?(@.name=='const_unsafe_meth')].inner.function.header.is_unsafe" true
|
||||
//@ is "$.index[?(@.name=='const_unsafe_meth')].inner.function.header.is_async" false
|
||||
//@ is "$.index[?(@.name=='const_unsafe_meth')].inner.function.header.is_const" true
|
||||
//@ is "$.index[?(@.name=='const_unsafe_meth')].inner.function.header.is_unsafe" true
|
||||
pub const unsafe fn const_unsafe_meth() {}
|
||||
|
||||
// It's impossible for a method to be both const and async, so no test for that
|
||||
|
|
|
@ -2,31 +2,31 @@
|
|||
//@ compile-flags: --crate-version 1.0.0
|
||||
|
||||
//@ is "$.crate_version" \"1.0.0\"
|
||||
//@ has "$.index[*][?(@.name=='nested')].inner.module"
|
||||
//@ is "$.index[*][?(@.name=='nested')].inner.module.is_crate" true
|
||||
//@ has "$.index[?(@.name=='nested')].inner.module"
|
||||
//@ is "$.index[?(@.name=='nested')].inner.module.is_crate" true
|
||||
|
||||
//@ set l1_id = "$.index[*][?(@.name=='l1')].id"
|
||||
//@ ismany "$.index[*][?(@.name=='nested')].inner.module.items[*]" $l1_id
|
||||
//@ set l1_id = "$.index[?(@.name=='l1')].id"
|
||||
//@ ismany "$.index[?(@.name=='nested')].inner.module.items[*]" $l1_id
|
||||
|
||||
//@ has "$.index[*][?(@.name=='l1')].inner.module"
|
||||
//@ is "$.index[*][?(@.name=='l1')].inner.module.is_crate" false
|
||||
//@ has "$.index[?(@.name=='l1')].inner.module"
|
||||
//@ is "$.index[?(@.name=='l1')].inner.module.is_crate" false
|
||||
pub mod l1 {
|
||||
//@ has "$.index[*][?(@.name=='l3')].inner.module"
|
||||
//@ is "$.index[*][?(@.name=='l3')].inner.module.is_crate" false
|
||||
//@ set l3_id = "$.index[*][?(@.name=='l3')].id"
|
||||
//@ has "$.index[?(@.name=='l3')].inner.module"
|
||||
//@ is "$.index[?(@.name=='l3')].inner.module.is_crate" false
|
||||
//@ set l3_id = "$.index[?(@.name=='l3')].id"
|
||||
pub mod l3 {
|
||||
|
||||
//@ has "$.index[*][?(@.name=='L4')].inner.struct"
|
||||
//@ is "$.index[*][?(@.name=='L4')].inner.struct.kind" '"unit"'
|
||||
//@ set l4_id = "$.index[*][?(@.name=='L4')].id"
|
||||
//@ ismany "$.index[*][?(@.name=='l3')].inner.module.items[*]" $l4_id
|
||||
//@ has "$.index[?(@.name=='L4')].inner.struct"
|
||||
//@ is "$.index[?(@.name=='L4')].inner.struct.kind" '"unit"'
|
||||
//@ set l4_id = "$.index[?(@.name=='L4')].id"
|
||||
//@ ismany "$.index[?(@.name=='l3')].inner.module.items[*]" $l4_id
|
||||
pub struct L4;
|
||||
}
|
||||
//@ is "$.index[*][?(@.inner.use)].inner.use.is_glob" false
|
||||
//@ is "$.index[*][?(@.inner.use)].inner.use.source" '"l3::L4"'
|
||||
//@ is "$.index[*][?(@.inner.use)].inner.use.is_glob" false
|
||||
//@ is "$.index[*][?(@.inner.use)].inner.use.id" $l4_id
|
||||
//@ set l4_use_id = "$.index[*][?(@.inner.use)].id"
|
||||
//@ is "$.index[?(@.inner.use)].inner.use.is_glob" false
|
||||
//@ is "$.index[?(@.inner.use)].inner.use.source" '"l3::L4"'
|
||||
//@ is "$.index[?(@.inner.use)].inner.use.is_glob" false
|
||||
//@ is "$.index[?(@.inner.use)].inner.use.id" $l4_id
|
||||
//@ set l4_use_id = "$.index[?(@.inner.use)].id"
|
||||
pub use l3::L4;
|
||||
}
|
||||
//@ ismany "$.index[*][?(@.name=='l1')].inner.module.items[*]" $l3_id $l4_use_id
|
||||
//@ ismany "$.index[?(@.name=='l1')].inner.module.items[*]" $l3_id $l4_use_id
|
||||
|
|
|
@ -5,11 +5,11 @@ pub trait Trait {}
|
|||
|
||||
pub struct Wrapper<T_>(std::marker::PhantomData<T_>);
|
||||
|
||||
//@ count "$.index[*][?(@.name=='foo')].inner.function.generics.where_predicates[0].bound_predicate.generic_params[*]" 2
|
||||
//@ is "$.index[*][?(@.name=='foo')].inner.function.generics.where_predicates[0].bound_predicate.generic_params[0].name" \"\'a\"
|
||||
//@ is "$.index[*][?(@.name=='foo')].inner.function.generics.where_predicates[0].bound_predicate.generic_params[0].kind" '{ "lifetime": { "outlives": [] } }'
|
||||
//@ is "$.index[*][?(@.name=='foo')].inner.function.generics.where_predicates[0].bound_predicate.generic_params[1].name" \"T\"
|
||||
//@ is "$.index[*][?(@.name=='foo')].inner.function.generics.where_predicates[0].bound_predicate.generic_params[1].kind" '{ "type": { "bounds": [], "default": null, "is_synthetic": false } }'
|
||||
//@ count "$.index[?(@.name=='foo')].inner.function.generics.where_predicates[0].bound_predicate.generic_params[*]" 2
|
||||
//@ is "$.index[?(@.name=='foo')].inner.function.generics.where_predicates[0].bound_predicate.generic_params[0].name" \"\'a\"
|
||||
//@ is "$.index[?(@.name=='foo')].inner.function.generics.where_predicates[0].bound_predicate.generic_params[0].kind" '{ "lifetime": { "outlives": [] } }'
|
||||
//@ is "$.index[?(@.name=='foo')].inner.function.generics.where_predicates[0].bound_predicate.generic_params[1].name" \"T\"
|
||||
//@ is "$.index[?(@.name=='foo')].inner.function.generics.where_predicates[0].bound_predicate.generic_params[1].kind" '{ "type": { "bounds": [], "default": null, "is_synthetic": false } }'
|
||||
pub fn foo()
|
||||
where
|
||||
for<'a, T> &'a Wrapper<T>: Trait,
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
// This is a regression test for #98009.
|
||||
|
||||
//@ has "$.index[*][?(@.name=='this_compiles')]"
|
||||
//@ has "$.index[*][?(@.name=='this_does_not')]"
|
||||
//@ has "$.index[*][?(@.name=='Events')]"
|
||||
//@ has "$.index[*][?(@.name=='Other')]"
|
||||
//@ has "$.index[*][?(@.name=='Trait')]"
|
||||
//@ has "$.index[?(@.name=='this_compiles')]"
|
||||
//@ has "$.index[?(@.name=='this_does_not')]"
|
||||
//@ has "$.index[?(@.name=='Events')]"
|
||||
//@ has "$.index[?(@.name=='Other')]"
|
||||
//@ has "$.index[?(@.name=='Trait')]"
|
||||
|
||||
struct Events<R>(R);
|
||||
|
||||
|
|
|
@ -19,49 +19,49 @@ pub use priv_mod::{InPrivMod, InPrivMod as InPrivMod2};
|
|||
use pub_mod::InPubMod as InPubMod3;
|
||||
pub use pub_mod::{InPubMod, InPubMod as InPubMod2};
|
||||
|
||||
//@ is "$.index[*][?(@.name=='T0')].inner.type_alias.type.resolved_path.path" '"priv_mod::InPrivMod"'
|
||||
//@ is "$.index[?(@.name=='T0')].inner.type_alias.type.resolved_path.path" '"priv_mod::InPrivMod"'
|
||||
pub type T0 = priv_mod::InPrivMod;
|
||||
//@ is "$.index[*][?(@.name=='T1')].inner.type_alias.type.resolved_path.path" '"InPrivMod"'
|
||||
//@ is "$.index[?(@.name=='T1')].inner.type_alias.type.resolved_path.path" '"InPrivMod"'
|
||||
pub type T1 = InPrivMod;
|
||||
//@ is "$.index[*][?(@.name=='T2')].inner.type_alias.type.resolved_path.path" '"InPrivMod2"'
|
||||
//@ is "$.index[?(@.name=='T2')].inner.type_alias.type.resolved_path.path" '"InPrivMod2"'
|
||||
pub type T2 = InPrivMod2;
|
||||
//@ is "$.index[*][?(@.name=='T3')].inner.type_alias.type.resolved_path.path" '"priv_mod::InPrivMod"'
|
||||
//@ is "$.index[?(@.name=='T3')].inner.type_alias.type.resolved_path.path" '"priv_mod::InPrivMod"'
|
||||
pub type T3 = InPrivMod3;
|
||||
|
||||
//@ is "$.index[*][?(@.name=='U0')].inner.type_alias.type.resolved_path.path" '"pub_mod::InPubMod"'
|
||||
//@ is "$.index[?(@.name=='U0')].inner.type_alias.type.resolved_path.path" '"pub_mod::InPubMod"'
|
||||
pub type U0 = pub_mod::InPubMod;
|
||||
//@ is "$.index[*][?(@.name=='U1')].inner.type_alias.type.resolved_path.path" '"InPubMod"'
|
||||
//@ is "$.index[?(@.name=='U1')].inner.type_alias.type.resolved_path.path" '"InPubMod"'
|
||||
pub type U1 = InPubMod;
|
||||
//@ is "$.index[*][?(@.name=='U2')].inner.type_alias.type.resolved_path.path" '"InPubMod2"'
|
||||
//@ is "$.index[?(@.name=='U2')].inner.type_alias.type.resolved_path.path" '"InPubMod2"'
|
||||
pub type U2 = InPubMod2;
|
||||
//@ is "$.index[*][?(@.name=='U3')].inner.type_alias.type.resolved_path.path" '"pub_mod::InPubMod"'
|
||||
//@ is "$.index[?(@.name=='U3')].inner.type_alias.type.resolved_path.path" '"pub_mod::InPubMod"'
|
||||
pub type U3 = InPubMod3;
|
||||
|
||||
// Check we only have paths for structs at their original path
|
||||
//@ ismany "$.paths[*][?(@.crate_id==0 && @.kind=='struct')].path" '["path_name", "priv_mod", "InPrivMod"]' '["path_name", "pub_mod", "InPubMod"]'
|
||||
//@ ismany "$.paths[?(@.crate_id==0 && @.kind=='struct')].path" '["path_name", "priv_mod", "InPrivMod"]' '["path_name", "pub_mod", "InPubMod"]'
|
||||
|
||||
pub use defines_and_reexports::{InPrivMod as XPrivMod, InPubMod as XPubMod};
|
||||
use defines_and_reexports::{InPrivMod as XPrivMod2, InPubMod as XPubMod2};
|
||||
|
||||
//@ is "$.index[*][?(@.name=='X0')].inner.type_alias.type.resolved_path.path" '"defines_and_reexports::m1::InPubMod"'
|
||||
//@ is "$.index[?(@.name=='X0')].inner.type_alias.type.resolved_path.path" '"defines_and_reexports::m1::InPubMod"'
|
||||
pub type X0 = defines_and_reexports::m1::InPubMod;
|
||||
//@ is "$.index[*][?(@.name=='X1')].inner.type_alias.type.resolved_path.path" '"defines_and_reexports::InPubMod"'
|
||||
//@ is "$.index[?(@.name=='X1')].inner.type_alias.type.resolved_path.path" '"defines_and_reexports::InPubMod"'
|
||||
pub type X1 = defines_and_reexports::InPubMod;
|
||||
//@ is "$.index[*][?(@.name=='X2')].inner.type_alias.type.resolved_path.path" '"defines_and_reexports::InPubMod2"'
|
||||
//@ is "$.index[?(@.name=='X2')].inner.type_alias.type.resolved_path.path" '"defines_and_reexports::InPubMod2"'
|
||||
pub type X2 = defines_and_reexports::InPubMod2;
|
||||
//@ is "$.index[*][?(@.name=='X3')].inner.type_alias.type.resolved_path.path" '"XPubMod"'
|
||||
//@ is "$.index[?(@.name=='X3')].inner.type_alias.type.resolved_path.path" '"XPubMod"'
|
||||
pub type X3 = XPubMod;
|
||||
// N.B. This isn't the path as used *or* the original path!
|
||||
//@ is "$.index[*][?(@.name=='X4')].inner.type_alias.type.resolved_path.path" '"defines_and_reexports::InPubMod"'
|
||||
//@ is "$.index[?(@.name=='X4')].inner.type_alias.type.resolved_path.path" '"defines_and_reexports::InPubMod"'
|
||||
pub type X4 = XPubMod2;
|
||||
|
||||
//@ is "$.index[*][?(@.name=='Y1')].inner.type_alias.type.resolved_path.path" '"defines_and_reexports::InPrivMod"'
|
||||
//@ is "$.index[?(@.name=='Y1')].inner.type_alias.type.resolved_path.path" '"defines_and_reexports::InPrivMod"'
|
||||
pub type Y1 = defines_and_reexports::InPrivMod;
|
||||
//@ is "$.index[*][?(@.name=='Y2')].inner.type_alias.type.resolved_path.path" '"defines_and_reexports::InPrivMod2"'
|
||||
//@ is "$.index[?(@.name=='Y2')].inner.type_alias.type.resolved_path.path" '"defines_and_reexports::InPrivMod2"'
|
||||
pub type Y2 = defines_and_reexports::InPrivMod2;
|
||||
//@ is "$.index[*][?(@.name=='Y3')].inner.type_alias.type.resolved_path.path" '"XPrivMod"'
|
||||
//@ is "$.index[?(@.name=='Y3')].inner.type_alias.type.resolved_path.path" '"XPrivMod"'
|
||||
pub type Y3 = XPrivMod;
|
||||
//@ is "$.index[*][?(@.name=='Y4')].inner.type_alias.type.resolved_path.path" '"defines_and_reexports::InPrivMod"'
|
||||
//@ is "$.index[?(@.name=='Y4')].inner.type_alias.type.resolved_path.path" '"defines_and_reexports::InPrivMod"'
|
||||
pub type Y4 = XPrivMod2;
|
||||
|
||||
// For foreign items, $.paths contains the *origional* path, even if it's not publicly
|
||||
|
@ -74,9 +74,9 @@ pub type Y4 = XPrivMod2;
|
|||
|
||||
// Tests for the example in the docs of Path::name.
|
||||
// If these change, chage the docs.
|
||||
//@ is "$.index[*][?(@.name=='Vec1')].inner.type_alias.type.resolved_path.path" '"std::vec::Vec"'
|
||||
//@ is "$.index[?(@.name=='Vec1')].inner.type_alias.type.resolved_path.path" '"std::vec::Vec"'
|
||||
pub type Vec1 = std::vec::Vec<i32>;
|
||||
//@ is "$.index[*][?(@.name=='Vec2')].inner.type_alias.type.resolved_path.path" '"Vec"'
|
||||
//@ is "$.index[?(@.name=='Vec2')].inner.type_alias.type.resolved_path.path" '"Vec"'
|
||||
pub type Vec2 = Vec<i32>;
|
||||
//@ is "$.index[*][?(@.name=='Vec3')].inner.type_alias.type.resolved_path.path" '"std::prelude::v1::Vec"'
|
||||
//@ is "$.index[?(@.name=='Vec3')].inner.type_alias.type.resolved_path.path" '"std::prelude::v1::Vec"'
|
||||
pub type Vec3 = std::prelude::v1::Vec<i32>;
|
||||
|
|
|
@ -11,11 +11,11 @@
|
|||
#[rustc_doc_primitive = "i32"]
|
||||
mod prim_i32 {}
|
||||
|
||||
//@ set local_i32 = "$.index[*][?(@.name=='i32')].id"
|
||||
//@ set local_i32 = "$.index[?(@.name=='i32')].id"
|
||||
|
||||
//@ has "$.index[*][?(@.name=='local_primitive')]"
|
||||
//@ ismany "$.index[*][?(@.name=='local_primitive')].inner.module.items[*]" $local_i32
|
||||
//@ is "$.index[*][?(@.name=='local_primitive')].links['prim@i32']" $local_i32
|
||||
//@ has "$.index[?(@.name=='local_primitive')]"
|
||||
//@ ismany "$.index[?(@.name=='local_primitive')].inner.module.items[*]" $local_i32
|
||||
//@ is "$.index[?(@.name=='local_primitive')].links['prim@i32']" $local_i32
|
||||
|
||||
// Let's ensure the `prim_i32` module isn't present in the output JSON:
|
||||
//@ !has "$.index[*][?(@.name=='prim_i32')]"
|
||||
//@ !has "$.index[?(@.name=='prim_i32')]"
|
||||
|
|
|
@ -4,26 +4,26 @@
|
|||
#![no_core]
|
||||
#![rustc_coherence_is_core]
|
||||
|
||||
//@ set impl_i32 = "$.index[*][?(@.docs=='Only core can do this')].id"
|
||||
//@ set impl_i32 = "$.index[?(@.docs=='Only core can do this')].id"
|
||||
|
||||
#[lang = "sized"]
|
||||
trait Sized {}
|
||||
|
||||
/// Only core can do this
|
||||
impl i32 {
|
||||
//@ set identity = "$.index[*][?(@.docs=='Do Nothing')].id"
|
||||
//@ set identity = "$.index[?(@.docs=='Do Nothing')].id"
|
||||
|
||||
/// Do Nothing
|
||||
pub fn identity(self) -> Self {
|
||||
self
|
||||
}
|
||||
|
||||
//@ is "$.index[*][?(@.docs=='Only core can do this')].inner.impl.items[*]" $identity
|
||||
//@ is "$.index[?(@.docs=='Only core can do this')].inner.impl.items[*]" $identity
|
||||
}
|
||||
|
||||
//@ set Trait = "$.index[*][?(@.name=='Trait')].id"
|
||||
//@ set Trait = "$.index[?(@.name=='Trait')].id"
|
||||
pub trait Trait {}
|
||||
//@ set impl_trait_for_i32 = "$.index[*][?(@.docs=='impl Trait for i32')].id"
|
||||
//@ set impl_trait_for_i32 = "$.index[?(@.docs=='impl Trait for i32')].id"
|
||||
/// impl Trait for i32
|
||||
impl Trait for i32 {}
|
||||
|
||||
|
@ -31,7 +31,7 @@ impl Trait for i32 {}
|
|||
#[rustc_doc_primitive = "i32"]
|
||||
mod prim_i32 {}
|
||||
|
||||
//@ set i32 = "$.index[*][?(@.docs=='i32')].id"
|
||||
//@ is "$.index[*][?(@.docs=='i32')].name" '"i32"'
|
||||
//@ is "$.index[*][?(@.docs=='i32')].inner.primitive.name" '"i32"'
|
||||
//@ ismany "$.index[*][?(@.docs=='i32')].inner.primitive.impls[*]" $impl_i32 $impl_trait_for_i32
|
||||
//@ set i32 = "$.index[?(@.docs=='i32')].id"
|
||||
//@ is "$.index[?(@.docs=='i32')].name" '"i32"'
|
||||
//@ is "$.index[?(@.docs=='i32')].inner.primitive.name" '"i32"'
|
||||
//@ ismany "$.index[?(@.docs=='i32')].inner.primitive.impls[*]" $impl_i32 $impl_trait_for_i32
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue