summaryrefslogtreecommitdiffstats
path: root/lib.h
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2024-06-15 15:01:16 -0700
committerKaz Kylheku <kaz@kylheku.com>2024-06-15 15:01:16 -0700
commit38a76d820decec3c703185b12a0f89bedec7716c (patch)
treeb4a0dea1deb5004adbbf6d1cc88f90a550c2d4d7 /lib.h
parent08eef02fb98856550fdd6a2cdccfdb65dc0cfec8 (diff)
downloadtxr-38a76d820decec3c703185b12a0f89bedec7716c.tar.gz
txr-38a76d820decec3c703185b12a0f89bedec7716c.tar.bz2
txr-38a76d820decec3c703185b12a0f89bedec7716c.zip
New permi: iterator version of perm.
* eval.c (eval_init): Register permi intrinsic. * combi.c (permi_get, permi_peek, permi_clone): New static functions. (permi_ops): New static structure. (permi_iter): New static function. (permi): New function. * combi.h (permi): Declared. * lib.h (struct seq_iter_ops): New function pointer, clone. (seq_iter_ops_init, seq_iter_ops_init_nomark): Initialize new member. (seq_iter_ops_init_clone): New macro. (seq_iter_cls): Existing external name declared. (seq_iter_cobj_ops, seq_iter_mark_op): Previously internal names declared external. * lib.c (seq_iter_mark_op, seq_iter_cobj_ops): Static variables become extern. (seq_iter_clone): New static function. (seq_iter_init_with_info): Use seq_iter_clone instead of assuming we can trivially clone an iterator state bitwise.
Diffstat (limited to 'lib.h')
-rw-r--r--lib.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/lib.h b/lib.h
index 07c37b9f..04e4f725 100644
--- a/lib.h
+++ b/lib.h
@@ -465,10 +465,13 @@ struct seq_iter_ops {
int (*get)(struct seq_iter *, val *pval);
int (*peek)(struct seq_iter *, val *pval);
void (*mark)(struct seq_iter *);
+ void (*clone)(const struct seq_iter *, struct seq_iter *);
};
-#define seq_iter_ops_init(get, peek) { get, peek, seq_iter_mark_op }
-#define seq_iter_ops_init_nomark(get, peek) { get, peek, 0 }
+#define seq_iter_ops_init(get, peek) { get, peek, seq_iter_mark_op, 0 }
+#define seq_iter_ops_init_nomark(get, peek) { get, peek, 0, 0 }
+#define seq_iter_ops_init_clone(get, peek, clone) \
+ { get, peek, seq_iter_mark_op, clone }
typedef struct seq_build {
val obj;
@@ -745,12 +748,16 @@ typedef unsigned long alloc_bytes_t;
extern alloc_bytes_t malloc_bytes;
extern alloc_bytes_t gc_bytes;
+extern struct cobj_class *seq_iter_cls;
+extern struct cobj_ops seq_iter_cobj_ops;
+
val identity(val obj);
val built_in_type_p(val sym);
val typeof(val obj);
val subtypep(val sub, val sup);
val typep(val obj, val type);
seq_info_t seq_info(val cobj);
+void seq_iter_mark_op(struct seq_iter *it);
void seq_iter_init_with_info(val self, seq_iter_t *it,
seq_info_t si, int support_rewind);
void seq_iter_init(val self, seq_iter_t *it, val obj);