Ticket #57: extlambda.diff

File extlambda.diff, 1.8 KB (added by sjamaan, 13 years ago)

Patch plus regression test

  • tests/module-tests.scm

     
    145145              (begin0 1 2 3))
    146146            1)
    147147
     148(module m14 (test-extlambda)
     149  (import chicken scheme)
     150  (define (test-extlambda string #!optional whatever)
     151    string))
     152
     153(import m14)
     154
     155(test-equal "extended lambda list uses expansion environment"
     156            "some text"
     157            (test-extlambda "some text"))
     158
    148159(test-end "modules")
  • expand.scm

     
    484484                          (loop 3 req opt '() r)
    485485                          (err "`#!key' argument marker in wrong context") ) ]
    486486                     [else
    487                       (cond [(symbol? x)
     487                      (cond [(symbol? var)
    488488                             (case mode
    489                                [(0) (loop 0 (cons x req) '() '() r)]
    490                                [(1) (loop 1 req (cons (list x #f) opt) '() r)]
     489                               [(0) (loop 0 (cons var req) '() '() r)]
     490                               [(1) (loop 1 req (cons (list var #f) opt) '() r)]
    491491                               [(2) (err "invalid lambda list syntax after `#!rest' marker")]
    492                                [else (loop 3 req opt (cons (list x) key) r)] ) ]
    493                             [(and (list? x) (eq? 2 (length x)))
     492                               [else (loop 3 req opt (cons (list var) key) r)] ) ]
     493                            [(and (list? var) (eq? 2 (length var)))
    494494                             (case mode
    495495                               [(0) (err "invalid required argument syntax")]
    496                                [(1) (loop 1 req (cons x opt) '() r)]
     496                               [(1) (loop 1 req (cons var opt) '() r)]
    497497                               [(2) (err "invalid lambda list syntax after `#!rest' marker")]
    498                                [else (loop 3 req opt (cons x key) r)] ) ]
     498                               [else (loop 3 req opt (cons var key) r)] ) ]
    499499                            [else (err "invalid lambda list syntax")] ) ] ) ) ] ) ) ) ) ) )
    500500
    501501