From 2d36548ee2b07c379b5cca812e59562b869a7855 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Fri, 9 Jun 2017 20:56:34 -0700 Subject: ffi: support ref, refset and indexing on carray. * lib.c (generic_funcall): Handle carray object via the same cas that handles vectors, lists and strings. That in turn works via ref and other lower-level functions (not all of which support carray yet). (ref): Handle carray object via carray_ref. (refset): Handle carray_object via carray_refset. --- lib.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib.c b/lib.c index d43107a1..525a7824 100644 --- a/lib.c +++ b/lib.c @@ -5866,6 +5866,7 @@ val generic_funcall(val fun, struct args *args_in) case STR: case LIT: case LSTR: + carray: bug_unless (args->argc >= ARGS_MIN); args_normalize(args, 3); @@ -5928,6 +5929,10 @@ val generic_funcall(val fun, struct args *args_in) default: callerror(fun, lit("too many arguments")); } +#if HAVE_LIBFFI + } else if (fun->co.cls == carray_s) { + goto carray; +#endif } else if (structp(fun)) { fun = method(fun, lambda_s); break; @@ -9197,6 +9202,10 @@ val ref(val seq, val ind) case COBJ: if (seq->co.cls == hash_s) return gethash(seq, ind); +#if HAVE_LIBFFI + if (seq->co.cls == carray_s) + return carray_ref(seq, ind); +#endif /* fallthrough */ case CONS: case LCONS: @@ -9228,6 +9237,10 @@ val refset(val seq, val ind, val newval) case COBJ: if (seq->co.cls == hash_s) return sethash(seq, ind, newval); +#if HAVE_LIBFFI + if (seq->co.cls == carray_s) + return carray_refset(seq, ind, newval); +#endif default: type_mismatch(lit("ref: ~s is not a sequence"), seq, nao); } -- cgit v1.2.3