Issue #193 - WIP converting functions

This commit is contained in:
Justin Ethier 2021-01-21 23:04:06 -05:00
parent 23249133af
commit 6fc1966f7b

View file

@ -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