diff --git a/lib/srfi/231/base.scm b/lib/srfi/231/base.scm index b329a585..661806d7 100644 --- a/lib/srfi/231/base.scm +++ b/lib/srfi/231/base.scm @@ -334,6 +334,7 @@ (define (array-freeze! array) (%array-setter-set! array #f) + (make-immutable! (array-body array)) array) ;; Indexing diff --git a/lib/srfi/231/base.sld b/lib/srfi/231/base.sld index 3745333f..6f127e55 100644 --- a/lib/srfi/231/base.sld +++ b/lib/srfi/231/base.sld @@ -46,4 +46,9 @@ specialized-getter specialized-setter array-freeze! ) + (cond-expand + (chibi + (import (only (chibi) make-immutable!))) + (else + (begin (define-syntax make-immutable! (syntax-rules () ((_ x) #f)))))) (include "base.scm")) diff --git a/lib/srfi/231/test.sld b/lib/srfi/231/test.sld index 0f0bc637..fc4bb599 100644 --- a/lib/srfi/231/test.sld +++ b/lib/srfi/231/test.sld @@ -2188,6 +2188,19 @@ (array-curry (list*->array 3 '(((4 7) (2 6)) ((1 0) (0 1)))) 2) 0))) + (let* ((A (array-copy + (make-array (make-interval '#(0 0) '#(10 10)) + (lambda (i j) (inexact (+ (* i 10.) j)))) + f32-storage-class)) + (A3 (array-ref (array-curry A 1) 3))) + (test 37. (array-ref A 3 7)) + (test 37. (array-ref A3 7)) + (array-set! A 0. 3 7) + (test 0. (array-ref A 3 7)) + (test 0. (array-ref A3 7)) + (array-freeze! A) + (test-error (array-set! A 1. 3 7)) + (test-error (array-set! A3 1. 7))) ;; (test-error ;; (array-curry (make-array (make-interval '#(0 0) '#(1 1)) list) 0))