f8e7a10e06
--HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40172
118 lines
2.6 KiB
C
118 lines
2.6 KiB
C
#ifndef _INCLUDE_SOURCEPAWN_COMPILER_TRACKER_H_
|
|
#define _INCLUDE_SOURCEPAWN_COMPILER_TRACKER_H_
|
|
|
|
#define MEMUSE_STATIC 0
|
|
#define MEMUSE_DYNAMIC 1
|
|
|
|
typedef struct memuse_s {
|
|
int type; /* MEMUSE_STATIC or MEMUSE_DYNAMIC */
|
|
int size; /* size of array for static (0 for dynamic) */
|
|
struct memuse_s *prev; /* previous block on the list */
|
|
} memuse_t;
|
|
|
|
typedef struct memuse_list_s {
|
|
struct memuse_list_s *prev; /* last used list */
|
|
int list_id;
|
|
memuse_t *head; /* head of the current list */
|
|
} memuse_list_t;
|
|
|
|
typedef struct funcarg_s
|
|
{
|
|
int tagcount;
|
|
int tags[sTAGS_MAX];
|
|
int dimcount;
|
|
cell dims[sDIMEN_MAX];
|
|
int ident;
|
|
int fconst;
|
|
int ommittable;
|
|
} funcarg_t;
|
|
|
|
typedef struct functag_s
|
|
{
|
|
int ret_tag;
|
|
int type;
|
|
int argcount;
|
|
int ommittable;
|
|
funcarg_t args[sARGS_MAX];
|
|
struct functag_s *next;
|
|
} functag_t;
|
|
|
|
typedef struct funcenum_s
|
|
{
|
|
int value;
|
|
char name[sNAMEMAX+1];
|
|
functag_t *first;
|
|
functag_t *last;
|
|
struct funcenum_s *next;
|
|
} funcenum_t;
|
|
|
|
typedef struct structarg_s
|
|
{
|
|
int tag;
|
|
int dimcount;
|
|
cell dims[sDIMEN_MAX];
|
|
char name[sNAMEMAX+1];
|
|
int fconst;
|
|
int ident;
|
|
unsigned int offs;
|
|
int index;
|
|
} structarg_t;
|
|
|
|
typedef struct pstruct_s
|
|
{
|
|
int argcount;
|
|
char name[sNAMEMAX+1];
|
|
structarg_t **args;
|
|
struct pstruct_s *next;
|
|
} pstruct_t;
|
|
|
|
/**
|
|
* Pawn Structs
|
|
*/
|
|
pstruct_t *pstructs_add(const char *name);
|
|
void pstructs_free();
|
|
pstruct_t *pstructs_find(const char *name);
|
|
structarg_t *pstructs_addarg(pstruct_t *pstruct, const structarg_t *arg);
|
|
structarg_t *pstructs_getarg(pstruct_t *pstruct, const char *member);
|
|
|
|
/**
|
|
* Function enumeration tags
|
|
*/
|
|
void funcenums_free();
|
|
funcenum_t *funcenums_add(const char *name);
|
|
funcenum_t *funcenums_find_byval(int value);
|
|
functag_t *functags_add(funcenum_t *en, functag_t *src);
|
|
|
|
/**
|
|
* Heap functions
|
|
*/
|
|
void pushheaplist();
|
|
memuse_list_t *popsaveheaplist();
|
|
void popheaplist();
|
|
int markheap(int type, int size);
|
|
|
|
/**
|
|
* Stack functions
|
|
*/
|
|
void pushstacklist();
|
|
void popstacklist();
|
|
int markstack(int type, int size);
|
|
/**
|
|
* Generates code to free mem usage, but does not pop the list.
|
|
* This is used for code like dobreak()/docont()/doreturn().
|
|
* stop_id is the list at which to stop generating.
|
|
*/
|
|
void genstackfree(int stop_id);
|
|
void genheapfree(int stop_id);
|
|
|
|
/**
|
|
* Resets a mem list by freeing everything
|
|
*/
|
|
void resetstacklist();
|
|
void resetheaplist();
|
|
|
|
extern memuse_list_t *heapusage;
|
|
extern memuse_list_t *stackusage;
|
|
|
|
#endif //_INCLUDE_SOURCEPAWN_COMPILER_TRACKER_H_
|