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!)))
e env)
(generate (multiple-return "") `(begin . ,r) env)
(runstack-sync! runstack)
(out-open "if (~a_count != 1)" vals-id)
(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
[(return-can-omit-single? ret)
(out-close!)]

View File

@ -21,10 +21,12 @@
[(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)]
[(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)]
[(vector-ref unsafe-vector-ref) (and (= n 2) 'c_vector_ref)]
[(set-box! unsafe-set-box!) (and (= n 2) can-gc? 'c_box_set)]
[(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-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)]
[(string-ref unsafe-string-ref) (and (= n 2) can-gc? 'c_string_ref)]
[(bytes-ref unsafe-bytes-ref) (and (= n 2) 'c_bytes_ref)]