mirror of
https://github.com/dlang/dmd.git
synced 2025-04-28 14:10:11 +03:00
core.demangle: refactor errMsg assignment to a function (#16132)
This commit is contained in:
parent
1a28bc9a50
commit
c5c4def18f
1 changed files with 29 additions and 45 deletions
|
@ -507,17 +507,20 @@ pure @safe:
|
||||||
if (r) return;
|
if (r) return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void error(string msg)
|
||||||
|
{
|
||||||
|
errMsg = msg;
|
||||||
|
}
|
||||||
|
|
||||||
if ( front == 'Q' )
|
if ( front == 'Q' )
|
||||||
{
|
{
|
||||||
// back reference to LName
|
// back reference to LName
|
||||||
auto refPos = pos;
|
auto refPos = pos;
|
||||||
popFront();
|
popFront();
|
||||||
size_t n = decodeBackref();
|
size_t n = decodeBackref();
|
||||||
if ( !n || n > refPos )
|
if (!n || n > refPos)
|
||||||
{
|
return error("Invalid LName back reference");
|
||||||
errMsg = "Invalid LName back reference";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ( !mute )
|
if ( !mute )
|
||||||
{
|
{
|
||||||
auto savePos = pos;
|
auto savePos = pos;
|
||||||
|
@ -531,10 +534,7 @@ pure @safe:
|
||||||
bool err_flag;
|
bool err_flag;
|
||||||
auto n = decodeNumber(err_flag);
|
auto n = decodeNumber(err_flag);
|
||||||
if (err_flag)
|
if (err_flag)
|
||||||
{
|
return error("Number overflow");
|
||||||
errMsg = "Number overflow";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( n == 0 )
|
if ( n == 0 )
|
||||||
{
|
{
|
||||||
|
@ -542,22 +542,15 @@ pure @safe:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ( n > buf.length || n > buf.length - pos )
|
if ( n > buf.length || n > buf.length - pos )
|
||||||
{
|
return error("LName must be at least 1 character");
|
||||||
errMsg = "LName must be at least 1 character";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ( '_' != front && !isAlpha( front ) )
|
if ( '_' != front && !isAlpha( front ) )
|
||||||
{
|
return error("Invalid character in LName");
|
||||||
errMsg = "Invalid character in LName";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
foreach (char e; buf[pos + 1 .. pos + n] )
|
foreach (char e; buf[pos + 1 .. pos + n] )
|
||||||
{
|
{
|
||||||
if ( '_' != e && !isAlpha( e ) && !isDigit( e ) )
|
if ( '_' != e && !isAlpha( e ) && !isDigit( e ) )
|
||||||
{
|
return error("Invalid character in LName");
|
||||||
errMsg = "Invalid character in LName";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
put( buf[pos .. pos + n] );
|
put( buf[pos .. pos + n] );
|
||||||
|
@ -2321,6 +2314,11 @@ char[] reencodeMangled(return scope const(char)[] mangled) nothrow pure @safe
|
||||||
|
|
||||||
bool parseLName(out string errMsg, scope ref Remangle d) scope @trusted nothrow
|
bool parseLName(out string errMsg, scope ref Remangle d) scope @trusted nothrow
|
||||||
{
|
{
|
||||||
|
bool error(string msg)
|
||||||
|
{
|
||||||
|
errMsg = msg;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
flushPosition(d);
|
flushPosition(d);
|
||||||
|
|
||||||
auto reslen = result.length;
|
auto reslen = result.length;
|
||||||
|
@ -2334,10 +2332,8 @@ char[] reencodeMangled(return scope const(char)[] mangled) nothrow pure @safe
|
||||||
d.popFront();
|
d.popFront();
|
||||||
size_t n = d.decodeBackref();
|
size_t n = d.decodeBackref();
|
||||||
if (!n || n > refpos)
|
if (!n || n > refpos)
|
||||||
{
|
return error("invalid back reference");
|
||||||
errMsg = "invalid back reference";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
auto savepos = d.pos;
|
auto savepos = d.pos;
|
||||||
scope(exit) d.pos = savepos;
|
scope(exit) d.pos = savepos;
|
||||||
size_t srcpos = refpos - n;
|
size_t srcpos = refpos - n;
|
||||||
|
@ -2345,23 +2341,16 @@ char[] reencodeMangled(return scope const(char)[] mangled) nothrow pure @safe
|
||||||
bool errStatus;
|
bool errStatus;
|
||||||
auto idlen = d.decodeNumber(errStatus);
|
auto idlen = d.decodeNumber(errStatus);
|
||||||
if (errStatus)
|
if (errStatus)
|
||||||
{
|
return error("invalid number");
|
||||||
errMsg = "invalid number";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d.pos + idlen > d.buf.length)
|
if (d.pos + idlen > d.buf.length)
|
||||||
{
|
return error("invalid back reference");
|
||||||
errMsg = "invalid back reference";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
auto id = d.buf[d.pos .. d.pos + idlen];
|
auto id = d.buf[d.pos .. d.pos + idlen];
|
||||||
auto pid = id in idpos;
|
auto pid = id in idpos;
|
||||||
if (!pid)
|
if (!pid)
|
||||||
{
|
return error("invalid back reference");
|
||||||
errMsg = "invalid back reference";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
npos = positionInResult(*pid);
|
npos = positionInResult(*pid);
|
||||||
}
|
}
|
||||||
encodeBackref(reslen - npos);
|
encodeBackref(reslen - npos);
|
||||||
|
@ -2373,16 +2362,11 @@ char[] reencodeMangled(return scope const(char)[] mangled) nothrow pure @safe
|
||||||
bool errStatus;
|
bool errStatus;
|
||||||
auto n = d.decodeNumber(errStatus);
|
auto n = d.decodeNumber(errStatus);
|
||||||
if (errStatus)
|
if (errStatus)
|
||||||
{
|
return error("invalid number");
|
||||||
errMsg = "invalid number";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!n || n > d.buf.length || n > d.buf.length - d.pos)
|
if (!n || n > d.buf.length || n > d.buf.length - d.pos)
|
||||||
{
|
return error("LName too short or too long");
|
||||||
errMsg = "LName too shot or too long";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
auto id = d.buf[d.pos .. d.pos + n];
|
auto id = d.buf[d.pos .. d.pos + n];
|
||||||
d.pos += n;
|
d.pos += n;
|
||||||
if (auto pid = id in idpos)
|
if (auto pid = id in idpos)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue