From 864af40e17218f8093ce2357c27a4fc4ff02bc24 Mon Sep 17 00:00:00 2001 From: bdemsky Date: Tue, 20 Jun 2017 13:26:59 -0700 Subject: [PATCH] Clean up Predicates --- src/AST/boolean.h | 6 ------ src/AST/ops.h | 6 ++++++ src/AST/predicate.c | 28 ++++++++++++++++++++-------- src/AST/predicate.h | 18 +++++++++++++++++- src/classlist.h | 6 ++++++ 5 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/AST/boolean.h b/src/AST/boolean.h index 9b7c121..3ec27e8 100644 --- a/src/AST/boolean.h +++ b/src/AST/boolean.h @@ -41,12 +41,6 @@ struct BooleanPredicate{ VectorElement* inputs; }; -struct TablePredicate{ - BooleanPredicate predicate; - Table* table; -}; - - Boolean * allocBoolean(VarType t); Boolean * allocBooleanOrder(Order * order, uint64_t first, uint64_t second); Boolean * allocBooleanPredicate(Predicate * predicate, Element ** inputs, uint numInputs); diff --git a/src/AST/ops.h b/src/AST/ops.h index 19decc2..62083f7 100644 --- a/src/AST/ops.h +++ b/src/AST/ops.h @@ -23,12 +23,18 @@ typedef enum OrderType OrderType; enum OverFlowBehavior {IGNORE, WRAPAROUND, FLAGFORCESOVERFLOW, OVERFLOWSETSFLAG, FLAGIFFOVERFLOW, NOOVERFLOW}; typedef enum OverFlowBehavior OverFlowBehavior; +enum UndefinedBehavior {IGNOREBEHAVIOR, FLAGFORCEUNDEFINED, UNDEFINEDSETSFLAG, FLAGIFFUNDEFINED}; +typedef enum UndefinedBehavior UndefinedBehavior; + enum BooleanType {ORDERCONST, BOOLEANVAR, LOGICOP, COMPARE, PREDICATEOP, TABLEPREDICATEOP}; typedef enum BooleanType BooleanType; enum FunctionType {TABLEFUNC, OPERATORFUNC}; typedef enum FunctionType FunctionType; +enum PredicateType {TABLEPRED, OPERATORPRED}; +typedef enum PredicateType PredicateType; + enum ElementType {ELEMSET, ELEMFUNCRETURN}; typedef enum ElementType ElementType; #endif diff --git a/src/AST/predicate.c b/src/AST/predicate.c index d2a572d..1737681 100644 --- a/src/AST/predicate.c +++ b/src/AST/predicate.c @@ -3,16 +3,28 @@ Predicate* allocPredicate(CompOp op, Set ** domain, uint numDomain){ - Predicate* predicate = (Predicate*) ourmalloc(sizeof(Predicate)); - predicate->domains = allocDefVectorSet(); - for(uint i=0; idomains,domain[i]); - predicate->op=op; - return predicate; + PredicateOperator* predicate = ourmalloc(sizeof(PredicateOperator)); + GETPREDICATETYPE(predicate)=OPERATORPRED; + predicate->numDomains=numDomain; + predicate->domains = ourmalloc(numDomain * sizeof(Set *)); + memcpy(predicate->domains, domain, numDomain * sizeof(Set *)); + predicate->op=op; + return &predicate->base; } void deletePredicate(Predicate* predicate){ - deleteVectorSet(predicate->domains); - ourfree(predicate); + switch(GETPREDICATETYPE(predicate)) { + case OPERATORPRED: { + PredicateOperator * operpred=(PredicateOperator *) predicate; + ourfree(operpred->domains); + break; + } + case TABLEPRED: { + break; + } + } + + //need to handle freeing array... + ourfree(predicate); } diff --git a/src/AST/predicate.h b/src/AST/predicate.h index 513e386..f9edc09 100644 --- a/src/AST/predicate.h +++ b/src/AST/predicate.h @@ -5,9 +5,25 @@ #include "ops.h" #include "structs.h" +#define GETPREDICATETYPE(o) (((Predicate *)(o))->type) + struct Predicate { + PredicateType type; +}; + +struct PredicateOperator { + Predicate base; CompOp op; - VectorSet* domains; + Set** domains; + int numDomains; +}; + +struct PredicateTable { + Predicate base; + Set** domains; + int numDomains; + Table* table; + UndefinedBehavior undefinedbehavior; }; diff --git a/src/classlist.h b/src/classlist.h index 4a961af..d32af3f 100644 --- a/src/classlist.h +++ b/src/classlist.h @@ -55,6 +55,12 @@ typedef struct Function Function; struct Predicate; typedef struct Predicate Predicate; +struct PredicateTable; +typedef struct PredicateTable PredicateTable; + +struct PredicateOperator; +typedef struct PredicateOperator PredicateOperator; + struct Table; typedef struct Table Table; -- 2.34.1