cify: fix a GC problem

This commit is contained in:
Matthew Flatt 2018-10-12 11:06:16 -06:00
parent b97811d4db
commit c43e42c903
2 changed files with 7 additions and 4 deletions

View File

@ -283,9 +283,10 @@
(out-close!))) (out-close!)))
e env) e env)
(generate (multiple-return "") `(begin . ,r) env) (generate (multiple-return "") `(begin . ,r) env)
(runstack-sync! runstack)
(out-open "if (~a_count != 1)" vals-id) (out-open "if (~a_count != 1)" vals-id)
(return ret runstack #:can-omit? #t (return ret runstack #:can-omit? #t
(format "scheme_values(~a_count, (Scheme_Object **)~a)" vals-id (runstack-ref runstack vals-id))) (format "scheme_values(~a_count, (Scheme_Object **)~a)" vals-id (runstack-ref runstack vals-id #:values-ok? #t)))
(cond (cond
[(return-can-omit-single? ret) [(return-can-omit-single? ret)
(out-close!)] (out-close!)]

View File

@ -21,10 +21,12 @@
[(box unsafe-make-place-local) (and (= n 1) can-gc? 'c_make_box)] [(box unsafe-make-place-local) (and (= n 1) can-gc? 'c_make_box)]
[(unbox unsafe-unbox unbox* unsafe-unbox* unsafe-place-local-ref) (and (= n 1) 'c_box_ref)] [(unbox unsafe-unbox unbox* unsafe-unbox* unsafe-place-local-ref) (and (= n 1) 'c_box_ref)]
[(weak-box-value) (and (or (= n 1) (= n 2)) 'c_weak_box_value)] [(weak-box-value) (and (or (= n 1) (= n 2)) 'c_weak_box_value)]
[(set-box! set-box*! unsafe-set-box! unsafe-set-box*! unsafe-place-local-set!) (and (= n 2) 'c_box_set)] [(set-box! unsafe-set-box!) (and (= n 2) can-gc? 'c_box_set)]
[(vector-ref unsafe-vector-ref) (and (= n 2) 'c_vector_ref)] [(set-box*! unsafe-set-box*! unsafe-place-local-set!) (and (= n 2) 'c_box_set)]
[(vector-ref unsafe-vector-ref) (and (= n 2) can-gc? 'c_vector_ref)]
[(vector*-ref unsafe-vector*-ref) (and (= n 2) 'c_authentic_vector_ref)] [(vector*-ref unsafe-vector*-ref) (and (= n 2) 'c_authentic_vector_ref)]
[(vector-set! unsafe-vector-set! vector*-set! unsafe-vector*-set!) (and (= n 3) 'c_vector_set)] [(vector-set! unsafe-vector-set!) (and (= n 3) can-gc? 'c_vector_set)]
[(vector*-set! unsafe-vector*-set!) (and (= n 3) 'c_vector_set)]
[(vector-length unsafe-vector-length vector*-length unsafe-vector*-length) (and (= n 1) 'c_vector_length)] [(vector-length unsafe-vector-length vector*-length unsafe-vector*-length) (and (= n 1) 'c_vector_length)]
[(string-ref unsafe-string-ref) (and (= n 2) can-gc? 'c_string_ref)] [(string-ref unsafe-string-ref) (and (= n 2) can-gc? 'c_string_ref)]
[(bytes-ref unsafe-bytes-ref) (and (= n 2) 'c_bytes_ref)] [(bytes-ref unsafe-bytes-ref) (and (= n 2) 'c_bytes_ref)]