#define SDCC_NAME_MAX 3*SDCC_SYMNAME_MAX // big enough for _<func>_<var>_etc
#include "SDCChasht.h"
+enum {
+ TYPEOF_INT=1,
+ TYPEOF_SHORT,
+ TYPEOF_CHAR,
+ TYPEOF_LONG,
+ TYPEOF_FLOAT,
+ TYPEOF_BIT,
+ TYPEOF_SBIT,
+ TYPEOF_SFR,
+ TYPEOF_VOID,
+ TYPEOF_STRUCT,
+ TYPEOF_ARRAY,
+ TYPEOF_FUNCTION,
+ TYPEOF_POINTER,
+ TYPEOF_FPOINTER,
+ TYPEOF_CPOINTER,
+ TYPEOF_GPOINTER,
+ TYPEOF_PPOINTER,
+ TYPEOF_IPOINTER,
+ TYPEOF_EEPPOINTER
+};
#define HASHTAB_SIZE 256
unsigned rbank:1; /* seperate register bank */
unsigned intno; /* 1=Interrupt svc routine */
unsigned regbank; /* register bank 2b used */
+ unsigned builtin; /* is a builtin function */
} funcAttrs;
struct sym_link *next; /* next element on the chain */
#define IFFUNC_CALLEESAVES(x) (IS_FUNC(x) && FUNC_CALLEESAVES(x))
#define FUNC_ISISR(x) (x->funcAttrs.intrtn)
#define IFFUNC_ISISR(x) (IS_FUNC(x) && FUNC_ISISR(x))
-//#define FUNC_RBANK(x) (x->funcAttrs.rbank)
#define IFFUNC_RBANK(x) (IS_FUNC(x) && FUNC_RBANK(x))
#define FUNC_INTNO(x) (x->funcAttrs.intno)
#define FUNC_REGBANK(x) (x->funcAttrs.regbank)
#define IFFUNC_BANKED(x) (IS_FUNC(x) && FUNC_BANKED(x))
#define FUNC_ISCRITICAL(x) (x->funcAttrs.critical)
#define IFFUNC_ISCRITICAL(x) (IS_FUNC(x) && FUNC_ISCRITICAL(x))
+#define FUNC_ISBUILTIN(x) (x->funcAttrs.builtin)
+#define IFFUNC_ISBUILTIN(x) (IS_FUNC(x) && FUNC_ISBUILTIN(x))
// jwk: I am not sure about this
#define IFFUNC_ISBANKEDCALL(x) (!IFFUNC_NONBANKED(x) && \
#define IS_GENPTR(x) (IS_DECL(x) && DCL_TYPE(x) == GPOINTER)
#define IS_FUNC(x) (IS_DECL(x) && DCL_TYPE(x) == FUNCTION)
#define IS_LONG(x) (IS_SPEC(x) && x->select.s._long)
+#define IS_UNSIGNED(x) (IS_SPEC(x) && x->select.s._unsigned)
#define IS_TYPEDEF(x)(IS_SPEC(x) && x->select.s._typedef)
#define IS_CONSTANT(x) (IS_SPEC(x) && ( x->select.s._const == 1))
#define IS_STRUCT(x) (IS_SPEC(x) && x->select.s.noun == V_STRUCT)
int powof2 (unsigned long);
void printTypeChain (sym_link *, FILE *);
void initCSupport ();
+void initBuiltIns ();
void pointerTypes (sym_link *, sym_link *);
void cdbTypeInfo (sym_link *, FILE *);
void cdbSymbol (symbol *, FILE *, int, int);
void *findSymWithBlock (bucket **, struct symbol *, int);
void changePointer (symbol * sym);
void checkTypeSanity(sym_link *etype, char *name);
+sym_link *typeFromStr (char *) ;
+
extern char *nounName(sym_link *); /* noun strings */
extern void printFromToType (sym_link *, sym_link *);