aboutsummaryrefslogtreecommitdiffstats
path: root/awk.h
diff options
context:
space:
mode:
Diffstat (limited to 'awk.h')
-rw-r--r--awk.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/awk.h b/awk.h
index 363e4403..345d87b3 100644
--- a/awk.h
+++ b/awk.h
@@ -1061,6 +1061,9 @@ struct block_item {
struct block_header {
struct block_item *freep;
size_t size;
+#ifdef MEMDEBUG
+ long cnt;
+#endif
};
enum block_id {
@@ -1323,12 +1326,23 @@ DEREF(NODE *r)
#define get_lhs(n, r) (n)->type == Node_var && ! var_uninitialized(n) ? \
&((n)->var_value) : r_get_lhs((n), (r))
+#ifdef MEMDEBUG
+
+extern void *r_getblock(int id);
+extern void r_freeblock(void *, int id);
+#define getblock(p, id, ty) (void) (p = r_getblock(id))
+#define freeblock(p, id) (void) (r_freeblock(p, id))
+
+#else /* MEMDEBUG */
+
#define getblock(p, id, ty) (void) ((p = (ty) nextfree[id].freep) ? \
(ty) (nextfree[id].freep = ((struct block_item *) p)->freep) \
: (p = (ty) more_blocks(id)))
#define freeblock(p, id) (void) (((struct block_item *) p)->freep = nextfree[id].freep, \
nextfree[id].freep = (struct block_item *) p)
+#endif /* MEMDEBUG */
+
#define getnode(n) getblock(n, BLOCK_NODE, NODE *)
#define freenode(n) freeblock(n, BLOCK_NODE)