1 /*****************************************************************************/ 2 /* */ 3 /* funcdesc.h */ 4 /* */ 5 /* Function descriptor structure for the cc65 C compiler */ 6 /* */ 7 /* */ 8 /* */ 9 /* (C) 2000-2008 Ullrich von Bassewitz */ 10 /* Roemerstrasse 52 */ 11 /* D-70794 Filderstadt */ 12 /* EMail: uz@cc65.org */ 13 /* */ 14 /* */ 15 /* This software is provided 'as-is', without any expressed or implied */ 16 /* warranty. In no event will the authors be held liable for any damages */ 17 /* arising from the use of this software. */ 18 /* */ 19 /* Permission is granted to anyone to use this software for any purpose, */ 20 /* including commercial applications, and to alter it and redistribute it */ 21 /* freely, subject to the following restrictions: */ 22 /* */ 23 /* 1. The origin of this software must not be misrepresented; you must not */ 24 /* claim that you wrote the original software. If you use this software */ 25 /* in a product, an acknowledgment in the product documentation would be */ 26 /* appreciated but is not required. */ 27 /* 2. Altered source versions must be plainly marked as such, and must not */ 28 /* be misrepresented as being the original software. */ 29 /* 3. This notice may not be removed or altered from any source */ 30 /* distribution. */ 31 /* */ 32 /*****************************************************************************/ 33 34 35 36 #ifndef FUNCDESC_H 37 #define FUNCDESC_H 38 39 40 41 /*****************************************************************************/ 42 /* struct FuncDesc */ 43 /*****************************************************************************/ 44 45 46 47 /* Masks for the Flags field in FuncDesc */ 48 #define FD_NONE 0x0000U /* No flags */ 49 #define FD_EMPTY 0x0001U /* Function with empty param list */ 50 #define FD_VOID_PARAM 0x0002U /* Function with a void param list */ 51 #define FD_VARIADIC 0x0004U /* Function with variable param list */ 52 #define FD_OLDSTYLE 0x0010U /* Old style (K&R) function */ 53 #define FD_OLDSTYLE_INTRET 0x0020U /* K&R func has implicit int return */ 54 #define FD_UNNAMED_PARAMS 0x0040U /* Function has unnamed params */ 55 #define FD_CALL_WRAPPER 0x0080U /* This function is used as a wrapper */ 56 57 /* Bits that must be ignored when comparing funcs */ 58 #define FD_IGNORE (FD_OLDSTYLE | FD_OLDSTYLE_INTRET | FD_UNNAMED_PARAMS | FD_CALL_WRAPPER) 59 60 61 62 /* Function descriptor */ 63 typedef struct FuncDesc FuncDesc; 64 struct FuncDesc { 65 unsigned Flags; /* Bitmapped flags FD_... */ 66 struct SymTable* SymTab; /* Symbol table */ 67 struct SymTable* TagTab; /* Symbol table for structs/enums */ 68 unsigned ParamCount; /* Number of parameters */ 69 unsigned ParamSize; /* Size of the parameters */ 70 struct SymEntry* LastParam; /* Pointer to last parameter */ 71 struct SymEntry* WrappedCall; /* Pointer to the WrappedCall */ 72 unsigned char WrappedCallData;/* The WrappedCall's user data */ 73 }; 74 75 76 77 /*****************************************************************************/ 78 /* Code */ 79 /*****************************************************************************/ 80 81 82 83 FuncDesc* NewFuncDesc (void); 84 /* Create a new symbol table with the given name */ 85 86 void FreeFuncDesc (FuncDesc* D); 87 /* Free a function descriptor */ 88 89 90 91 /* End of funcdesc.h */ 92 93 #endif 94