A void return type combined with result parameters will discard the void result.

Enhancement request from issue #170.
This commit is contained in:
Alex Shinn 2013-01-20 18:25:04 +09:00
parent 7d3d700300
commit 8f956416fc

View file

@ -1110,6 +1110,7 @@
(define (write-results func) (define (write-results func)
(let ((error-res? (error-type? (type-base (func-ret-type func)))) (let ((error-res? (error-type? (type-base (func-ret-type func))))
(void-res? (eq? 'void (type-base (func-ret-type func))))
(results (func-results func))) (results (func-results func)))
(if error-res? (if error-res?
(cat " if (" (cat " if ("
@ -1149,13 +1150,13 @@
(write-result (car results) first-result-link) (write-result (car results) first-result-link)
(for-each write-result (cdr results)))) (for-each write-result (cdr results))))
(cond (cond
((> (length results) (if error-res? 1 0)) ((> (length results) (if (or error-res? void-res?) 1 0))
(if error-res? (if (or error-res? void-res?)
(cat " res = SEXP_NULL;\n") (cat " res = SEXP_NULL;\n")
(cat " res = sexp_cons(ctx, res, SEXP_NULL);\n")) (cat " res = sexp_cons(ctx, res, SEXP_NULL);\n"))
(for-each (for-each
(lambda (x) (lambda (x)
(if error-res? (if (or error-res? void-res?)
(cat " sexp_push(ctx, res, res" (type-index x) ");\n") (cat " sexp_push(ctx, res, res" (type-index x) ");\n")
(cat " sexp_push(ctx, res, sexp_car(res));\n" (cat " sexp_push(ctx, res, sexp_car(res));\n"
" sexp_cadr(res) = res" (type-index x) ";\n"))) " sexp_cadr(res) = res" (type-index x) ";\n")))