X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCast.h;h=8cc1a4e12e34e0f92b7796eb7608dfa88cf7e2ab;hb=d0036c2fdca6bf20f9adb6eeb58bdbd404edda51;hp=24cc4f7aebcc29d398935c85631509a14392eaa5;hpb=96ff919c3470720e4bf26c7d278c753a97eeef09;p=fw%2Fsdcc diff --git a/src/SDCCast.h b/src/SDCCast.h index 24cc4f7a..8cc1a4e1 100644 --- a/src/SDCCast.h +++ b/src/SDCCast.h @@ -51,6 +51,7 @@ typedef struct ast unsigned initMode:1; int level; /* level for expr */ int block; /* block number */ + int seqPoint; /* sequence point */ /* union of values expression can have */ union { @@ -110,7 +111,7 @@ ast; /* easy access macros */ -#define IS_AST_OP(x) (x && x->type == EX_OP) +#define IS_AST_OP(x) ((x) && (x)->type == EX_OP) #define IS_CALLOP(x) (IS_AST_OP(x) && x->opval.op == CALL) #define IS_BITOR(x) (IS_AST_OP(x) && x->opval.op == '|') #define IS_BITAND(x) (IS_AST_OP(x) && x->opval.op == '&' && \ @@ -118,7 +119,7 @@ ast; #define IS_FOR_STMT(x) (IS_AST_OP(x) && x->opval.op == FOR) #define IS_LEFT_OP(x) (IS_AST_OP(x) && x->opval.op == LEFT_OP) #define IS_RIGHT_OP(x) (IS_AST_OP(x) && x->opval.op == RIGHT_OP) -#define IS_AST_VALUE(x) (x && x->type == EX_VALUE && x->opval.val) +#define IS_AST_VALUE(x) ((x) && (x)->type == EX_VALUE && (x)->opval.val) #define IS_AST_LINK(x) (x->type == EX_LINK) #define IS_AST_NOT_OPER(x) (x && IS_AST_OP(x) && x->opval.op == '!') #define IS_ARRAY_OP(x) (IS_AST_OP(x) && x->opval.op == '[') @@ -129,14 +130,14 @@ ast; x->opval.op == GE_OP || \ x->opval.op == EQ_OP || \ x->opval.op == NE_OP )) -#define IS_CAST_OP(x) (IS_AST_OP(x) && x->opval.op == CAST) +#define IS_CAST_OP(x) (IS_AST_OP(x) && (x)->opval.op == CAST) #define IS_TERNARY_OP(x) (IS_AST_OP(x) && x->opval.op == '?') #define IS_COLON_OP(x) (IS_AST_OP(x) && x->opval.op == ':') #define IS_ADDRESS_OF_OP(x) (IS_AST_OP(x) && \ x->opval.op == '&' && \ x->right == NULL ) #define IS_AST_LIT_VALUE(x) (IS_AST_VALUE(x) && \ - IS_LITERAL(x->opval.val->etype)) + IS_LITERAL((x)->opval.val->etype)) #define IS_AST_SYM_VALUE(x) (IS_AST_VALUE(x) && x->opval.val->sym) #define AST_LIT_VALUE(x) (floatFromVal(x->opval.val)) #define AST_SYMBOL(x) (x->opval.val->sym) @@ -183,17 +184,19 @@ void initAst (); ast *newNode (long, ast *, ast *); ast *copyAst (ast *); ast *removeIncDecOps (ast *); +ast *removePreIncDecOps (ast *); +ast *removePostIncDecOps (ast *); value *sizeofOp (sym_link *); value *evalStmnt (ast *); ast *createFunction (symbol *, ast *); ast *createBlock (symbol *, ast *); ast *createLabel (symbol *, ast *); ast *createCase (ast *, ast *, ast *); -ast *createDefault (ast *, ast *); +ast *createDefault (ast *, ast *, ast *); ast *forLoopOptForm (ast *); ast *argAst (ast *); ast *resolveSymbols (ast *); -ast *decorateType (ast *); +ast *decorateType (ast *, RESULT_TYPE); ast *createWhile (symbol *, symbol *, symbol *, ast *, ast *); ast *createIf (ast *, ast *, ast *); ast *createDo (symbol *, symbol *, symbol *, ast *, ast *); @@ -209,6 +212,8 @@ bool hasSEFcalls (ast *); void addSymToBlock (symbol *, ast *); void freeStringSymbol(symbol *); DEFSETFUNC(resetParmKey); +int astErrors(ast *); +RESULT_TYPE getResultTypeFromType (sym_link *); // exported variables extern set *operKeyReset;