X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCsymt.h;h=be2c19b9de189b7991c327d058b3add1c7f3a372;hb=d010bd18867edba95da10d259068d22d5d7c114f;hp=9b72775c22a91f24107be7dd842baf0cb09a3be4;hpb=70fe73bde6188da1e58bc4b0f333fe3ef96c83a8;p=fw%2Fsdcc diff --git a/src/SDCCsymt.h b/src/SDCCsymt.h index 9b72775c..be2c19b9 100644 --- a/src/SDCCsymt.h +++ b/src/SDCCsymt.h @@ -29,6 +29,27 @@ #define SDCC_NAME_MAX 3*SDCC_SYMNAME_MAX // big enough for ___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 @@ -185,6 +206,10 @@ typedef struct sym_link unsigned rbank:1; /* seperate register bank */ unsigned intno; /* 1=Interrupt svc routine */ unsigned regbank; /* register bank 2b used */ + unsigned builtin; /* is a builtin function */ + unsigned javaNative; /* is a JavaNative Function (TININative ONLY) */ + unsigned overlay; /* force parameters & locals into overlay segment */ + unsigned hasStackParms; /* function has parameters on stack */ } funcAttrs; struct sym_link *next; /* next element on the chain */ @@ -298,10 +323,10 @@ symbol; #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 FUNC_HASSTACKPARM(x) (x->funcAttrs.hasStackParms) #define FUNC_ISREENT(x) (x->funcAttrs.reent) #define IFFUNC_ISREENT(x) (IS_FUNC(x) && FUNC_ISREENT(x)) @@ -313,6 +338,13 @@ symbol; #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)) +#define FUNC_ISJAVANATIVE(x) (x->funcAttrs.javaNative) +#define IFFUNC_ISJAVANATIVE(x) (IS_FUNC(x) && FUNC_ISJAVANATIVE(x)) +#define FUNC_ISOVERLAY(x) (x->funcAttrs.overlay) +#define IFFUNC_ISOVERLAY(x) (IS_FUNC(x) && FUNC_ISOVERLAY(x)) + // jwk: I am not sure about this #define IFFUNC_ISBANKEDCALL(x) (!IFFUNC_NONBANKED(x) && \ @@ -368,6 +400,7 @@ symbol; #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) @@ -476,6 +509,7 @@ int isSymbolEqual (symbol *, symbol *); 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); @@ -489,6 +523,8 @@ void *findSymWithLevel (bucket **, struct symbol *); 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 *);