| author | David Anderson <dvander@alliedmods.net> |
| Fri Nov 03 06:14:43 2006 +0000 (2006-11-03) | |
| changeset 132 | dabef847cd2c |
| parent 118 | 0cfeb76486a2 |
| child 167 | 4db3481b6db7 |
| permissions | -rw-r--r-- |
| dvander@115 | 1 |
#ifndef _INCLUDE_SOURCEPAWN_COMPILER_TRACKER_H_ |
| dvander@115 | 2 |
#define _INCLUDE_SOURCEPAWN_COMPILER_TRACKER_H_ |
| dvander@115 | 3 |
|
| dvander@116 | 4 |
#define MEMUSE_STATIC 0 |
| dvander@116 | 5 |
#define MEMUSE_DYNAMIC 1 |
| dvander@115 | 6 |
|
| dvander@116 | 7 |
typedef struct memuse_s { |
| dvander@116 | 8 |
int type; /* MEMUSE_STATIC or MEMUSE_DYNAMIC */ |
| dvander@116 | 9 |
int size; /* size of array for static (0 for dynamic) */ |
| dvander@116 | 10 |
struct memuse_s *prev; /* previous block on the list */ |
| dvander@116 | 11 |
} memuse_t; |
| dvander@115 | 12 |
|
| dvander@116 | 13 |
typedef struct memuse_list_s { |
| dvander@116 | 14 |
struct memuse_list_s *prev; /* last used list */ |
| dvander@117 | 15 |
int list_id; |
| dvander@116 | 16 |
memuse_t *head; /* head of the current list */ |
| dvander@116 | 17 |
} memuse_list_t; |
| dvander@115 | 18 |
|
| dvander@132 | 19 |
typedef struct funcarg_s |
| dvander@132 | 20 |
{ |
| dvander@132 | 21 |
int tagcount; |
| dvander@132 | 22 |
int tags[sTAGS_MAX]; |
| dvander@132 | 23 |
int dimcount; |
| dvander@132 | 24 |
cell dims[sDIMEN_MAX]; |
| dvander@132 | 25 |
int ident; |
| dvander@132 | 26 |
int fconst; |
| dvander@132 | 27 |
int ommittable; |
| dvander@132 | 28 |
} funcarg_t; |
| dvander@132 | 29 |
|
| dvander@132 | 30 |
typedef struct functag_s |
| dvander@132 | 31 |
{ |
| dvander@132 | 32 |
int ret_tag; |
| dvander@132 | 33 |
int type; |
| dvander@132 | 34 |
int argcount; |
| dvander@132 | 35 |
int ommittable; |
| dvander@132 | 36 |
funcarg_t args[sARGS_MAX]; |
| dvander@132 | 37 |
struct functag_s *next; |
| dvander@132 | 38 |
} functag_t; |
| dvander@132 | 39 |
|
| dvander@132 | 40 |
typedef struct funcenum_s |
| dvander@132 | 41 |
{ |
| dvander@132 | 42 |
int value; |
| dvander@132 | 43 |
char name[sNAMEMAX+1]; |
| dvander@132 | 44 |
functag_t *first; |
| dvander@132 | 45 |
functag_t *last; |
| dvander@132 | 46 |
struct funcenum_s *next; |
| dvander@132 | 47 |
} funcenum_t; |
| dvander@132 | 48 |
|
| dvander@132 | 49 |
/** |
| dvander@132 | 50 |
* Function enumeration tags |
| dvander@132 | 51 |
*/ |
| dvander@132 | 52 |
void funcenums_free(); |
| dvander@132 | 53 |
funcenum_t *funcenums_add(const char *name); |
| dvander@132 | 54 |
funcenum_t *funcenums_find_byval(int value); |
| dvander@132 | 55 |
functag_t *functags_add(funcenum_t *en, functag_t *src); |
| dvander@132 | 56 |
|
| dvander@116 | 57 |
/** |
| dvander@116 | 58 |
* Heap functions |
| dvander@116 | 59 |
*/ |
| dvander@115 | 60 |
void pushheaplist(); |
| dvander@116 | 61 |
memuse_list_t *popsaveheaplist(); |
| dvander@115 | 62 |
void popheaplist(); |
| dvander@115 | 63 |
int markheap(int type, int size); |
| dvander@115 | 64 |
|
| dvander@116 | 65 |
/** |
| dvander@116 | 66 |
* Stack functions |
| dvander@116 | 67 |
*/ |
| dvander@116 | 68 |
void pushstacklist(); |
| dvander@116 | 69 |
void popstacklist(); |
| dvander@116 | 70 |
int markstack(int type, int size); |
| dvander@117 | 71 |
/** |
| dvander@118 | 72 |
* Generates code to free mem usage, but does not pop the list. |
| dvander@117 | 73 |
* This is used for code like dobreak()/docont()/doreturn(). |
| dvander@117 | 74 |
* stop_id is the list at which to stop generating. |
| dvander@117 | 75 |
*/ |
| dvander@117 | 76 |
void genstackfree(int stop_id); |
| dvander@118 | 77 |
void genheapfree(int stop_id); |
| dvander@117 | 78 |
|
| dvander@117 | 79 |
/** |
| dvander@118 | 80 |
* Resets a mem list by freeing everything |
| dvander@117 | 81 |
*/ |
| dvander@117 | 82 |
void resetstacklist(); |
| dvander@118 | 83 |
void resetheaplist(); |
| dvander@116 | 84 |
|
| dvander@116 | 85 |
extern memuse_list_t *heapusage; |
| dvander@116 | 86 |
extern memuse_list_t *stackusage; |
| dvander@116 | 87 |
|
| dvander@115 | 88 |
#endif //_INCLUDE_SOURCEPAWN_COMPILER_TRACKER_H_ |