mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-13 07:47:39 +02:00
Issue #193 - WIP converting functions
This commit is contained in:
parent
23249133af
commit
6fc1966f7b
1 changed files with 15 additions and 13 deletions
|
@ -707,8 +707,10 @@
|
||||||
(string-append "\"" (cstr:escape-chars str) "\""))
|
(string-append "\"" (cstr:escape-chars str) "\""))
|
||||||
|
|
||||||
(define-c string-byte-length
|
(define-c string-byte-length
|
||||||
"(void *data, int argc, closure _, object k, object s)"
|
"(void *data, object clo, object k, int argc, object *args)"
|
||||||
" return_closcall1(data, k, Cyc_string_byte_length(data, s)); ")
|
" Cyc_check_argc(data, \"string-byte-length\", argc, 1);
|
||||||
|
object s = args[0];
|
||||||
|
return_closcall1(data, k, Cyc_string_byte_length(data, s)); ")
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Primitives
|
;; Primitives
|
||||||
|
@ -2042,7 +2044,7 @@
|
||||||
(emit*
|
(emit*
|
||||||
"static void __lambda_gc_ret_"
|
"static void __lambda_gc_ret_"
|
||||||
(number->string (car l))
|
(number->string (car l))
|
||||||
"(void *data, int argc,"
|
"(void *data, int argc," TODO: update this and call below
|
||||||
params-str
|
params-str
|
||||||
")"
|
")"
|
||||||
"{"
|
"{"
|
||||||
|
@ -2086,7 +2088,7 @@
|
||||||
;; Emit inlinable function list
|
;; Emit inlinable function list
|
||||||
(cond
|
(cond
|
||||||
((not program?)
|
((not program?)
|
||||||
(emit* "void c_" (lib:name->string lib-name) "_inlinable_lambdas(void *data, int argc, closure _, object cont){ ")
|
(emit* "void c_" (lib:name->string lib-name) "_inlinable_lambdas(void *data, object clo, object k, int argc, object *args){ ")
|
||||||
(let ((pairs '())
|
(let ((pairs '())
|
||||||
(head-pair #f))
|
(head-pair #f))
|
||||||
(for-each
|
(for-each
|
||||||
|
@ -2120,22 +2122,23 @@
|
||||||
(cdr ps)
|
(cdr ps)
|
||||||
(cdr cs)))))
|
(cdr cs)))))
|
||||||
(if head-pair
|
(if head-pair
|
||||||
(emit* "(((closure)cont)->fn)(data, 1, cont, &" head-pair ");")
|
TODO: need to change these function calls over
|
||||||
(emit* "(((closure)cont)->fn)(data, 1, cont, NULL);"))
|
also, go back and check our changes, I think there is at least one other direct closure call we need to update
|
||||||
|
(emit* "(((closure)k)->fn)(data, 1, k, &" head-pair ");")
|
||||||
|
(emit* "(((closure)k)->fn)(data, 1, k, NULL);"))
|
||||||
(emit* " } "))))
|
(emit* " } "))))
|
||||||
|
|
||||||
;; Emit entry point
|
;; Emit entry point
|
||||||
(cond
|
(cond
|
||||||
(program?
|
(program?
|
||||||
(emit "static void c_entry_pt_first_lambda(void *data, int argc, closure cont, object value);")
|
(emit "static void c_entry_pt_first_lambda(void *data, object clo, object k, int argc, object *args);")
|
||||||
(for-each
|
(for-each
|
||||||
(lambda (lib-name)
|
(lambda (lib-name)
|
||||||
(emit* "extern void c_" (lib:name->string lib-name) "_entry_pt(void *data, int argc, closure cont, object value);"))
|
(emit* "extern void c_" (lib:name->string lib-name) "_entry_pt(void *data, object clo, object k, int argc, object* args);"))
|
||||||
required-libs)
|
required-libs)
|
||||||
(emit "static void c_entry_pt(data, argc, env,cont) void *data; int argc; closure env,cont; { "))
|
(emit "static void c_entry_pt(void *data, object clo, object k, int argc, object *args) { "))
|
||||||
(else
|
(else
|
||||||
(emit* "void c_" (lib:name->string lib-name) "_entry_pt_first_lambda(data, argc, cont,value) void *data; int argc; closure cont; object value;{ ")
|
(emit* "void c_" (lib:name->string lib-name) "_entry_pt_first_lambda(void *data, object clo, object k, int argc, object *args){ ")
|
||||||
;; DEBUG (emit (string-append "printf(\"init " (lib:name->string lib-name) "\\n\");"))
|
|
||||||
))
|
))
|
||||||
|
|
||||||
;; Set global-changed indicator
|
;; Set global-changed indicator
|
||||||
|
@ -2272,8 +2275,7 @@
|
||||||
;; Start cont chain, but do not assume closcall1 macro was defined
|
;; Start cont chain, but do not assume closcall1 macro was defined
|
||||||
"(" this-clo ".fn)(data, 0, &" this-clo ", &" this-clo ");")
|
"(" this-clo ".fn)(data, 0, &" this-clo ", &" this-clo ");")
|
||||||
(emit "}")
|
(emit "}")
|
||||||
(emit "static void c_entry_pt_first_lambda(void *data, int argc, closure cont, object value) {")
|
(emit "static void c_entry_pt_first_lambda(void *data, object clo, object k, int argc, object *args) {")
|
||||||
;; DEBUG (emit (string-append "printf(\"init first lambda\\n\");"))
|
|
||||||
(emit compiled-program)
|
(emit compiled-program)
|
||||||
(emit ";")))
|
(emit ";")))
|
||||||
(else
|
(else
|
||||||
|
|
Loading…
Add table
Reference in a new issue