1 #ifndef _INCLUDE_SOURCEPAWN_COMPILER_TRACKER_H_
2 #define _INCLUDE_SOURCEPAWN_COMPILER_TRACKER_H_
4 #define MEMUSE_STATIC 0
5 #define MEMUSE_DYNAMIC 1
7 typedef struct memuse_s {
8 int type; /* MEMUSE_STATIC or MEMUSE_DYNAMIC */
9 int size; /* size of array for static (0 for dynamic) */
10 struct memuse_s *prev; /* previous block on the list */
13 typedef struct memuse_list_s {
14 struct memuse_list_s *prev; /* last used list */
16 memuse_t *head; /* head of the current list */
19 typedef struct funcarg_s
24 cell dims[sDIMEN_MAX];
30 typedef struct functag_s
36 funcarg_t args[sARGS_MAX];
37 struct functag_s *next;
40 typedef struct funcenum_s
43 char name[sNAMEMAX+1];
46 struct funcenum_s *next;
49 typedef struct structarg_s
53 cell dims[sDIMEN_MAX];
54 char name[sNAMEMAX+1];
61 typedef struct pstruct_s
64 char name[sNAMEMAX+1];
66 struct pstruct_s *next;
72 pstruct_t *pstructs_add(const char *name);
74 pstruct_t *pstructs_find(const char *name);
75 structarg_t *pstructs_addarg(pstruct_t *pstruct, const structarg_t *arg);
76 structarg_t *pstructs_getarg(pstruct_t *pstruct, const char *member);
79 * Function enumeration tags
81 void funcenums_free();
82 funcenum_t *funcenums_add(const char *name);
83 funcenum_t *funcenums_find_byval(int value);
84 functag_t *functags_add(funcenum_t *en, functag_t *src);
90 memuse_list_t *popsaveheaplist();
92 int markheap(int type, int size);
98 void popstacklist(int codegen);
99 int markstack(int type, int size);
101 * Generates code to free mem usage, but does not pop the list.
102 * This is used for code like dobreak()/docont()/doreturn().
103 * stop_id is the list at which to stop generating.
105 void genstackfree(int stop_id);
106 void genheapfree(int stop_id);
109 * Resets a mem list by freeing everything
111 void resetstacklist();
112 void resetheaplist();
114 extern memuse_list_t *heapusage;
115 extern memuse_list_t *stackusage;
117 #endif //_INCLUDE_SOURCEPAWN_COMPILER_TRACKER_H_