|
130 | 130 | normalized-list))) |
131 | 131 | (nreverse normalized-list))) |
132 | 132 |
|
133 | | -(defun sort-untyped-lambda-list (untyped-lambda-list) |
134 | | - "Sorts keyword arguments (if any) according to STRING<" |
135 | | - (if (member '&key untyped-lambda-list) |
136 | | - (let* ((key-position (position '&key untyped-lambda-list))) |
137 | | - (append (subseq untyped-lambda-list 0 key-position) |
138 | | - '(&key) |
139 | | - (sort (subseq untyped-lambda-list (1+ key-position)) |
140 | | - #'string< |
141 | | - :key (lambda (param) |
142 | | - (if (and (listp param) |
143 | | - (null (cddr param))) |
144 | | - (car param) |
145 | | - param))))) |
146 | | - untyped-lambda-list)) |
147 | | - |
148 | | -(defun sort-typed-lambda-list (typed-lambda-list) |
149 | | - "Sorts keyword arguments (if any) according to STRING<" |
150 | | - (if (member '&key typed-lambda-list) |
151 | | - (let ((key-position |
152 | | - (position '&key |
153 | | - typed-lambda-list))) |
154 | | - (append (subseq typed-lambda-list |
155 | | - 0 key-position) |
156 | | - '(&key) |
157 | | - (sort (subseq typed-lambda-list |
158 | | - (1+ key-position)) |
159 | | - #'string< |
160 | | - :key #'caar))) |
161 | | - typed-lambda-list)) |
162 | | - |
163 | 133 | (def-test normalize-typed-lambda-list (:suite lambda-list) |
164 | 134 | (5am:is-true (equal '((a t)) |
165 | 135 | (normalize-typed-lambda-list '(a)))) |
|
196 | 166 | (is (equal '(a &key c) (untyped-lambda-list '((a number) &key ((c string)))))) |
197 | 167 | (is (equal '(a &rest args) (untyped-lambda-list '((a number) &rest args))))) |
198 | 168 |
|
| 169 | +(defun sort-untyped-lambda-list (untyped-lambda-list) |
| 170 | + "Sorts keyword arguments (if any) according to STRING<" |
| 171 | + (if (member '&key untyped-lambda-list) |
| 172 | + (let* ((key-position (position '&key untyped-lambda-list))) |
| 173 | + (append (subseq untyped-lambda-list 0 key-position) |
| 174 | + '(&key) |
| 175 | + (sort (subseq untyped-lambda-list (1+ key-position)) |
| 176 | + #'string< |
| 177 | + :key (lambda (param) |
| 178 | + (if (and (listp param) |
| 179 | + (null (cddr param))) |
| 180 | + (car param) |
| 181 | + param))))) |
| 182 | + untyped-lambda-list)) |
| 183 | + |
| 184 | +(defun sort-typed-lambda-list (typed-lambda-list) |
| 185 | + "Sorts keyword arguments (if any) according to STRING<" |
| 186 | + (if (member '&key typed-lambda-list) |
| 187 | + (let ((key-position |
| 188 | + (position '&key |
| 189 | + typed-lambda-list))) |
| 190 | + (append (subseq typed-lambda-list |
| 191 | + 0 key-position) |
| 192 | + '(&key) |
| 193 | + (sort (subseq typed-lambda-list |
| 194 | + (1+ key-position)) |
| 195 | + #'string< |
| 196 | + :key #'caar))) |
| 197 | + typed-lambda-list)) |
| 198 | + |
199 | 199 | (declaim (ftype (function (list list) polymorph-parameters) |
200 | 200 | make-polymorph-parameters-from-lambda-lists)) |
201 | 201 | (defun make-polymorph-parameters-from-lambda-lists (polymorphic-function-lambda-list |
|
0 commit comments