[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

Reply via email to