mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-18 13:19:17 +02:00
49 lines
1.1 KiB
Scheme
49 lines
1.1 KiB
Scheme
;;;; Cyclone Scheme
|
|
;;;; https://github.com/justinethier/cyclone
|
|
;;;;
|
|
;;;; Copyright (c) 2014-2016, Justin Ethier
|
|
;;;; All rights reserved.
|
|
;;;;
|
|
;;;; This module automatically generates the following files:
|
|
;;;;
|
|
;;;; - dispatch.c => Used by apply to call native C functions.
|
|
;;;;
|
|
(import (scheme base)
|
|
(scheme file)
|
|
(scheme write))
|
|
|
|
(with-output-to-file
|
|
"dispatch.c"
|
|
(lambda ()
|
|
(display "
|
|
#include \"cyclone/types.h\"
|
|
#include \"cyclone/runtime.h\"
|
|
|
|
void do_dispatch(void *data, int argc, function_type func, object clo, object *b) {
|
|
switch(argc) {" )
|
|
|
|
(define bs "")
|
|
(let loop ((i 0))
|
|
(display "case " )
|
|
(display i )
|
|
(display ":func(" )
|
|
(display "data,")
|
|
(display i )
|
|
(display ",clo" )
|
|
(display bs )
|
|
(display ");" )
|
|
|
|
(set! bs (string-append bs ",*(b+" (number->string i) ")"))
|
|
(if (< i 149)
|
|
(loop (+ i 1))))
|
|
|
|
(display "
|
|
default:
|
|
{
|
|
char buf[1024];
|
|
snprintf(buf, 1023, \"Unhandled number of function arguments: %d\\n\", argc);
|
|
Cyc_rt_raise_msg(data, buf);
|
|
}
|
|
}
|
|
}" )))
|
|
|