mirror of
https://github.com/dlang/dmd.git
synced 2025-04-27 21:51:03 +03:00
66 lines
1.8 KiB
D
66 lines
1.8 KiB
D
// helper for mangling tests with back references
|
|
|
|
module imports.testmangle;
|
|
|
|
public import core.demangle : demangle, demangleType;
|
|
|
|
// detect mangle version
|
|
private
|
|
{
|
|
struct Detect;
|
|
Detect* detectMangle(Detect*);
|
|
void DetectTmpl(T)() {}
|
|
}
|
|
|
|
pragma(msg,detectMangle.mangleof);
|
|
static if(detectMangle.mangleof == "_D7imports10testmangle12detectMangleFPSQL3H6DetectZQ1e")
|
|
enum { BackRefs = true, BackRefSymbols = true }
|
|
else static if(detectMangle.mangleof == "_D7imports10testmangle12detectMangleFPSQBlQBg6DetectZQq")
|
|
enum { BackRefs = true, BackRefSymbols = false }
|
|
else static if(detectMangle.mangleof == "_D7imports10testmangle12detectMangleFPS7imports10testmangle6DetectZPS7imports10testmangle6Detect")
|
|
enum { BackRefs = false, BackRefSymbols = false }
|
|
else
|
|
static assert(false, "unknown mangling");
|
|
|
|
private enum tmplMangle = (DetectTmpl!int).mangleof;
|
|
pragma(msg,tmplMangle);
|
|
static if(tmplMangle[0..40] == "_D7imports10testmangle__T10DetectTmplTiZ")
|
|
enum HasTemplateLength = false;
|
|
else static if(tmplMangle[0..42] == "_D7imports10testmangle18__T10DetectTmplTiZ")
|
|
enum HasTemplateLength = true;
|
|
else
|
|
static assert(false, "unknown mangling");
|
|
|
|
pragma(msg,BackRefs);
|
|
pragma(msg,BackRefSymbols);
|
|
|
|
static if (BackRefs)
|
|
{
|
|
string tl(string s)() { return null; }
|
|
string id(string s, string r, string r2 = null)() { return BackRefSymbols && r2 !is null ? r2 : r; }
|
|
}
|
|
else
|
|
{
|
|
string tl(string s)() { return HasTemplateLength ? s : null; }
|
|
string id(string s, string r, string r2 = null)() { return s; }
|
|
}
|
|
|
|
bool equalDemangle(string m1, string m2)
|
|
{
|
|
auto dm1 = demangle(m1);
|
|
auto dm2 = demangle(m2);
|
|
return dm1 == dm2;
|
|
}
|
|
|
|
string unsignedToString(ulong x)
|
|
{
|
|
string s;
|
|
s ~= cast(char)('0' + (x % 10));
|
|
x /= 10;
|
|
while (x > 0)
|
|
{
|
|
s = cast(char)('0' + (x % 10)) ~ s;
|
|
x /= 10;
|
|
}
|
|
return s;
|
|
}
|