sourcepawn/compiler/sctracker.h
author David Anderson <dvander@alliedmods.net>
Sun Oct 15 23:31:09 2006 +0000 (2006-10-15)
changeset 117 f1edbb5d485a
parent 116 4965c485f121
child 118 0cfeb76486a2
permissions -rw-r--r--
committed new stack modification method
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@116
    19
/**
dvander@116
    20
 * Heap functions
dvander@116
    21
 */
dvander@115
    22
void pushheaplist();
dvander@116
    23
memuse_list_t *popsaveheaplist();
dvander@115
    24
void popheaplist();
dvander@115
    25
int markheap(int type, int size);
dvander@115
    26
dvander@116
    27
/**
dvander@116
    28
 * Stack functions
dvander@116
    29
 */
dvander@116
    30
void pushstacklist();
dvander@116
    31
void popstacklist();
dvander@116
    32
int markstack(int type, int size);
dvander@117
    33
/**
dvander@117
    34
 * Generates code to free stack usage, but does not pop the list.  
dvander@117
    35
 *  This is used for code like dobreak()/docont()/doreturn().
dvander@117
    36
 * stop_id is the list at which to stop generating.
dvander@117
    37
 */
dvander@117
    38
void genstackfree(int stop_id);
dvander@117
    39
dvander@117
    40
/**
dvander@117
    41
 * Resets the stack list by freeing everything
dvander@117
    42
 */
dvander@117
    43
void resetstacklist();
dvander@116
    44
dvander@116
    45
extern memuse_list_t *heapusage;
dvander@116
    46
extern memuse_list_t *stackusage;
dvander@116
    47
dvander@115
    48
#endif //_INCLUDE_SOURCEPAWN_COMPILER_TRACKER_H_