From bbe89f54c18df3f50d4d43f9ae2f34459e6bbd19 Mon Sep 17 00:00:00 2001 From: Alex Plotnick Date: Mon, 22 Apr 2013 18:24:22 -0400 Subject: [PATCH] Tangle simple vector marker contents. --- clweb-tests.lisp | 4 ++-- clweb.clw | 12 +++++++----- clweb.lisp | 10 ++++++---- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/clweb-tests.lisp b/clweb-tests.lisp index b3360de..a9778e0 100644 --- a/clweb-tests.lisp +++ b/clweb-tests.lisp @@ -330,8 +330,8 @@ (VALUES (QUOTED-FORM MARKER) (MARKER-VALUE MARKER))) IDENTITY #'IDENTITY) (DEFTEST READ-SIMPLE-VECTOR - (MARKER-VALUE (READ-FORM-FROM-STRING "#5(:a :b :c)")) - #(:A :B :C :C :C)) + (MARKER-VALUE (READ-FORM-FROM-STRING "#5(:a :b :c #C(0 1))")) + #(:A :B :C #C(0 1) #C(0 1))) (DEFTEST READ-BIT-VECTOR (MARKER-VALUE (READ-FORM-FROM-STRING "#6*101")) #*101111) (DEFTEST (READ-TIME-EVAL 1) diff --git a/clweb.clw b/clweb.clw index e0f5676..4678c0c 100644 --- a/clweb.clw +++ b/clweb.clw @@ -1929,13 +1929,15 @@ abbreviation. @l (defclass simple-vector-marker (marker) ((length :initarg :length) - (elements :initarg :elements) - (element-type :initarg :element-type)) + (elements :reader simple-vector-marker-elements :initarg :elements) + (element-type :reader simple-vector-marker-element-type ; + :initarg :element-type)) (:default-initargs :element-type t)) (defmethod marker-boundp ((marker simple-vector-marker)) t) (defmethod marker-value ((marker simple-vector-marker)) - (with-slots (elements element-type) marker + (let ((elements (tangle (simple-vector-marker-elements marker))) + (element-type (simple-vector-marker-element-type marker))) (if (slot-boundp marker 'length) (with-slots (length) marker (let ((supplied-length (length elements))) @@ -1968,8 +1970,8 @@ abbreviation. @t@l (deftest read-simple-vector - (marker-value (read-form-from-string "#5(:a :b :c)")) - #(:a :b :c :c :c)) + (marker-value (read-form-from-string "#5(:a :b :c #C(0 1))")) + #(:a :b :c #C(0 1) #C(0 1))) @ Sharpsign asterisk also creates a vector, but the token following the asterisk must be composed entirely of the characters `0' and~`1', which diff --git a/clweb.lisp b/clweb.lisp index 9ded0e8..89de4cb 100644 --- a/clweb.lisp +++ b/clweb.lisp @@ -688,13 +688,15 @@ TANGLE-FILE.") (SET-DISPATCH-MACRO-CHARACTER #\# #\' #'SHARPSIGN-QUOTE-READER (READTABLE-FOR-MODE MODE))) (DEFCLASS SIMPLE-VECTOR-MARKER (MARKER) - ((LENGTH :INITARG :LENGTH) (ELEMENTS :INITARG :ELEMENTS) - (ELEMENT-TYPE :INITARG :ELEMENT-TYPE)) + ((LENGTH :INITARG :LENGTH) + (ELEMENTS :READER SIMPLE-VECTOR-MARKER-ELEMENTS :INITARG :ELEMENTS) + (ELEMENT-TYPE :READER SIMPLE-VECTOR-MARKER-ELEMENT-TYPE :INITARG + :ELEMENT-TYPE)) (:DEFAULT-INITARGS :ELEMENT-TYPE T)) (DEFMETHOD MARKER-BOUNDP ((MARKER SIMPLE-VECTOR-MARKER)) T) (DEFMETHOD MARKER-VALUE ((MARKER SIMPLE-VECTOR-MARKER)) - (WITH-SLOTS (ELEMENTS ELEMENT-TYPE) - MARKER + (LET ((ELEMENTS (TANGLE (SIMPLE-VECTOR-MARKER-ELEMENTS MARKER))) + (ELEMENT-TYPE (SIMPLE-VECTOR-MARKER-ELEMENT-TYPE MARKER))) (IF (SLOT-BOUNDP MARKER 'LENGTH) (WITH-SLOTS (LENGTH) MARKER