aboutsummaryrefslogtreecommitdiffstats
path: root/awk.h
diff options
context:
space:
mode:
authorAndrew J. Schorr <aschorr@telemetry-investments.com>2017-01-25 14:58:35 -0500
committerAndrew J. Schorr <aschorr@telemetry-investments.com>2017-01-25 14:58:35 -0500
commit6b12d4f726b9578d5c878fa765d5c167c9d71618 (patch)
treea568048349602ff1be7dfd5c439e569e016f9545 /awk.h
parent4c19bff0e44c358deb8efacf2cda0dbaf4a45823 (diff)
downloadegawk-6b12d4f726b9578d5c878fa765d5c167c9d71618.tar.gz
egawk-6b12d4f726b9578d5c878fa765d5c167c9d71618.tar.bz2
egawk-6b12d4f726b9578d5c878fa765d5c167c9d71618.zip
Minor rewrite of block allocator to improve clarity.
Diffstat (limited to 'awk.h')
-rw-r--r--awk.h18
1 files changed, 11 insertions, 7 deletions
diff --git a/awk.h b/awk.h
index 34c0e07d..66163519 100644
--- a/awk.h
+++ b/awk.h
@@ -1050,10 +1050,14 @@ struct flagtab {
};
-typedef struct block_item {
- size_t size;
+struct block_item {
+ struct block_item *freep;
+};
+
+struct block_header {
struct block_item *freep;
-} BLOCK;
+ size_t size;
+};
enum block_id {
BLOCK_INVALID = 0, /* not legal */
@@ -1118,7 +1122,7 @@ extern afunc_t int_array_func[];
/* special node used to indicate success in array routines (not NULL) */
extern NODE *success_node;
-extern BLOCK nextfree[];
+extern struct block_header nextfree[];
extern bool field0_valid;
extern int do_flags;
@@ -1305,10 +1309,10 @@ DEREF(NODE *r)
&((n)->var_value) : r_get_lhs((n), (r))
#define getblock(p, id, ty) (void) ((p = (ty) nextfree[id].freep) ? \
- (ty) (nextfree[id].freep = ((BLOCK *) p)->freep) \
+ (ty) (nextfree[id].freep = ((struct block_item *) p)->freep) \
: (p = (ty) more_blocks(id)))
-#define freeblock(p, id) (void) (((BLOCK *) p)->freep = nextfree[id].freep, \
- nextfree[id].freep = (BLOCK *) p)
+#define freeblock(p, id) (void) (((struct block_item *) p)->freep = nextfree[id].freep, \
+ nextfree[id].freep = (struct block_item *) p)
#define getnode(n) getblock(n, BLOCK_NODE, NODE *)
#define freenode(n) freeblock(n, BLOCK_NODE)