summaryrefslogtreecommitdiff
path: root/src/iter.c
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2015-02-14 15:04:28 -0500
committerAdrian Thurston <thurston@complang.org>2015-02-14 15:04:28 -0500
commit63e23d75bacdca95863026476b90c76292ec0807 (patch)
tree2aa6914f7ac5035edad131ea96c73342677aeab7 /src/iter.c
parentf0089542330fa9ff580faf2e69f18bd6f7367e50 (diff)
downloadcolm-63e23d75bacdca95863026476b90c76292ec0807.tar.gz
make it possible to iterate the values of a value list or map
Diffstat (limited to 'src/iter.c')
-rw-r--r--src/iter.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/iter.c b/src/iter.c
index 31632b1a..6620d9bf 100644
--- a/src/iter.c
+++ b/src/iter.c
@@ -128,6 +128,20 @@ Tree *colm_list_iter_deref_cur( Program *prg, ListIter *iter )
return (Tree*)s;
}
+Tree *colm_viter_deref_cur( Program *prg, ListIter *iter )
+{
+ GenericInfo *gi = &prg->rtd->genericInfo[iter->genericId];
+ ListEl *el = (ListEl*)iter->ref.kid;
+ struct colm_struct *s = el != 0 ?
+ colm_struct_container( el, gi->elOffset ) : 0;
+
+ Tree *val = colm_struct_get_field( s, Tree*, 0 );
+ if ( gi->valueType == TYPE_TREE )
+ treeUpref( val );
+
+ return (Tree*)val;
+}
+
void initTreeIter( TreeIter *treeIter, Tree **stackRoot,
long argSize, long rootSize,
const Ref *rootRef, int searchId )