forked from OSchip/llvm-project
[Demangle][Rust] Parse dyn-bounds
Reviewed By: dblaikie Differential Revision: https://reviews.llvm.org/D103151
This commit is contained in:
parent
fb5b590b5e
commit
89615a5e92
|
@ -89,6 +89,7 @@ private:
|
|||
void demangleGenericArg();
|
||||
void demangleType();
|
||||
void demangleFnSig();
|
||||
void demangleDynBounds();
|
||||
void demangleOptionalBinder();
|
||||
void demangleConst();
|
||||
void demangleConstInt();
|
||||
|
|
|
@ -480,6 +480,17 @@ void Demangler::demangleType() {
|
|||
case 'F':
|
||||
demangleFnSig();
|
||||
break;
|
||||
case 'D':
|
||||
demangleDynBounds();
|
||||
if (consumeIf('L')) {
|
||||
if (auto Lifetime = parseBase62Number()) {
|
||||
print(" + ");
|
||||
printLifetime(Lifetime);
|
||||
}
|
||||
} else {
|
||||
Error = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
Position = Start;
|
||||
demanglePath(rust_demangle::InType::Yes);
|
||||
|
@ -529,6 +540,16 @@ void Demangler::demangleFnSig() {
|
|||
}
|
||||
}
|
||||
|
||||
// <dyn-bounds> = [<binder>] {<dyn-trait>} "E"
|
||||
void Demangler::demangleDynBounds() {
|
||||
SwapAndRestore<size_t> SaveBoundLifetimes(BoundLifetimes, BoundLifetimes);
|
||||
print("dyn ");
|
||||
demangleOptionalBinder();
|
||||
// FIXME demangle {dyn-trait}
|
||||
if (!consumeIf('E'))
|
||||
Error = true;
|
||||
}
|
||||
|
||||
// Demangles optional binder and updates the number of bound lifetimes.
|
||||
//
|
||||
// <binder> = "G" <base-62-number>
|
||||
|
|
|
@ -232,6 +232,22 @@ CHECK: function::<extern "cdecl" fn()>
|
|||
CHECK: function::<unsafe extern "C-cmse-nonsecure-call" fn()>
|
||||
_RIC8functionFUK21C_cmse_nonsecure_callEuE
|
||||
|
||||
; Trait objects
|
||||
|
||||
CHECK: trait::<dyn >
|
||||
_RIC5traitDEL_E
|
||||
|
||||
CHECK: trait::<dyn for<'a> >
|
||||
_RIC5traitDG_EL_E
|
||||
|
||||
CHECK: trait::<for<'a> fn(dyn for<'b> + 'a)>
|
||||
_RIC5traitFG_DG_EL0_EuE
|
||||
|
||||
; Invalid trait object, missing lifetime.
|
||||
|
||||
CHECK: _RIC5traitDEE
|
||||
_RIC5traitDEE
|
||||
|
||||
; Binders
|
||||
|
||||
CHECK: binders::<for<'a> fn(&'a _)>
|
||||
|
|
Loading…
Reference in New Issue