File tree Expand file tree Collapse file tree 3 files changed +38
-6
lines changed Expand file tree Collapse file tree 3 files changed +38
-6
lines changed Original file line number Diff line number Diff line change 15
15
(type :type elsa-type :initarg :type :initform (elsa-type-mixed))
16
16
(narrow-types :initarg :narrow-type :initform nil )
17
17
(reachable :type trinary :initarg :reachable :initform (trinary-true))
18
- (parent :type (or elsa-form nil ) :initarg :parent )
18
+ (parent
19
+ :type (or elsa-form null )
20
+ :initarg :parent
21
+ :documentation " Parent form." )
22
+ (previous
23
+ :type (or elsa-form null )
24
+ :initarg :previous
25
+ :documentation " Previous form in a sequence." )
19
26
(annotation :type list :initarg :annotation :initform nil ))
20
27
:abstract t )
21
28
Original file line number Diff line number Diff line change @@ -656,17 +656,27 @@ for the analysis."
656
656
(let ((cons-form (cond
657
657
((elsa--quote-p (car form))
658
658
(elsa--read-quote form state))
659
- (t (elsa--read-cons form state)))))
659
+ (t (elsa--read-cons form state))))
660
+ (previous nil ))
660
661
(elsa-form-foreach cons-form
661
- (lambda (f ) (oset f parent cons-form)))
662
+ (lambda (f )
663
+ (oset f parent cons-form)
664
+ ; ; first one is set to nil
665
+ (oset f previous previous)
666
+ (setq previous f)))
662
667
cons-form))
663
668
((integerp form) (elsa--read-integer form))
664
669
((floatp form) (elsa--read-float form))
665
670
((stringp form) (elsa--read-string form))
666
671
((vectorp form)
667
- (let ((vector-form (elsa--read-vector form state)))
672
+ (let ((vector-form (elsa--read-vector form state))
673
+ (previous nil ))
668
674
(elsa-form-foreach vector-form
669
- (lambda (f ) (oset f parent vector-form)))
675
+ (lambda (f )
676
+ (oset f parent vector-form)
677
+ ; ; first one is set to nil
678
+ (oset f previous previous)
679
+ (setq previous f)))
670
680
vector-form))
671
681
((functionp form) (elsa--read-function form state))
672
682
(t (error " Invalid form " )))))
Original file line number Diff line number Diff line change 153
153
(it " should read a list in dotted notation with quoted last cdr"
154
154
(elsa-test-with-read-form " (foo . (quote . '(bar baz)))" form
155
155
(expect (elsa-form-list-p form) :to-be-truthy )
156
- (expect (elsa-form-print form) :to-equal " (foo quote quote (bar baz))" )))))
156
+ (expect (elsa-form-print form) :to-equal " (foo quote quote (bar baz))" ))))
157
157
158
+ (describe " setting parents"
159
+
160
+ (it " should set parent of forms in a list to the list form"
161
+ (elsa-test-with-read-form " (a b c)" form
162
+ (expect (oref (elsa-nth 0 form) parent) :to-be form)
163
+ (expect (oref (elsa-nth 1 form) parent) :to-be form)
164
+ (expect (oref (elsa-nth 2 form) parent) :to-be form))))
165
+
166
+ (describe " setting previous"
167
+
168
+ (it " should set previous of forms in a list to the previous form"
169
+ (elsa-test-with-read-form " (a b c)" form
170
+ (expect (oref (elsa-nth 0 form) previous) :to-be nil )
171
+ (expect (oref (elsa-nth 1 form) previous) :to-be (elsa-nth 0 form))
172
+ (expect (oref (elsa-nth 2 form) previous) :to-be (elsa-nth 1 form))))))
158
173
159
174
(describe " functions"
160
175
You can’t perform that action at this time.
0 commit comments