|
35 | 35 |
|
36 | 36 | (defgeneric calculate-no-whitespace-length (obj) |
37 | 37 | (:method (obj) |
38 | | - (print "No no"))) |
| 38 | + (print "Can't calculate no-whitespace-length for obj ~S" obj))) |
39 | 39 |
|
40 | 40 | (defmethod calculate-no-whitespace-length :around ((obj no-whitespace-length-mixin)) |
41 | 41 | (if (slot-boundp obj 'no-whitespace-length) |
|
47 | 47 | (unless (slot-boundp obj 'no-whitespace-length) |
48 | 48 | (setf no-whitespace-length (calculate-no-whitespace-length obj))))) |
49 | 49 |
|
| 50 | +;;;LEXEM-WRAPPER-NODE |
50 | 51 | (define-node lexem-wrapper-node () |
51 | 52 | ((lexem-info :accessor lexem-info |
52 | 53 | :initarg :lexem-info))) |
|
65 | 66 | (print-unreadable-object (obj stream) |
66 | 67 | (format stream "~S" (lexem-string lexem-info))))) |
67 | 68 |
|
| 69 | +;;;DEFUN-NODE |
68 | 70 | (define-node defun-node (parenthesis-mixin keyword-mixin) |
69 | 71 | ((function-name :accessor function-name |
70 | 72 | :initarg :func-name) |
|
83 | 85 | (calculate-no-whitespace-length keyword-lexem) |
84 | 86 | 2))) |
85 | 87 |
|
| 88 | +;;;FUNCTION-CALL-NODE |
86 | 89 | (define-node function-call-node (parenthesis-mixin) |
87 | 90 | ((func-lexem :accessor func-lexem |
88 | 91 | :initarg :func-lexem) |
|
100 | 103 | (print-unreadable-object (obj stream) |
101 | 104 | (format stream "Funcall ~S" func-lexem)))) |
102 | 105 |
|
| 106 | +;;;LIST-NODE |
103 | 107 | (define-node list-node (parenthesis-mixin) |
104 | 108 | ((elements :accessor elements |
105 | 109 | :initarg :elements))) |
106 | 110 |
|
107 | 111 | (defmethod calculate-no-whitespace-length ((obj list-node)) |
108 | 112 | (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)))) |
111 | 114 |
|
112 | 115 | (defmethod calculate-no-whitespace-length ((obj list)) |
113 | 116 | (loop :for el :in obj |
114 | | - :sum (calculate-no-whitespace-length el))) |
| 117 | + :sum (calculate-no-whitespace-length el))) |
115 | 118 |
|
| 119 | +(defmethod calculate-no-whitespace-length ((obj vector)) |
| 120 | + (loop :for el :across obj |
| 121 | + :sum (calculate-no-whitespace-length el))) |
0 commit comments