Implement CPython strategy
authorbdemsky <bdemsky@uci.edu>
Sat, 17 Jun 2017 06:34:50 +0000 (23:34 -0700)
committerbdemsky <bdemsky@uci.edu>
Sat, 17 Jun 2017 06:34:50 +0000 (23:34 -0700)
src/AST/boolean.c
src/AST/boolean.h

index aaebba7312315e02f07b4068852de98499058459..d452b1a27e981a6c19627a15a8dd6b9bab237c83 100644 (file)
@@ -1,19 +1,19 @@
 #include "boolean.h"
 
 Boolean* allocBoolean(VarType t) {
 #include "boolean.h"
 
 Boolean* allocBoolean(VarType t) {
-       Boolean* tmp=(Boolean*) ourmalloc(sizeof (Boolean));
-       tmp->btype=BOOLEANVAR;
-       tmp->var.vtype=t;
-       return tmp;
+       BooleanVar* tmp=(BooleanVar *) ourmalloc(sizeof (BooleanVar));
+       tmp->base.btype=BOOLEANVAR;
+       tmp->vtype=t;
+       return & tmp->base;
 }
 
 Boolean* allocBooleanOrder(Order* order, uint64_t first, uint64_t second) {
 }
 
 Boolean* allocBooleanOrder(Order* order, uint64_t first, uint64_t second) {
-       Boolean* tmp=(Boolean*) ourmalloc(sizeof (Boolean));
-       tmp->btype=ORDERCONST;
-       tmp->order.order=order;
-       tmp->order.first=first;
-       tmp->order.second=second;
-       return tmp;
+       BooleanOrder* tmp=(BooleanOrder *) ourmalloc(sizeof (BooleanOrder));
+       tmp->base.btype=ORDERCONST;
+       tmp->order=order;
+       tmp->first=first;
+       tmp->second=second;
+       return & tmp -> base;
 }
 
 void deleteBoolean(Boolean * this) {
 }
 
 void deleteBoolean(Boolean * this) {
index 87d7a49da28aec59607f52f9d2332d344811bf01..065ba4ac2590696b7a107e1214019aff795c5c91 100644 (file)
@@ -4,37 +4,41 @@
 #include "mymemory.h"
 #include "ops.h"
 
 #include "mymemory.h"
 #include "ops.h"
 
+/** 
+               This is a little sketchy, but apparently legit.
+               https://www.python.org/dev/peps/pep-3123/ */
+
+struct Boolean {
+       BooleanType btype;
+};
+
 struct BooleanOrder {
 struct BooleanOrder {
+       Boolean base;
        Order* order;
        uint64_t first;
        uint64_t second;
 };
 
 struct BooleanVar {
        Order* order;
        uint64_t first;
        uint64_t second;
 };
 
 struct BooleanVar {
+       Boolean base;
        VarType vtype;
 };
 
 struct BooleanLogic {
        VarType vtype;
 };
 
 struct BooleanLogic {
+       Boolean base;
        LogicOp op;
        Boolean * left;
        Boolean * right;
 };
 
 struct BooleanComp {
        LogicOp op;
        Boolean * left;
        Boolean * right;
 };
 
 struct BooleanComp {
+       Boolean base;
        CompOp op;
        Boolean * left;
        Boolean * right;
 };
 
        CompOp op;
        Boolean * left;
        Boolean * right;
 };
 
-struct Boolean {
-       BooleanType btype;
-       union {
-               BooleanOrder order;
-               BooleanVar var;
-               BooleanLogic logic;
-               BooleanComp comp;
-       };
-};
+
 
 Boolean * allocBoolean(VarType t);
 Boolean * allocBooleanOrder(Order * order, uint64_t first, uint64_t second);
 
 Boolean * allocBoolean(VarType t);
 Boolean * allocBooleanOrder(Order * order, uint64_t first, uint64_t second);