X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Farray-tran.lisp;h=5f1a28dac1ac87ce582dfc2a4eaa6b231c6af4a6;hb=98a76d4426660876dec6649b1e228d2e5b47f579;hp=a384a6c0e64234ca22189dc70ec086f4df9d0710;hpb=2db3b6b4cb740d5b6512459c223859f747807b09;p=sbcl.git diff --git a/src/compiler/array-tran.lisp b/src/compiler/array-tran.lisp index a384a6c..5f1a28d 100644 --- a/src/compiler/array-tran.lisp +++ b/src/compiler/array-tran.lisp @@ -689,11 +689,17 @@ `(aref (the ,',type ,a) ,@i)) (define-source-transform ,setter (a &rest i) `(%aset (the ,',type ,a) ,@i))))) - (define-frob svref %svset simple-vector) - (define-frob schar %scharset simple-string) - (define-frob char %charset string) (define-frob sbit %sbitset (simple-array bit)) (define-frob bit %bitset (array bit))) +(macrolet ((define-frob (reffer setter type) + `(progn + (define-source-transform ,reffer (a i) + `(aref (the ,',type ,a) ,i)) + (define-source-transform ,setter (a i v) + `(%aset (the ,',type ,a) ,i ,v))))) + (define-frob svref %svset simple-vector) + (define-frob schar %scharset simple-string) + (define-frob char %charset string)) (macrolet (;; This is a handy macro for computing the row-major index ;; given a set of indices. We wrap each index with a call