~ chicken-core (chicken-5) 1e17a7003b78614b5b00e01a80b2e05100ba8117
commit 1e17a7003b78614b5b00e01a80b2e05100ba8117 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Sat Mar 19 18:19:58 2011 +0100 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Sat Mar 19 18:19:58 2011 +0100 handle (const c-string) as foreign result type (fixes #541, eported by syn) diff --git a/support.scm b/support.scm index 94ab99e8..4afec0ee 100644 --- a/support.scm +++ b/support.scm @@ -1128,17 +1128,27 @@ [(c-string-list) `(##sys#peek-c-string-list ,body '#f)] [(c-string-list*) `(##sys#peek-and-free-c-string-list ,body '#f)] [else - (cond - [(and (list? type) (= 3 (length type)) - (memq (car type) '(instance instance-ref))) - (let ((tmp (gensym))) - `(let ((,tmp ,body)) - (and ,tmp - (not (##sys#null-pointer? ,tmp)) - (make ,(caddr type) 'this ,tmp) ) ) ) ] - [(and (list? type) (= 3 (length type)) (eq? 'nonnull-instance (car type))) - `(make ,(caddr type) 'this ,body) ] - [else body] ) ] ) ) + (if (list? type) + (if (and (eq? (car type) 'const) + (= 2 (length type)) + (memq (cadr type) '(c-string c-string* unsigned-c-string + unsigned-c-string* nonnull-c-string + nonnull-c-string* + nonnull-unsigned-string*))) + (finish-foreign-result (cadr type) body) + (if (= 3 (length type)) + (case (car type) + ((instance instance-ref) + (let ((tmp (gensym))) + `(let ((,tmp ,body)) + (and ,tmp + (not (##sys#null-pointer? ,tmp)) + (make ,(caddr type) 'this ,tmp) ) ) ) ) + ((nonnull-instance) + `(make ,(caddr type) 'this ,body) ) + (else body)) + body)) + body)])) ;;; Scan expression-node for variable usage:Trap