]> Cypherpunks repositories - gostls13.git/commitdiff
added &^ and &^=
authorRobert Griesemer <gri@golang.org>
Mon, 16 Mar 2009 21:20:08 +0000 (14:20 -0700)
committerRobert Griesemer <gri@golang.org>
Mon, 16 Mar 2009 21:20:08 +0000 (14:20 -0700)
R=rsc
DELTA=14  (12 added, 0 deleted, 2 changed)
OCL=26278
CL=26348

src/lib/go/scanner.go
src/lib/go/scanner_test.go
src/lib/go/token.go

index f665f10babc25b724e0cce4be1dfa90b95374695..0910e59de137cbf2a3fc0b760c9b152ab7f0bea5 100644 (file)
@@ -447,7 +447,13 @@ scan_again:
                case '>': tok = S.switch4(token.GTR, token.GEQ, '>', token.SHR, token.SHR_ASSIGN);
                case '=': tok = S.switch2(token.ASSIGN, token.EQL);
                case '!': tok = S.switch2(token.NOT, token.NEQ);
-               case '&': tok = S.switch3(token.AND, token.AND_ASSIGN, '&', token.LAND);
+               case '&':
+                       if S.ch == '^' {
+                               S.next();
+                               tok = S.switch2(token.AND_NOT, token.AND_NOT_ASSIGN);
+                       } else {
+                               tok = S.switch3(token.AND, token.AND_ASSIGN, '&', token.LAND);
+                       }
                case '|': tok = S.switch3(token.OR, token.OR_ASSIGN, '|', token.LOR);
                default: S.error(loc, "illegal character " + charString(ch));
                }
index 221f01256e4704e0c0c3a33aee0f8e721d0945c5..247bbe4df0c4a7b4626eee5ae17777c2172ebbea 100644 (file)
@@ -76,6 +76,7 @@ var tokens = [...]elt{
        elt{ token.XOR, "^", operator },
        elt{ token.SHL, "<<", operator },
        elt{ token.SHR, ">>", operator },
+       elt{ token.AND_NOT, "&^", operator },
 
        elt{ token.ADD_ASSIGN, "+=", operator },
        elt{ token.SUB_ASSIGN, "-=", operator },
@@ -88,6 +89,7 @@ var tokens = [...]elt{
        elt{ token.XOR_ASSIGN, "^=", operator },
        elt{ token.SHL_ASSIGN, "<<=", operator },
        elt{ token.SHR_ASSIGN, ">>=", operator },
+       elt{ token.AND_NOT_ASSIGN, "&^=", operator },
 
        elt{ token.LAND, "&&", operator },
        elt{ token.LOR, "||", operator },
index 1961fb10eeff75d6e9caa11978cb49c73487c0b2..26ff1cb993be0d964fdbfcbcad104b9150d42f25 100644 (file)
@@ -40,6 +40,7 @@ const (
        XOR;
        SHL;
        SHR;
+       AND_NOT;
 
        ADD_ASSIGN;
        SUB_ASSIGN;
@@ -52,6 +53,7 @@ const (
        XOR_ASSIGN;
        SHL_ASSIGN;
        SHR_ASSIGN;
+       AND_NOT_ASSIGN;
 
        LAND;
        LOR;
@@ -145,6 +147,7 @@ var tokens = map [int] string {
        XOR : "^",
        SHL : "<<",
        SHR : ">>",
+       AND_NOT : "&^",
 
        ADD_ASSIGN : "+=",
        SUB_ASSIGN : "-=",
@@ -157,6 +160,7 @@ var tokens = map [int] string {
        XOR_ASSIGN : "^=",
        SHL_ASSIGN : "<<=",
        SHR_ASSIGN : ">>=",
+       AND_NOT_ASSIGN : "&^=",
 
        LAND : "&&",
        LOR : "||",
@@ -264,7 +268,7 @@ func Precedence(tok int) int {
                return 4;
        case ADD, SUB, OR, XOR:
                return 5;
-       case MUL, QUO, REM, SHL, SHR, AND:
+       case MUL, QUO, REM, SHL, SHR, AND, AND_NOT:
                return 6;
        }
        return LowestPrec;