diff options
author | Adrian Thurston <thurston@complang.org> | 2014-12-25 18:07:59 -0500 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2014-12-25 18:07:59 -0500 |
commit | d8addd5e8f81d57d7f3746562c7a0fbed67111a7 (patch) | |
tree | 165b93961a6ad4d69c9d63319e346cae8c65fd96 /src | |
parent | c2049c9de73d3416a1d0f3a51f8fa04be65be6c8 (diff) | |
download | colm-d8addd5e8f81d57d7f3746562c7a0fbed67111a7.tar.gz |
more function cleanup in struct fields
Diffstat (limited to 'src')
-rw-r--r-- | src/bytecode.c | 25 | ||||
-rw-r--r-- | src/program.c | 6 | ||||
-rw-r--r-- | src/struct.c | 6 | ||||
-rw-r--r-- | src/struct.h | 11 |
4 files changed, 27 insertions, 21 deletions
diff --git a/src/bytecode.c b/src/bytecode.c index 15694ed7..2f565b6c 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -1292,7 +1292,7 @@ again: read_half( size ); debug( prg, REALM_BYTECODE, "IN_NEW_STRUCT %hd\n", size ); - Struct *item = colm_new_struct( prg, size ); + Struct *item = colm_struct_new( prg, size ); vm_push( (Tree*)item ); break; } @@ -1304,7 +1304,7 @@ again: Tree *obj = vm_pop(); - Tree *val = colm_struct_val( obj, field ); + Tree *val = colm_struct_get_field( obj, field ); treeUpref( val ); vm_push( val ); break; @@ -1365,8 +1365,9 @@ again: Tree *val = vm_pop(); /* Downref the old value. */ - treeDownref( prg, sp, colm_struct_val( obj, field ) ); - colm_struct_val( obj, field ) = val; + Tree *prev = colm_struct_get_field( obj, field ); + treeDownref( prg, sp, prev ); + colm_struct_set_field( obj, field, val ); break; } case IN_SET_STRUCT_WV: { @@ -1415,7 +1416,7 @@ again: debug( prg, REALM_BYTECODE, "IN_GET_STRUCT_VAL_R %d\n", field ); Tree *obj = vm_pop(); - Tree *val = colm_struct_val( obj, field ); + Tree *val = colm_struct_get_field( obj, field ); vm_push( val ); break; } @@ -1428,7 +1429,7 @@ again: Tree *obj = vm_pop(); Tree *val = vm_pop(); - colm_struct_val( obj, field ) = val; + colm_struct_set_field( obj, field, val ); break; } case IN_SET_STRUCT_VAL_WV: { @@ -1441,7 +1442,7 @@ again: Tree *val = vm_pop(); /* FIXME: save val here. */ - colm_struct_val( obj, field ) = val; + colm_struct_set_field( obj, field, val ); break; } case IN_GET_RHS_VAL_R: { @@ -3792,8 +3793,9 @@ again: /* Tree comes back upreffed. */ Tree *tree = constructArgv0( prg, prg->argc, prg->argv ); - treeDownref( prg, sp, colm_struct_val( prg->global, field ) ); - colm_struct_val( prg->global, field ) = tree; + Tree *prev = colm_struct_get_field( prg->global, field ); + treeDownref( prg, sp, prev ); + colm_struct_set_field( prg->global, field, tree ); break; } case IN_LOAD_ARGV: { @@ -3803,8 +3805,9 @@ again: /* Tree comes back upreffed. */ Tree *tree = constructArgv( prg, prg->argc, prg->argv ); - treeDownref( prg, sp, colm_struct_val( prg->global, field ) ); - colm_struct_val( prg->global, field ) = tree; + Tree *prev = colm_struct_get_field( prg->global, field ); + treeDownref( prg, sp, prev ); + colm_struct_set_field( prg->global, field, tree ); break; } case IN_INIT_LOCALS: { diff --git a/src/program.c b/src/program.c index 194c8976..56d78741 100644 --- a/src/program.c +++ b/src/program.c @@ -21,12 +21,12 @@ static void colm_alloc_global( Program *prg ) { /* Alloc the global. */ - prg->global = colm_new_struct( prg, prg->rtd->globalId ) ; + prg->global = colm_struct_new( prg, prg->rtd->globalId ) ; } static void colm_clear_global( Program *prg, Tree **sp ) { - colm_delete_struct( prg, sp, prg->global ); + colm_struct_delete( prg, sp, prg->global ); prg->global = 0; } @@ -289,7 +289,7 @@ static void colm_clear_heap( Program *prg, Tree **sp ) struct colm_struct *hi = prg->heap.head; while ( hi != 0 ) { struct colm_struct *next = hi->next; - colm_delete_struct( prg, sp, hi ); + colm_struct_delete( prg, sp, hi ); hi = next; } } diff --git a/src/struct.c b/src/struct.c index 04c785cb..b54f5870 100644 --- a/src/struct.c +++ b/src/struct.c @@ -6,10 +6,10 @@ struct colm_tree *colm_get_global( Program *prg, long pos ) { - return colm_struct_val( prg->global, pos ); + return colm_struct_get_field( prg->global, pos ); } -struct colm_struct *colm_new_struct( Program *prg, int id ) +struct colm_struct *colm_struct_new( Program *prg, int id ) { int structSize = prg->rtd->selInfo[id].size; size_t memsize = sizeof(struct colm_struct) + ( sizeof(Tree*) * structSize ); @@ -31,7 +31,7 @@ struct colm_struct *colm_new_struct( Program *prg, int id ) return item; } -void colm_delete_struct( Program *prg, Tree **sp, struct colm_struct *el ) +void colm_struct_delete( Program *prg, Tree **sp, struct colm_struct *el ) { short *t = prg->rtd->selInfo[el->id].trees; int i, len = prg->rtd->selInfo[el->id].treesLen; diff --git a/src/struct.h b/src/struct.h index 1f5d87b6..a973b9ac 100644 --- a/src/struct.h +++ b/src/struct.h @@ -1,10 +1,13 @@ #ifndef _COLM_STRUCT_H -#define colm_struct_val(obj, field) \ +struct colm_struct *colm_struct_new( struct colm_program *prg, int id ); +void colm_struct_delete( struct colm_program *prg, struct colm_tree **sp, + struct colm_struct *el ); + +#define colm_struct_get_field(obj, field) \ ((struct colm_tree**)(((struct colm_struct*)obj)+1))[field] -struct colm_struct *colm_new_struct( struct colm_program *prg, int id ); -void colm_delete_struct( struct colm_program *prg, struct colm_tree **sp, - struct colm_struct *el ); +#define colm_struct_set_field(obj, field, val) \ + ((struct colm_tree**)(((struct colm_struct*)obj)+1))[field] = val #endif |