]> git.mdlowis.com Git - proto/sclpl.git/commitdiff
combined integer fields in the token union
authorMichael D. Lowis <mike@mdlowis.com>
Sat, 16 Mar 2019 02:54:55 +0000 (22:54 -0400)
committerMichael D. Lowis <mike@mdlowis.com>
Sat, 16 Mar 2019 02:54:55 +0000 (22:54 -0400)
source/ast.c
source/lexer.l
source/pprint.c
source/sclpl.h

index 380e186193d621d357c3a2599dbe90727c5aae2e..2a8afbe5c1d5c985c2752874b7b6bf20fb038226 100644 (file)
@@ -20,13 +20,13 @@ char* string_value(AST* val) {
 
 AST* Char(Tok* val) {
     AST* node = ast(AST_CHAR);
-    node->value.character = val->value.character;
+    node->value.integer = val->value.integer;
     return node;
 }
 
 uint32_t char_value(AST* val) {
     assert(val->nodetype == AST_CHAR);
-    return val->value.character;
+    return val->value.integer;
 }
 
 AST* Integer(Tok* val) {
@@ -53,13 +53,13 @@ double float_value(AST* val) {
 
 AST* Bool(Tok* val) {
     AST* node = ast(AST_BOOL);
-    node->value.boolean = val->value.boolean;
+    node->value.integer = val->value.integer;
     return node;
 }
 
 bool bool_value(AST* val) {
     assert(val->nodetype == AST_BOOL);
-    return val->value.boolean;
+    return val->value.integer;
 }
 
 AST* Ident(Tok* val) {
index e5a45873822e80d9046da0d59371cd89b3f6d730..4958cb40fca892e0ee8715caf09196a8a863807b 100644 (file)
@@ -3,10 +3,8 @@
 
 static union {
     char* text;
-    uint32_t character;
-    intptr_t integer;
+    long long integer;
     double floating;
-    bool boolean;
 } Value;
 
 static char* dupstring(const char* old) {
@@ -62,12 +60,12 @@ NOSPACE [^ \t\r\n]
 ";"    { return ';';    }
 "*"    { return '*';    }
 
-\\.       { Value.character = yytext[1];    return T_CHAR; }
-\\space   { Value.character = ' ';          return T_CHAR; }
-\\newline { Value.character = '\n';         return T_CHAR; }
-\\return  { Value.character = '\r';         return T_CHAR; }
-\\tab     { Value.character = '\t';         return T_CHAR; }
-\\vtab    { Value.character = '\v';         return T_CHAR; }
+\\.       { Value.integer = yytext[1];    return T_CHAR; }
+\\space   { Value.integer = ' ';          return T_CHAR; }
+\\newline { Value.integer = '\n';         return T_CHAR; }
+\\return  { Value.integer = '\r';         return T_CHAR; }
+\\tab     { Value.integer = '\t';         return T_CHAR; }
+\\vtab    { Value.integer = '\v';         return T_CHAR; }
 
 0b[01]+ {
     Value.integer = strtol(&yytext[2], NULL, 2);
@@ -107,12 +105,12 @@ NOSPACE [^ \t\r\n]
 }
 
 true  {
-    Value.boolean = true;
+    Value.integer = 1;
     return T_BOOL;
 }
 
 false {
-    Value.boolean = false;
+    Value.integer = 0;
     return T_BOOL;
 }
 
index b4e33447612bc8a572aed5d93225b599cd6a9103..7eb8bbae3277213c2121f72cb1d1e53eff532826 100644 (file)
@@ -61,10 +61,10 @@ void pprint_token_value(FILE* file, Tok* token) {
         /* value tokens */
         case T_STRING: fprintf(file, "\"%s\"", token->value.text);                 break;
         case T_ID:     fprintf(file, "%s", token->value.text);                     break;
-        case T_CHAR:   print_char(file, token->value.character);                   break;
-        case T_INT:    fprintf(file, "%ld", token->value.integer);                 break;
+        case T_CHAR:   print_char(file, token->value.integer);                   break;
+        case T_INT:    fprintf(file, "%lld", token->value.integer);                 break;
         case T_FLOAT:  fprintf(file, "%f", token->value.floating);                 break;
-        case T_BOOL:   fprintf(file, "%s", (token->value.boolean)?"true":"false"); break;
+        case T_BOOL:   fprintf(file, "%s", (token->value.integer)?"true":"false"); break;
 
         /* keyword tokens */
         TOK(T_NONE); TOK(T_ERROR); TOK(T_END_FILE); TOK(T_PACKAGE);
index f3c435c715bab1b9aec1860b9737897dd00ad0f0..a9429afd923340bc33d543f785988a685df63596 100644 (file)
@@ -36,10 +36,8 @@ typedef struct {
     TokType type;
     union {
         char* text;
-        uint32_t character;
-        intptr_t integer;
+        long long integer;
         double floating;
-        bool boolean;
     } value;
 } Tok;