forked from OSchip/llvm-project
minor cleanups to StringLiteralParser: no need to pass target info
into its ctor. Also, make it handle validity checking of pascal strings instead of making clients do it. llvm-svn: 62332
This commit is contained in:
parent
86afde337d
commit
8a24e588d7
|
@ -141,7 +141,6 @@ public:
|
|||
/// literals) (C99 5.1.1.2p1).
|
||||
class StringLiteralParser {
|
||||
Preprocessor &PP;
|
||||
TargetInfo &Target;
|
||||
|
||||
unsigned MaxTokenLength;
|
||||
unsigned SizeBound;
|
||||
|
@ -150,7 +149,7 @@ class StringLiteralParser {
|
|||
char *ResultPtr; // cursor
|
||||
public:
|
||||
StringLiteralParser(const Token *StringToks, unsigned NumStringToks,
|
||||
Preprocessor &PP, TargetInfo &T);
|
||||
Preprocessor &PP);
|
||||
bool hadError;
|
||||
bool AnyWide;
|
||||
bool Pascal;
|
||||
|
|
|
@ -647,8 +647,7 @@ CharLiteralParser::CharLiteralParser(const char *begin, const char *end,
|
|||
///
|
||||
StringLiteralParser::
|
||||
StringLiteralParser(const Token *StringToks, unsigned NumStringToks,
|
||||
Preprocessor &pp, TargetInfo &t)
|
||||
: PP(pp), Target(t) {
|
||||
Preprocessor &pp) : PP(pp) {
|
||||
// Scan all of the string portions, remember the max individual token length,
|
||||
// computing a bound on the concatenated string length, and see whether any
|
||||
// piece is a wide-string. If any of the string portions is a wide-string
|
||||
|
@ -684,7 +683,7 @@ StringLiteralParser(const Token *StringToks, unsigned NumStringToks,
|
|||
// query the target. As such, wchar_tByteWidth is only valid if AnyWide=true.
|
||||
wchar_tByteWidth = ~0U;
|
||||
if (AnyWide) {
|
||||
wchar_tByteWidth = Target.getWCharWidth();
|
||||
wchar_tByteWidth = PP.getTargetInfo().getWCharWidth();
|
||||
assert((wchar_tByteWidth & 7) == 0 && "Assumes wchar_t is byte multiple!");
|
||||
wchar_tByteWidth /= 8;
|
||||
}
|
||||
|
@ -787,6 +786,15 @@ StringLiteralParser(const Token *StringToks, unsigned NumStringToks,
|
|||
*ResultPtr++ = 0;
|
||||
}
|
||||
|
||||
if (Pascal)
|
||||
if (Pascal) {
|
||||
ResultBuf[0] = ResultPtr-&ResultBuf[0]-1;
|
||||
|
||||
// Verify that pascal strings aren't too large.
|
||||
if (GetStringLength() > 256)
|
||||
PP.Diag(StringToks[0].getLocation(), diag::err_pascal_string_too_long)
|
||||
<< SourceRange(StringToks[0].getLocation(),
|
||||
StringToks[NumStringToks-1].getLocation());
|
||||
hadError = 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -295,7 +295,7 @@ Action::ExprResult
|
|||
Sema::ActOnStringLiteral(const Token *StringToks, unsigned NumStringToks) {
|
||||
assert(NumStringToks && "Must have at least one string!");
|
||||
|
||||
StringLiteralParser Literal(StringToks, NumStringToks, PP, Context.Target);
|
||||
StringLiteralParser Literal(StringToks, NumStringToks, PP);
|
||||
if (Literal.hadError)
|
||||
return ExprResult(true);
|
||||
|
||||
|
@ -303,12 +303,6 @@ Sema::ActOnStringLiteral(const Token *StringToks, unsigned NumStringToks) {
|
|||
for (unsigned i = 0; i != NumStringToks; ++i)
|
||||
StringTokLocs.push_back(StringToks[i].getLocation());
|
||||
|
||||
// Verify that pascal strings aren't too large.
|
||||
if (Literal.Pascal && Literal.GetStringLength() > 256)
|
||||
return Diag(StringToks[0].getLocation(), diag::err_pascal_string_too_long)
|
||||
<< SourceRange(StringToks[0].getLocation(),
|
||||
StringToks[NumStringToks-1].getLocation());
|
||||
|
||||
QualType StrTy = Context.CharTy;
|
||||
if (Literal.AnyWide) StrTy = Context.getWCharType();
|
||||
if (Literal.Pascal) StrTy = Context.UnsignedCharTy;
|
||||
|
|
Loading…
Reference in New Issue