sourcepawn/compiler/sctracker.h
author Scott Ehlert <ds@alliedmods.net>
Thu Apr 05 10:55:40 2007 +0000 (2007-04-05)
changeset 669 ce01c2eb020c
parent 459 f3fc29440299
permissions -rw-r--r--
Various things:
- Fixed inline translations when using %T
- "Improved" caching of server language
- Renamed Translator::GetServerLanguageCode() to GetServerLanguage()
- Added some more comments to sm_globals.h
- Natives folder in project file mysteriously was moved inside Interfaces, so moved it back o_O
- DS hates empty if statements :o
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@167
    49
typedef struct structarg_s
dvander@167
    50
{
dvander@167
    51
  int tag;
dvander@167
    52
  int dimcount;
dvander@167
    53
  cell dims[sDIMEN_MAX];
dvander@167
    54
  char name[sNAMEMAX+1];
dvander@167
    55
  int fconst;
dvander@167
    56
  int ident;
dvander@167
    57
  unsigned int offs;
dvander@167
    58
  int index;
dvander@167
    59
} structarg_t;
dvander@167
    60
dvander@167
    61
typedef struct pstruct_s
dvander@167
    62
{
dvander@167
    63
  int argcount;
dvander@167
    64
  char name[sNAMEMAX+1];
dvander@167
    65
  structarg_t **args;
dvander@167
    66
  struct pstruct_s *next;
dvander@167
    67
} pstruct_t;
dvander@167
    68
dvander@167
    69
/**
dvander@167
    70
 * Pawn Structs
dvander@167
    71
 */
dvander@167
    72
pstruct_t *pstructs_add(const char *name);
dvander@167
    73
void pstructs_free();
dvander@167
    74
pstruct_t *pstructs_find(const char *name);
dvander@167
    75
structarg_t *pstructs_addarg(pstruct_t *pstruct, const structarg_t *arg);
dvander@167
    76
structarg_t *pstructs_getarg(pstruct_t *pstruct, const char *member);
dvander@167
    77
dvander@132
    78
/**
dvander@132
    79
 * Function enumeration tags
dvander@132
    80
 */
dvander@132
    81
void funcenums_free();
dvander@132
    82
funcenum_t *funcenums_add(const char *name);
dvander@132
    83
funcenum_t *funcenums_find_byval(int value);
dvander@132
    84
functag_t *functags_add(funcenum_t *en, functag_t *src);
dvander@132
    85
dvander@116
    86
/**
dvander@116
    87
 * Heap functions
dvander@116
    88
 */
dvander@115
    89
void pushheaplist();
dvander@116
    90
memuse_list_t *popsaveheaplist();
dvander@115
    91
void popheaplist();
dvander@115
    92
int markheap(int type, int size);
dvander@115
    93
dvander@116
    94
/**
dvander@116
    95
 * Stack functions
dvander@116
    96
 */
dvander@116
    97
void pushstacklist();
dvander@459
    98
void popstacklist(int codegen);
dvander@116
    99
int markstack(int type, int size);
dvander@117
   100
/**
dvander@118
   101
 * Generates code to free mem usage, but does not pop the list.  
dvander@117
   102
 *  This is used for code like dobreak()/docont()/doreturn().
dvander@117
   103
 * stop_id is the list at which to stop generating.
dvander@117
   104
 */
dvander@117
   105
void genstackfree(int stop_id);
dvander@118
   106
void genheapfree(int stop_id);
dvander@117
   107
dvander@117
   108
/**
dvander@118
   109
 * Resets a mem list by freeing everything
dvander@117
   110
 */
dvander@117
   111
void resetstacklist();
dvander@118
   112
void resetheaplist();
dvander@116
   113
dvander@116
   114
extern memuse_list_t *heapusage;
dvander@116
   115
extern memuse_list_t *stackusage;
dvander@116
   116
dvander@115
   117
#endif //_INCLUDE_SOURCEPAWN_COMPILER_TRACKER_H_