diff --git a/compiler/array-tran.lisp b/compiler/array-tran.lisp
index 6c0abc5ad2d749d0552e1a6a926d84f86b03a737..586b6cce21f5dca1f4f4ba16c6ca09ce7bf797ae 100644
--- a/compiler/array-tran.lisp
+++ b/compiler/array-tran.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/array-tran.lisp,v 1.32 2003/04/13 11:57:17 gerd Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/array-tran.lisp,v 1.33 2003/04/27 11:43:43 gerd Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -542,12 +542,23 @@
 		  (if (byte-compiling)
 		      (values nil t)
 		      `(%aset (the ,',type ,a) ,@i))))))
-  (frob svref %svset simple-vector)
-  (frob schar %scharset simple-string)
-  (frob char %charset string)
   (frob sbit %sbitset (simple-array bit))
   (frob bit %bitset (array bit)))
 
+(macrolet ((frob (reffer setter type)
+	     `(progn
+		(def-source-transform ,reffer (a i)
+		  (if (byte-compiling)
+		      (values nil t)
+		      `(aref (the ,',type ,a) ,i)))
+		(def-source-transform ,setter (a i v)
+		  (if (byte-compiling)
+		      (values nil t)
+		      `(%aset (the ,',type ,a) ,i ,v))))))
+  (frob svref %svset simple-vector)
+  (frob schar %scharset simple-string)
+  (frob char %charset string))
+
 ;;; AREF, %ASET  --  transform.
 ;;; 
 ;;; Convert into a data-vector-ref (or set) with the set of indices replaced