[cfe-dev] [PATCH] C++0x unicode string and character literals now with test cases
Craig Topper
craig.topper at gmail.com
Tue Jul 26 08:39:11 PDT 2011
Here's a new patch addressing Chris' suggestions.
~Craig
On Mon, Jul 25, 2011 at 11:14 PM, Chris Lattner <clattner at apple.com> wrote:
>
> On Jul 25, 2011, at 10:52 PM, Craig Topper wrote:
>
>> Doh! I accidentally warned on UCNs larger than 0xffff in UTF-32
>> character literals. This patch fixes that.
>
> Hi Craig,
>
> Doug is definitely the best one to review the semantics of this. Some minor comments:
>
> IdentifierInfo &get(StringRef Name, tok::TokenKind TokenCode) {
> IdentifierInfo &II = get(Name);
> + assert(TokenCode < 512 && "TokenCode too large");
> II.TokenID = TokenCode;
> return II;
>
> I would suggest instead:
>
> IdentifierInfo &get(StringRef Name, tok::TokenKind TokenCode) {
> IdentifierInfo &II = get(Name);
> II.TokenID = TokenCode;
> + assert(II.TokenID == TokenCode && "TokenCode too large");
> return II;
>
> to avoid tying the '9' bit bitfield size to the magic 512 constant.
>
>
> class StringLiteral : public Expr {
> ...
> unsigned ByteLength;
> - bool IsWide;
> + StringKind Kind;
> bool IsPascal;
> unsigned NumConcatenated;
>
> sizeof(StringKind) is likely to be 4, wasting space. I'd suggest making it an 8 bit bitfield or something.
>
>
> In SemaDeclAttr etc:
>
> - if (Str == 0 || Str->isWide()) {
> + if (Str == 0 || Str->getKind() != StringLiteral::Ascii) {
> S.Diag(Attr.getLoc(), diag::err_attribute_argument_n_not_string)
> << "weakref" << 1;
>
> I'd suggest introducing the proper helper methods and using:
>
> - if (Str == 0 || Str->isWide()) {
> + if (Str == 0 || !Str->isAscii()) {
> S.Diag(Attr.getLoc(), diag::err_attribute_argument_n_not_string)
> << "weakref" << 1;
>
> In Lexer.cpp:
>
> + // treat U like the start of an identifier.
> + goto StartIdentifier;
>
> Instead of doing this, I'd replace the gotos with just "return LexIdentifier(Result, CurPtr);" since "MIOpt.ReadToken" has already been done.
>
> I would suggest fusing IsIdentifierL and IsIdentifierUTFStringPrefix into one function.
>
> Otherwise, LGTM!
>
> -Chris
>
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: unicode_strings.patch
Type: application/octet-stream
Size: 78681 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20110726/56669e9e/attachment.obj>
More information about the cfe-dev
mailing list