From cb97cfbac7d631c5da61cd344cf8e7b7a8346b4f Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 19 Sep 2018 18:51:41 -0400 Subject: [PATCH] WIP --- scheme/cyclone/cgen.sld | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/scheme/cyclone/cgen.sld b/scheme/cyclone/cgen.sld index bc4494b2..43badff7 100644 --- a/scheme/cyclone/cgen.sld +++ b/scheme/cyclone/cgen.sld @@ -1223,8 +1223,16 @@ ;; ;; Compile a reference to an element of a closure. (define (c-compile-closure-element-ref ast-id var idx) - (string-append - "((closureN)" (mangle var) ")->elements[" idx "]")) + (with-fnc ast-id (lambda (fnc) + (trace:info `(c-compile-closure-element-ref ,ast-id ,var ,idx ,fnc)) + (cond + ((and (adbf:well-known fnc) + (pair? (adbf:all-params fnc)) + (equal? (adbf:closure-size fnc) 1)) + (mangle (car (adbf:all-params fnc)))) + (else + (string-append + "((closureN)" (mangle var) ")->elements[" idx "]")))))) ;; c-compile-closure : closure-exp (string -> void) -> string @@ -1319,7 +1327,7 @@ ))))) ;(trace:info (list 'JAE-DEBUG trace macro?)) (cond - (#f ;;TODO: use-obj-instead-of-closure? + (use-obj-instead-of-closure? (create-object)) (else (c-code/vars