X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fsysmacs.lisp;h=9f7fc9d5c983d1976c1fad0d502ff5e1ce7528e2;hb=f392742d2781f42b3bb15b637e5008e10fbbe092;hp=2fb0e46614843d92c5ab9b3cd4e43d3e5964f8ac;hpb=cea4896b2482b7b2b429c1631d774b4cfbc0efba;p=sbcl.git diff --git a/src/code/sysmacs.lisp b/src/code/sysmacs.lisp index 2fb0e46..9f7fc9d 100644 --- a/src/code/sysmacs.lisp +++ b/src/code/sysmacs.lisp @@ -13,19 +13,20 @@ ;;; This checks to see whether the array is simple and the start and ;;; end are in bounds. If so, it proceeds with those values. -;;; Otherwise, it calls %WITH-ARRAY-DATA. Note that there is a -;;; DERIVE-TYPE method for %WITH-ARRAY-DATA. +;;; Otherwise, it calls %WITH-ARRAY-DATA. Note that %WITH-ARRAY-DATA +;;; may be further optimized. +;;; +;;; Given any ARRAY, bind DATA-VAR to the array's data vector and +;;; START-VAR and END-VAR to the start and end of the designated +;;; portion of the data vector. SVALUE and EVALUE are any start and +;;; end specified to the original operation, and are factored into the +;;; bindings of START-VAR and END-VAR. OFFSET-VAR is the cumulative +;;; offset of all displacements encountered, and does not include +;;; SVALUE. (defmacro with-array-data (((data-var array &key (offset-var (gensym))) (start-var &optional (svalue 0)) (end-var &optional (evalue nil))) &body forms) - #!+sb-doc - "Given any Array, binds Data-Var to the array's data vector and Start-Var and - End-Var to the start and end of the designated portion of the data vector. - Svalue and Evalue are any start and end specified to the original operation, - and are factored into the bindings of Start-Var and End-Var. Offset-Var is - the cumulative offset of all displacements encountered, and does not - include Svalue." (once-only ((n-array array) (n-svalue `(the index ,svalue)) (n-evalue `(the (or index null) ,evalue)))