[cfe-commits] r90860 - in /cfe/trunk: lib/Lex/Lexer.cpp test/Lexer/msdos-cpm-eof.c

steve naroff snaroff at apple.com
Tue Dec 8 13:45:27 PST 2009


On Dec 8, 2009, at 1:35 PM, Chris Lattner wrote:

>
> On Dec 8, 2009, at 8:38 AM, Steve Naroff wrote:
>
>> Author: snaroff
>> Date: Tue Dec  8 10:38:12 2009
>> New Revision: 90860
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=90860&view=rev
>> Log:
>> Integrate the following from the 'objective-rewrite' branch:
>>
>> http://llvm.org/viewvc/llvm-project?view=rev&revision=80043
>
> Hi Steve,
>
> This patch isn't great for two reasons: 1) it makes caused the  
> CharInfo array to be writable instead of read only, and 2) it gives  
> us mutable state that isn't thread-safe (if we have two files  
> compiling on separate threads, badness will happen).
>
> I think a better approach would be to make a little class like this:
>
> class LexerCharInfo {
>  unsigned char *CharData;
>
>  LexerCharInfo(const LangOptions &);
>
>  bool isIdentifierBody(unsigned char c) const { ... }
>  bool isHorizontalWhitespace(unsigned char c) const {... }
> };
>
> and have the Lexer object have one of these embedded into it.  At  
> initialization time, if the Features.Microsoft bit isn't set, the  
> pointer can point to the const array.  If it is set, the  
> LexerCharInfo constructor can new[] an array, memcpy from the  
> constant buffer, then chop it up as it sees fit.  Seem reasonable?
>

Sure. Seems like a lot of work for such a minor change, however your  
rationale makes sense.

I'll work on cleaning it up based on your suggestion...

Thanks for the review,

snaroff

> Also, a more minor issue, InitCharacterInfo should take LangOptions  
> by const reference.
>
> -Chris
>
>>
>>
>> Added:
>>   cfe/trunk/test/Lexer/msdos-cpm-eof.c
>> Modified:
>>   cfe/trunk/lib/Lex/Lexer.cpp
>>
>> Modified: cfe/trunk/lib/Lex/Lexer.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Lexer.cpp?rev=90860&r1=90859&r2=90860&view=diff
>>
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> =====================================================================
>> --- cfe/trunk/lib/Lex/Lexer.cpp (original)
>> +++ cfe/trunk/lib/Lex/Lexer.cpp Tue Dec  8 10:38:12 2009
>> @@ -33,7 +33,7 @@
>> #include <cctype>
>> using namespace clang;
>>
>> -static void InitCharacterInfo();
>> +static void InitCharacterInfo(LangOptions);
>>
>> // 
>> = 
>> = 
>> = 
>> ----------------------------------------------------------------------= 
>> ==//
>> // Token Class Implementation
>> @@ -59,7 +59,7 @@
>>
>> void Lexer::InitLexer(const char *BufStart, const char *BufPtr,
>>                      const char *BufEnd) {
>> -  InitCharacterInfo();
>> +  InitCharacterInfo(Features);
>>
>>  BufferStart = BufStart;
>>  BufferPtr = BufPtr;
>> @@ -253,7 +253,7 @@
>>
>> // Statically initialize CharInfo table based on ASCII character set
>> // Reference: FreeBSD 7.2 /usr/share/misc/ascii
>> -static const unsigned char CharInfo[256] =
>> +static unsigned char CharInfo[256] =
>> {
>> // 0 NUL         1 SOH         2 STX         3 ETX
>> // 4 EOT         5 ENQ         6 ACK         7 BEL
>> @@ -321,7 +321,7 @@
>>   0           , 0           , 0           , 0
>> };
>>
>> -static void InitCharacterInfo() {
>> +static void InitCharacterInfo(LangOptions Features) {
>>  static bool isInited = false;
>>  if (isInited) return;
>>  // check the statically-initialized CharInfo table
>> @@ -339,6 +339,11 @@
>>  }
>>  for (unsigned i = '0'; i <= '9'; ++i)
>>    assert(CHAR_NUMBER == CharInfo[i]);
>> +
>> +  if (Features.Microsoft)
>> +    // Hack to treat DOS & CP/M EOF (^Z) as horizontal whitespace.
>> +    CharInfo[26/*sub*/] = CHAR_HORZ_WS;
>> +
>>  isInited = true;
>> }
>>
>>
>> Added: cfe/trunk/test/Lexer/msdos-cpm-eof.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Lexer/msdos-cpm-eof.c?rev=90860&view=auto
>>
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> =====================================================================
>> --- cfe/trunk/test/Lexer/msdos-cpm-eof.c (added)
>> +++ cfe/trunk/test/Lexer/msdos-cpm-eof.c Tue Dec  8 10:38:12 2009
>> @@ -0,0 +1,5 @@
>> +// RUN: clang-cc -fsyntax-only -verify -fms-extensions %s
>> +
>> +int a;
>> +
>> +
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>





More information about the cfe-commits mailing list