Changeset 388

Show
Ignore:
Timestamp:
02/17/10 04:06:32 (2 years ago)
Author:
walter
Message:

add !in operator

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/parse.c

    r385 r388  
    202202        { 
    203203            case TOKlparen: 
    204           // mixin(string) 
     204            { // mixin(string) 
    205205            nextToken(); 
    206206            check(TOKlparen, "mixin"); 
     
    210210            s = new CompileDeclaration(loc, e); 
    211211            break; 
    212  
     212            } 
    213213            case TOKtemplate: 
    214214            // mixin template 
     
    49484948        id = token.ident; 
    49494949        nextToken(); 
    4950         if (token.value == TOKnot && peekNext() != TOKis
     4950        if (token.value == TOKnot && (save = peekNext()) != TOKis && save != TOKin
    49514951        {   // identifier!(template-argument-list) 
    49524952        TemplateInstance *tempinst; 
     
    56835683            case TOKnot: 
    56845684            tk = peek(tk); 
    5685             if (tk->value == TOKis)    // !is 
     5685            if (tk->value == TOKis || tk->value == TOKin)  // !is or !in 
    56865686                break; 
    56875687            case TOKdot: 
     
    58735873        continue; 
    58745874 
     5875        case TOKnot:        // could be !in 
     5876printf("test1\n"); 
     5877        if (peekNext() == TOKin) 
     5878        { 
     5879printf("test2\n"); 
     5880            nextToken(); 
     5881            nextToken(); 
     5882            e2 = parseShiftExp(); 
     5883            e = new InExp(loc, e, e2); 
     5884            e = new NotExp(loc, e); 
     5885            continue; 
     5886        } 
     5887        break; 
     5888 
    58755889        case TOKin: 
    58765890        nextToken(); 
     
    59665980        // Attempt to identify '!is' 
    59675981        t = peek(&token); 
     5982        if (t->value == TOKin) 
     5983        { 
     5984        nextToken(); 
     5985        nextToken(); 
     5986        e2 = parseShiftExp(); 
     5987        e = new InExp(loc, e, e2); 
     5988        e = new NotExp(loc, e); 
     5989        break; 
     5990        } 
    59685991        if (t->value != TOKis) 
    59695992        break;