You are forbidden to forbid anyone else to use, share and improve
what you give them. Help stamp out software-hoarding!
-------------------------------------------------------------------------*/
-#include "SDCCsymt.h"
#ifndef SDCCVAL_H
#define SDCCVAL_H
+#include "SDCCsymt.h"
+
/* value wrapper */
typedef struct value
{
}
value;
+typedef struct literalList
+{
+ double literalValue;
+ unsigned count;
+ struct literalList *next;
+} literalList;
+
+
enum
{
INIT_NODE,
{
int type;
int lineno;
+ char *filename;
union
{
struct ast *node;
}
initList;
+/* return values from checkConstantRange */
+typedef enum
+ {
+ CCR_OK, /* evaluate at runtime */
+ CCR_OVL,
+ CCR_ALWAYS_FALSE,
+ CCR_ALWAYS_TRUE
+ }
+CCR_RESULT;
+
#define IS_VARG(x) (x->vArgs)
/* forward definitions for the symbol table related functions */
value *symbolVal (symbol *);
void printVal (value *);
double floatFromVal (value *);
+CCR_RESULT checkConstantRange (sym_link *var, sym_link *lit, int op, bool exchangeOps);
value *array2Ptr (value *);
value *valUnaryPM (value *);
value *valComplement (value *);
value *valBitwise (value *, value *, int);
value *valLogicAndOr (value *, value *, int);
value *valCastLiteral (sym_link *, double);
-value *valueFromLit (float);
+value *valueFromLit (double);
initList *newiList (int, void *);
initList *revinit (initList *);
initList *copyIlist (initList *);
double list2int (initList *);
value *list2val (initList *);
struct ast *list2expr (initList *);
-void resolveIvalSym (initList *);
+void resolveIvalSym (initList *, sym_link *);
value *valFromType (sym_link *);
value *constFloatVal (char *);
+value *constFixed16x16Val (char *);
int getNelements (sym_link *, initList *);
value *valForArray (struct ast *);
value *valForStructElem (struct ast *, struct ast *);
value *valForCastAggr (struct ast *, sym_link *, struct ast *, int);
value *valForCastArr (struct ast * , sym_link *);
+bool convertIListToConstList(initList *src, literalList **lList);
+literalList *copyLiteralList(literalList *src);
#endif