summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bytecode.c32
-rw-r--r--src/bytecode.h1
-rw-r--r--src/pdarun.c2
-rw-r--r--src/program.c2
-rw-r--r--src/program.h2
-rw-r--r--src/struct.c5
-rw-r--r--src/tree.c25
-rw-r--r--src/tree.h4
8 files changed, 38 insertions, 35 deletions
diff --git a/src/bytecode.c b/src/bytecode.c
index f526476c..15694ed7 100644
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -1158,7 +1158,7 @@ again:
Tree *obj = vm_pop();
treeDownref( prg, sp, obj );
- Tree *val = getField( obj, field );
+ Tree *val = colm_tree_get_field( obj, field );
treeUpref( val );
vm_push( val );
break;
@@ -1220,10 +1220,10 @@ again:
treeDownref( prg, sp, obj );
/* Downref the old value. */
- Tree *prev = getField( obj, field );
+ Tree *prev = colm_tree_get_field( obj, field );
treeDownref( prg, sp, prev );
- setField( prg, obj, field, val );
+ colm_tree_set_field( prg, obj, field, val );
break;
}
case IN_SET_FIELD_WV: {
@@ -1237,8 +1237,8 @@ again:
treeDownref( prg, sp, obj );
/* Save the old value, then set the field. */
- Tree *prev = getField( obj, field );
- setField( prg, obj, field, val );
+ Tree *prev = colm_tree_get_field( obj, field );
+ colm_tree_set_field( prg, obj, field, val );
/* Set up the reverse instruction. */
rcodeCode( exec, IN_SET_FIELD_BKT );
@@ -1259,10 +1259,10 @@ again:
treeDownref( prg, sp, obj );
/* Downref the old value. */
- Tree *prev = getField( obj, field );
+ Tree *prev = colm_tree_get_field( obj, field );
treeDownref( prg, sp, prev );
- setField( prg, obj, field, val );
+ colm_tree_set_field( prg, obj, field, val );
break;
}
case IN_SET_FIELD_LEAVE_WC: {
@@ -1277,11 +1277,11 @@ again:
Tree *val = vm_pop();
/* Downref the old value. */
- Tree *prev = getField( obj, field );
+ Tree *prev = colm_tree_get_field( obj, field );
treeDownref( prg, sp, prev );
/* Set the field. */
- setField( prg, obj, field, val );
+ colm_tree_set_field( prg, obj, field, val );
/* Leave the object on the top of the stack. */
vm_push( obj );
@@ -1380,8 +1380,8 @@ again:
treeDownref( prg, sp, obj );
/* Save the old value, then set the field. */
- Tree *prev = getField( obj, field );
- setField( prg, obj, field, val );
+ Tree *prev = colm_tree_get_field( obj, field );
+ colm_tree_set_field( prg, obj, field, val );
/* Set up the reverse instruction. */
rcodeCode( exec, IN_SET_FIELD_BKT );
@@ -1402,10 +1402,10 @@ again:
treeDownref( prg, sp, obj );
/* Downref the old value. */
- Tree *prev = getField( obj, field );
+ Tree *prev = colm_tree_get_field( obj, field );
treeDownref( prg, sp, prev );
- setField( prg, obj, field, val );
+ colm_tree_set_field( prg, obj, field, val );
break;
}
case IN_GET_STRUCT_VAL_R: {
@@ -3792,7 +3792,8 @@ again:
/* Tree comes back upreffed. */
Tree *tree = constructArgv0( prg, prg->argc, prg->argv );
- setField( prg, prg->global, field, tree );
+ treeDownref( prg, sp, colm_struct_val( prg->global, field ) );
+ colm_struct_val( prg->global, field ) = tree;
break;
}
case IN_LOAD_ARGV: {
@@ -3802,7 +3803,8 @@ again:
/* Tree comes back upreffed. */
Tree *tree = constructArgv( prg, prg->argc, prg->argv );
- setField( prg, prg->global, field, tree );
+ treeDownref( prg, sp, colm_struct_val( prg->global, field ) );
+ colm_struct_val( prg->global, field ) = tree;
break;
}
case IN_INIT_LOCALS: {
diff --git a/src/bytecode.h b/src/bytecode.h
index 218aa44e..57b9414b 100644
--- a/src/bytecode.h
+++ b/src/bytecode.h
@@ -540,7 +540,6 @@ void reverseExecution( Execution *exec, Tree **sp, RtCodeVect *allRev );
Kid *allocAttrs( struct colm_program *prg, long length );
void freeAttrs( struct colm_program *prg, Kid *attrs );
-void setAttr( Tree *tree, long pos, Tree *val );
Kid *getAttrKid( Tree *tree, long pos );
Tree *splitTree( struct colm_program *prg, Tree *t );
diff --git a/src/pdarun.c b/src/pdarun.c
index 85c687b1..a9fd2845 100644
--- a/src/pdarun.c
+++ b/src/pdarun.c
@@ -361,7 +361,7 @@ Kid *makeTokenWithData( Program *prg, PdaRun *pdaRun, FsmRun *fsmRun,
- fsmRun->mark[ca->mark_enter] );
Tree *string = constructString( prg, data );
treeUpref( string );
- setAttr( input->tree, ca->offset, string );
+ colm_tree_set_field( prg, input->tree, ca->offset, string );
}
}
diff --git a/src/program.c b/src/program.c
index d2e3096a..194c8976 100644
--- a/src/program.c
+++ b/src/program.c
@@ -21,7 +21,7 @@
static void colm_alloc_global( Program *prg )
{
/* Alloc the global. */
- prg->global = (Tree*) colm_new_struct( prg, prg->rtd->globalId ) ;
+ prg->global = colm_new_struct( prg, prg->rtd->globalId ) ;
}
static void colm_clear_global( Program *prg, Tree **sp )
diff --git a/src/program.h b/src/program.h
index ab9ebcd1..26be6869 100644
--- a/src/program.h
+++ b/src/program.h
@@ -106,7 +106,7 @@ typedef struct colm_program
unsigned char ctxDepParsing;
RuntimeData *rtd;
- Tree *global;
+ struct colm_struct *global;
int induceExit;
int exitStatus;
diff --git a/src/struct.c b/src/struct.c
index 5b37cb27..04c785cb 100644
--- a/src/struct.c
+++ b/src/struct.c
@@ -4,6 +4,11 @@
#include <stdlib.h>
#include <string.h>
+struct colm_tree *colm_get_global( Program *prg, long pos )
+{
+ return colm_struct_val( prg->global, pos );
+}
+
struct colm_struct *colm_new_struct( Program *prg, int id )
{
int structSize = prg->rtd->selInfo[id].size;
diff --git a/src/tree.c b/src/tree.c
index e9647376..171761ec 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -61,7 +61,7 @@ void freeKidList( Program *prg, Kid *kid )
}
}
-void setAttr( Tree *tree, long pos, Tree *val )
+static void colm_tree_set_attr( Tree *tree, long pos, Tree *val )
{
long i;
Kid *kid = tree->child;
@@ -76,9 +76,6 @@ void setAttr( Tree *tree, long pos, Tree *val )
kid->tree = val;
}
-Tree *colm_get_global( Program *prg, long pos )
- { return colm_get_attr( prg->global, pos ); }
-
Tree *colm_get_attr( Tree *tree, long pos )
{
long i;
@@ -610,7 +607,7 @@ Tree *constructTree( Program *prg, Kid *kid, Tree **bindings, long pat )
stringAllocPointer( prg,
nodes[ci].data, nodes[ci].length );
- setAttr( tree, ca->offset, attr );
+ colm_tree_set_attr( tree, ca->offset, attr );
}
}
@@ -668,7 +665,7 @@ Tree *constructToken( Program *prg, Tree **args, long nargs )
long i;
for ( i = 2; i < nargs; i++ ) {
- setAttr( tree, i-2, args[i] );
+ colm_tree_set_attr( tree, i-2, args[i] );
treeUpref( colm_get_attr( tree, i-2 ) );
}
}
@@ -1406,15 +1403,15 @@ Tree *colm_get_rhs_val( Program *prg, Tree *tree, int *a )
return 0;
}
-void setField( Program *prg, Tree *tree, long field, Tree *value )
+void colm_tree_set_field( Program *prg, Tree *tree, long field, Tree *value )
{
assert( tree->refs == 1 );
if ( value != 0 )
assert( value->refs >= 1 );
- setAttr( tree, field, value );
+ colm_tree_set_attr( tree, field, value );
}
-Tree *getField( Tree *tree, Word field )
+Tree *colm_tree_get_field( Tree *tree, Word field )
{
return colm_get_attr( tree, field );
}
@@ -1428,7 +1425,7 @@ Tree *getFieldSplit( Program *prg, Tree *tree, Word field )
{
Tree *val = colm_get_attr( tree, field );
Tree *split = splitTree( prg, val );
- setAttr( tree, field, split );
+ colm_tree_set_attr( tree, field, split );
return split;
}
@@ -1706,7 +1703,7 @@ void list2PushTail( Program *prg, Tree **sp, List *list, Tree *val )
el->id = 0;
el->refs = 1;
el->child = allocAttrs( prg, 2 );
- setAttr( val, list->genericInfo->elOffset, constructPointer( prg, el ) );
+ colm_tree_set_attr( val, list->genericInfo->elOffset, constructPointer( prg, el ) );
}
else {
/* Deref the list element (must be a pointer too for time being) */
@@ -1715,8 +1712,8 @@ void list2PushTail( Program *prg, Tree **sp, List *list, Tree *val )
/* val->prev = list->tail */
/* val->next = 0 */
- setAttr( el, 0, (Tree*)list->tail );
- setAttr( el, 1, 0 );
+ colm_tree_set_attr( el, 0, (Tree*)list->tail );
+ colm_tree_set_attr( el, 1, 0 );
Tree *pval = constructPointer( prg, val );
@@ -1732,7 +1729,7 @@ void list2PushTail( Program *prg, Tree **sp, List *list, Tree *val )
/* list->tail = val */
Tree *tel = colm_get_attr( ((Pointer*)list->tail)->value->tree,
list->genericInfo->elOffset );
- setAttr( ((Pointer*)tel)->value->tree, 1, pval );
+ colm_tree_set_attr( ((Pointer*)tel)->value->tree, 1, pval );
list->tail = (ListEl*)pval;
}
}
diff --git a/src/tree.h b/src/tree.h
index e0f7509d..a2d3a6a8 100644
--- a/src/tree.h
+++ b/src/tree.h
@@ -275,11 +275,11 @@ Tree *copyTree( struct colm_program *prg, Tree *tree,
Tree *getPtrVal( Pointer *ptr );
Tree *getPtrValSplit( struct colm_program *prg, Pointer *ptr );
-Tree *getField( Tree *tree, Word field );
+Tree *colm_tree_get_field( Tree *tree, Word field );
Tree *getFieldSplit( struct colm_program *prg, Tree *tree, Word field );
Tree *getRhsEl( struct colm_program *prg, Tree *lhs, long position );
Kid *getRhsElKid( struct colm_program *prg, Tree *lhs, long position );
-void setField( struct colm_program *prg, Tree *tree, long field, Tree *value );
+void colm_tree_set_field( struct colm_program *prg, Tree *tree, long field, Tree *value );
void setTriterCur( struct colm_program *prg, TreeIter *iter, Tree *tree );
void setUiterCur( struct colm_program *prg, UserIter *uiter, Tree *tree );