Add support for the ~ operator.
authorDavid Given <dg@cowlark.com>
Sun, 1 Jan 2017 17:40:06 +0000 (17:40 +0000)
committerDavid Given <dg@cowlark.com>
Sun, 1 Jan 2017 17:40:06 +0000 (17:40 +0000)
lang/b/compiler/b.h
lang/b/compiler/b0.c
lang/b/compiler/b1.c

index 3da667b..f5a11fd 100644 (file)
@@ -104,6 +104,7 @@ char* manglename(char* name, char prefix);
 #define        AMPER   23
 #define        STAR    24
 #define        QUEST   25
+#define        NOT     26
 
 #define        PLUS    30
 #define        MINUS   31
index e6845be..cb28a6a 100644 (file)
@@ -1060,6 +1060,7 @@ tand:
                goto oponst;
 
        case EXCLA:
+       case NOT:
                if (andflg)
                        goto syntax;
                goto oponst;
@@ -1225,7 +1226,7 @@ int opdope[] = {
        034200, /* &un */
        034200, /* *un */
        014201, /* ? */
-       000000, /* 26 */
+       034200, /* ~un */
        000000, /* 27 */
        000000, /* 28 */
        000000, /* 29 */
@@ -1290,7 +1291,7 @@ char ctab[128] = {
        UNKN,   LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
        LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
        LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
-       LETTER, LETTER, LETTER, LBRACE, OR,     RBRACE, UNKN,   UNKN
+       LETTER, LETTER, LETTER, LBRACE, OR,     RBRACE, NOT,    UNKN
 };
 
 /* debug function */
@@ -1320,6 +1321,7 @@ void printtoken(int tok, FILE *out)
        strtab[23] = "AMPER";
        strtab[24] = "STAR";
        strtab[25] = "QUEST";
+       strtab[26] = "NOT";
 
        strtab[30] = "PLUS";
        strtab[31] = "MINUS";
index 19dc17a..cc08d21 100644 (file)
@@ -305,6 +305,11 @@ rcexpr(struct tnode *tr)
                C_ngi(wordsize);
                return;
 
+       case NOT:
+               rcexpr(tr->tr1);
+               C_com(wordsize);
+               return;
+
        case QUEST:
                cbranch(tr->tr1, o1=isn++);
                rcexpr(tr->tr2->tr1);