Opened 13 years ago

Closed 13 years ago

Last modified 12 years ago

#575 closed defect (fixed)

Extended lambda list syntax with default values isn't checked properly

Reported by: sjamaan Owned by: felix winkelmann
Priority: minor Milestone: 4.9.0
Component: expander Version: 4.6.x
Keywords: DSSSL lambda list, keywords, optionals Cc:
Estimated difficulty:

Description

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

Attachments (1)

dsssl-check.patch (1.1 KB) - added by sjamaan 13 years ago.
Add check for symbol-ness

Download all attachments as: .zip

Change History (3)

Changed 13 years ago by sjamaan

Attachment: dsssl-check.patch added

Add check for symbol-ness

comment:1 Changed 13 years ago by felix winkelmann

Resolution: fixed
Status: newclosed

Patch applied. Thanks.

comment:2 Changed 12 years ago by felix winkelmann

Milestone: 4.8.04.9.0

Milestone 4.8.0 deleted

Note: See TracTickets for help on using tickets.