[email protected] writes:
> Here's my attempt to reproduce these problems:
It seems to be related to how the function is defined, which I do
with s7_make_typed_function & s7_define using this macro (I plan
to one day figure out how signatures work):
#define K7_DEFINE_FUN(S,E,N,F,R,O,V,D) do { \
s7_pointer _sym = s7_make_symbol((S), (N)); \
s7_pointer _fun = s7_make_typed_function((S), (N), (F), (R), (O), \
(V), (D), NULL); \
s7_define((S), (E), _sym, _fun); \
s7_symbol_set_initial_value((S), _sym, _fun); \
} while (0)
The final s7_symbol_set_initial_value here has no effect and I can
toggle the fault on and off with this wrapper:
$ cc --version
OpenBSD clang version 16.0.6
Target: amd64-unknown-openbsd7.7
Thread model: posix
InstalledDir: /usr/bin
$ cc -c s7.c -o s7.o
$ cc -c s7bug.c -o s7bug.o
$ cc -lm s7bug.o s7.o -o s7bug
#include <stdio.h>
#include "s7.h"
static s7_pointer g_4_values(s7_scheme *sc, s7_pointer args)
{
return(s7_values(sc, s7_list(sc, 4, s7_make_integer(sc, 0),
s7_make_integer(sc, 1),
s7_make_integer(sc, 2),
s7_make_integer(sc, 3))));
}
int
main (int argc,
char **argv)
{
s7_scheme *sc = s7_init();
s7_pointer root = s7_rootlet(sc);
#if 1 // segfaults:
s7_pointer _sym = s7_make_symbol(sc, "values4");
s7_pointer _fun = s7_make_typed_function(sc, "values4", g_4_values,
0, 0, false, "(values4)", NULL);
s7_define(sc, root, _sym, _fun);
#else // ok:
s7_define_function(sc, "values4", g_4_values, 0, 0, false, NULL);
#endif
s7_set_curlet(sc, root);
return s7_integer(s7_load(sc, argv[1]));
}
/* Scheme file referred to by argv[1]:
(define (foo)
(format #t "not ok 1 - ~A" (list (values4)))
(newline)
;;;
(format #t "not ok 2 - ~A" X)
(newline)
)
(foo)
*/
_______________________________________________
Cmdist mailing list
[email protected]
https://cm-mail.stanford.edu/mailman/listinfo/cmdist