dvander@115: #ifndef _INCLUDE_SOURCEPAWN_COMPILER_TRACKER_H_ dvander@115: #define _INCLUDE_SOURCEPAWN_COMPILER_TRACKER_H_ dvander@115: dvander@116: #define MEMUSE_STATIC 0 dvander@116: #define MEMUSE_DYNAMIC 1 dvander@115: dvander@116: typedef struct memuse_s { dvander@116: int type; /* MEMUSE_STATIC or MEMUSE_DYNAMIC */ dvander@116: int size; /* size of array for static (0 for dynamic) */ dvander@116: struct memuse_s *prev; /* previous block on the list */ dvander@116: } memuse_t; dvander@115: dvander@116: typedef struct memuse_list_s { dvander@116: struct memuse_list_s *prev; /* last used list */ dvander@117: int list_id; dvander@116: memuse_t *head; /* head of the current list */ dvander@116: } memuse_list_t; dvander@115: dvander@116: /** dvander@116: * Heap functions dvander@116: */ dvander@115: void pushheaplist(); dvander@116: memuse_list_t *popsaveheaplist(); dvander@115: void popheaplist(); dvander@115: int markheap(int type, int size); dvander@115: dvander@116: /** dvander@116: * Stack functions dvander@116: */ dvander@116: void pushstacklist(); dvander@116: void popstacklist(); dvander@116: int markstack(int type, int size); dvander@117: /** dvander@118: * Generates code to free mem usage, but does not pop the list. dvander@117: * This is used for code like dobreak()/docont()/doreturn(). dvander@117: * stop_id is the list at which to stop generating. dvander@117: */ dvander@117: void genstackfree(int stop_id); dvander@118: void genheapfree(int stop_id); dvander@117: dvander@117: /** dvander@118: * Resets a mem list by freeing everything dvander@117: */ dvander@117: void resetstacklist(); dvander@118: void resetheaplist(); dvander@116: dvander@116: extern memuse_list_t *heapusage; dvander@116: extern memuse_list_t *stackusage; dvander@116: dvander@115: #endif //_INCLUDE_SOURCEPAWN_COMPILER_TRACKER_H_