Skip to content

Commit 4e0f64d

Browse files
committed
element* in ast-gen is now vector, no list
1 parent 2bf5d00 commit 4e0f64d

File tree

2 files changed

+17
-14
lines changed

2 files changed

+17
-14
lines changed

DiffBackend/src/abstract-sem-tree-generator.lisp

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@
3636
(defun is-atom-s-expr? (s-expr)
3737
(eq (first s-expr) :atom))
3838

39+
(defun get-form*-vector (form*-list)
40+
(when form*-list
41+
(map 'vector #'match-s-expr form*-list)))
42+
3943
(defun make-lexem-wrapper (lexem)
4044
(make-instance 'lexem-wrapper-node :lexem-info lexem))
4145

@@ -54,9 +58,7 @@
5458
:func-name (make-lexem-wrapper (third name))
5559
:parenthesis-info par-info
5660
:parameters-list (gen-list-node parms)
57-
:body-forms (mapcar (lambda (form)
58-
(match-s-expr form))
59-
forms))))
61+
:body-forms (get-form*-vector forms))))
6062
(add-to-stats (lexem-string (third name))
6163
res-obj
6264
:stat-name :defuns
@@ -67,10 +69,7 @@
6769
(when (eq (first list-element) :list)
6870
(make-instance 'list-node
6971
:parenthesis-info (second list-element)
70-
:elements (mapcar (lambda (el)
71-
(match-s-expr el))
72-
(rest
73-
(rest list-element))))))
72+
:elements (get-form*-vector (rest (rest list-element))))))
7473

7574
(defun match-function-call (list-element)
7675
(destructuring-bind (type par-info func-form &rest args)
@@ -79,6 +78,4 @@
7978
(make-instance 'function-call-node
8079
:func-lexem (match-s-expr func-form)
8180
:parenthesis-info par-info
82-
:func-arg-forms (mapcar (lambda (arg)
83-
(match-s-expr arg))
84-
args))))
81+
:func-arg-forms (get-form*-vector args))))

DiffBackend/src/nodes.lisp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535

3636
(defgeneric calculate-no-whitespace-length (obj)
3737
(:method (obj)
38-
(print "No no")))
38+
(print "Can't calculate no-whitespace-length for obj ~S" obj)))
3939

4040
(defmethod calculate-no-whitespace-length :around ((obj no-whitespace-length-mixin))
4141
(if (slot-boundp obj 'no-whitespace-length)
@@ -47,6 +47,7 @@
4747
(unless (slot-boundp obj 'no-whitespace-length)
4848
(setf no-whitespace-length (calculate-no-whitespace-length obj)))))
4949

50+
;;;LEXEM-WRAPPER-NODE
5051
(define-node lexem-wrapper-node ()
5152
((lexem-info :accessor lexem-info
5253
:initarg :lexem-info)))
@@ -65,6 +66,7 @@
6566
(print-unreadable-object (obj stream)
6667
(format stream "~S" (lexem-string lexem-info)))))
6768

69+
;;;DEFUN-NODE
6870
(define-node defun-node (parenthesis-mixin keyword-mixin)
6971
((function-name :accessor function-name
7072
:initarg :func-name)
@@ -83,6 +85,7 @@
8385
(calculate-no-whitespace-length keyword-lexem)
8486
2)))
8587

88+
;;;FUNCTION-CALL-NODE
8689
(define-node function-call-node (parenthesis-mixin)
8790
((func-lexem :accessor func-lexem
8891
:initarg :func-lexem)
@@ -100,16 +103,19 @@
100103
(print-unreadable-object (obj stream)
101104
(format stream "Funcall ~S" func-lexem))))
102105

106+
;;;LIST-NODE
103107
(define-node list-node (parenthesis-mixin)
104108
((elements :accessor elements
105109
:initarg :elements)))
106110

107111
(defmethod calculate-no-whitespace-length ((obj list-node))
108112
(with-slots (elements) obj
109-
(+ 2 (loop :for el :in elements
110-
:sum (calculate-no-whitespace-length el)))))
113+
(+ 2 (calculate-no-whitespace-length elements))))
111114

112115
(defmethod calculate-no-whitespace-length ((obj list))
113116
(loop :for el :in obj
114-
:sum (calculate-no-whitespace-length el)))
117+
:sum (calculate-no-whitespace-length el)))
115118

119+
(defmethod calculate-no-whitespace-length ((obj vector))
120+
(loop :for el :across obj
121+
:sum (calculate-no-whitespace-length el)))

0 commit comments

Comments
 (0)