Improve handling of various standard character constants
This commit is contained in:
parent
86957214ae
commit
52b5446d86
|
@ -367,15 +367,42 @@ MathLib::bigint MathLib::toLongNumber(const std::string & str)
|
||||||
char c;
|
char c;
|
||||||
if (str.size() == 3U)
|
if (str.size() == 3U)
|
||||||
c = str[1];
|
c = str[1];
|
||||||
else if (str == "\'\\0\'")
|
else if (str[1] == '\\' && str.size() == 4U) {
|
||||||
c = '\0';
|
switch (str[2]) {
|
||||||
else if (str == "\'\\n\'")
|
case '0':
|
||||||
c = '\n';
|
c = '\0';
|
||||||
else if (str == "\'\\r\'")
|
break;
|
||||||
c = '\r';
|
case 'a':
|
||||||
else if (str == "\'\\t\'")
|
c = '\a';
|
||||||
c = '\t';
|
break;
|
||||||
else
|
case 'b':
|
||||||
|
c = '\b';
|
||||||
|
break;
|
||||||
|
case 'f':
|
||||||
|
c = '\f';
|
||||||
|
break;
|
||||||
|
case 'n':
|
||||||
|
c = '\n';
|
||||||
|
break;
|
||||||
|
case 'r':
|
||||||
|
c = '\r';
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
c = '\t';
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
c = '\v';
|
||||||
|
break;
|
||||||
|
case '\\':
|
||||||
|
case '\?':
|
||||||
|
case '\'':
|
||||||
|
case '\"':
|
||||||
|
c = str[2];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw InternalError(0, "MathLib::toLongNumber: Unhandled char constant " + str);
|
||||||
|
}
|
||||||
|
} else
|
||||||
throw InternalError(0, "MathLib::toLongNumber: Unhandled char constant " + str);
|
throw InternalError(0, "MathLib::toLongNumber: Unhandled char constant " + str);
|
||||||
return c & 0xff;
|
return c & 0xff;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue