﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	difficulty
575	Extended lambda list syntax with default values isn't checked properly	sjamaan	felix winkelmann	"When using a default value with an optional argument, you get a strange error message that there's an error in your LET syntax, and when you do the same with a keyword argument, Chicken segfaults.

The reason is there's a missing check in {{{##sys#expand-extended-lambda-list}}}'s final {{{cond}}} clause; it implicitly assumes that a 2-element list after {{{#!key}}} or {{{#!optional}}} always has a symbol as its car. The attached patch contains a simple fix and regression test.

{{{
CHICKEN
(c)2008-2010 The Chicken Team
(c)2000-2007 Felix L. Winkelmann
Version 4.6.0 
netbsd-unix-gnu-x86-64 [ 64bit manyargs dload ptables ]
compiled 2011-01-21 on langly (NetBSD)

#;1> (define (foo #!optional 0) 1)

Error: invalid lambda list syntax: (#!optional 0)

        Call history:

        <syntax>          (define (foo #!optional 0) 1)
        <syntax>          (##core#set! foo (##core#lambda (#!optional 0) 1))
        <syntax>          (##core#lambda (#!optional 0) 1)      <--
#;1> (define (foo #!optional (0 0)) 1)

Error: during expansion of (let12 ...) - in `let' - symbol expected: (let ((0 (optional tmp 0))) 1)

        Call history:

        <syntax>          (define (foo #!optional (0 0)) 1)
        <syntax>          (##core#set! foo (##core#lambda (#!optional (0 0)) 1))
        <syntax>          (##core#lambda (#!optional (0 0)) 1)  <--
#;1> (define (foo #!key 0) 1)

Error: invalid lambda list syntax: (#!key 0)

        Call history:

        <syntax>          (define (foo #!key 0) 1)
        <syntax>          (##core#set! foo (##core#lambda (#!key 0) 1))
        <syntax>          (##core#lambda (#!key 0) 1)   <--
#;1> (define (foo #!key (0 0)) 1)
zsh: segmentation fault  csi
}}}"	defect	closed	minor	4.9.0	expander	4.6.x	fixed	DSSSL lambda list, keywords, optionals		
