summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2014-12-25 18:07:59 -0500
committerAdrian Thurston <thurston@complang.org>2014-12-25 18:07:59 -0500
commitd8addd5e8f81d57d7f3746562c7a0fbed67111a7 (patch)
tree165b93961a6ad4d69c9d63319e346cae8c65fd96 /src
parentc2049c9de73d3416a1d0f3a51f8fa04be65be6c8 (diff)
downloadcolm-d8addd5e8f81d57d7f3746562c7a0fbed67111a7.tar.gz
more function cleanup in struct fields
Diffstat (limited to 'src')
-rw-r--r--src/bytecode.c25
-rw-r--r--src/program.c6
-rw-r--r--src/struct.c6
-rw-r--r--src/struct.h11
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