|
59 | 59 | ;; function definition |
60 | 60 | (pattern-lambda (function (-$ (call name . argl) (|::| (call name . argl) _t)) body) |
61 | 61 | (cons 'varlist (safe-llist-positional-args (fix-arglist argl)))) |
62 | | - (pattern-lambda (function (where (-$ (call name . argl) (|::| (call name . argl) _t)) . wheres) body) |
63 | | - (cons 'varlist (append (safe-llist-positional-args (fix-arglist argl)) |
64 | | - (typevar-names wheres)))) |
| 62 | + (pattern-lambda (function (where callspec . wheres) body) |
| 63 | + (let ((others (pattern-expand1 vars-introduced-by-patterns `(function ,callspec ,body)))) |
| 64 | + (cons 'varlist (append (if (and (pair? others) (eq? (car others) 'varlist)) |
| 65 | + (cdr others) |
| 66 | + '()) |
| 67 | + (typevar-names wheres))))) |
65 | 68 |
|
66 | 69 | (pattern-lambda (function (tuple . args) body) |
67 | 70 | `(-> (tuple ,@args) ,body)) |
|
71 | 74 | `(function (call (curly ,name . ,sparams) . ,argl) ,body)) |
72 | 75 | (pattern-lambda (= (-$ (call name . argl) (|::| (call name . argl) _t)) body) |
73 | 76 | `(function (call ,name ,@argl) ,body)) |
74 | | - (pattern-lambda (= (where (-$ (call name . argl) (|::| (call name . argl) _t)) . wheres) body) |
| 77 | + (pattern-lambda (= (where callspec . wheres) body) |
75 | 78 | (cons 'function (cdr __))) |
76 | 79 |
|
77 | 80 | ;; anonymous function |
|
150 | 153 |
|
151 | 154 | (pattern-lambda (function (-$ (call name . argl) (|::| (call name . argl) _t)) body) |
152 | 155 | (cons 'varlist (safe-llist-keyword-args (fix-arglist argl)))) |
153 | | - (pattern-lambda (function (where (-$ (call name . argl) (|::| (call name . argl) _t)) . wheres) body) |
154 | | - (cons 'varlist (safe-llist-keyword-args (fix-arglist argl)))) |
| 156 | + (pattern-lambda (function (where callspec . wheres) body) |
| 157 | + `(function ,callspec ,body)) |
155 | 158 |
|
156 | 159 | (pattern-lambda (= (call (curly name . sparams) . argl) body) |
157 | 160 | `(function (call (curly ,name . ,sparams) . ,argl) ,body)) |
158 | 161 | (pattern-lambda (= (-$ (call name . argl) (|::| (call name . argl) _t)) body) |
159 | 162 | `(function (call ,name ,@argl) ,body)) |
160 | | - (pattern-lambda (= (where (-$ (call name . argl) (|::| (call name . argl) _t)) . wheres) body) |
| 163 | + (pattern-lambda (= (where callspec . wheres) body) |
161 | 164 | (cons 'function (cdr __))) |
162 | 165 | )) |
163 | 166 |
|
|
0 commit comments