From 4e987026148fe65c323afbc93cd560c07bf06b3f Mon Sep 17 00:00:00 2001 From: Yale AI Dept Date: Wed, 14 Jul 1993 13:08:00 -0500 Subject: Import to github. --- runtime/array-prims.scm | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 runtime/array-prims.scm (limited to 'runtime/array-prims.scm') diff --git a/runtime/array-prims.scm b/runtime/array-prims.scm new file mode 100644 index 0000000..6b553f5 --- /dev/null +++ b/runtime/array-prims.scm @@ -0,0 +1,55 @@ +;;; array-prims.scm -- array primitives +;;; +;;; author : John & Sandra +;;; date : 14 May 1993 + + +;;; Vector reference, returning unboxed value + +(define-syntax (prim.vector-sel vec i) + `(vector-ref ,vec ,i)) + + +;;; Destructive vector update. All arguments are unboxed. + +(define-syntax (prim.vector-update vec i newval) + `(setf (vector-ref ,vec ,i) ,newval)) + + +;;; Make a vector whose elements are initialized to val (which is boxed). + +(define-syntax (prim.make-vector size val) + `(make-vector ,size ,val)) + + +;;; Copy an existing vector. + +(define-syntax (prim.copy-vector vec) + `(vector-copy ,vec)) + + +;;; Explicit force operation + +(define-syntax (prim.force x) + `(force ,x)) + + +;;; The first parameter is forced first since this prim is declared to +;;; be strict in the first arg. + +(define-syntax (prim.strict1 force-this leave-this) + `(begin + ;; Can't ignore the first argument entirely since doing so + ;; might result in variable-bound-but-not-referenced errors. + ;; Hopefully the Lisp compiler will be smart enough to get + ;; rid of this when appropriate. + ,force-this + ;; Don't generate a stupid (force (delay x)) sequence here if + ;; we don't need to. + ,(if (and (pair? leave-this) + (or (eq? (car leave-this) 'delay) + (eq? (car leave-this) 'box))) + (cadr leave-this) + `(force ,leave-this)))) + + -- cgit v1.2.3