mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-01-16 06:12:25 -08:00
Parsing of &optional arguments in DEFMACRO led to erroneous C code.
This commit is contained in:
parent
e786001fd9
commit
3b45bc6ecf
1 changed files with 7 additions and 6 deletions
|
|
@ -111,12 +111,13 @@
|
|||
(init (second opts))
|
||||
(sv (third opts)))
|
||||
(setq opts (cdddr opts))
|
||||
(let ((pointer-value `(if ,pointer ,unsafe-car ,init)))
|
||||
(cond (sv
|
||||
(dm-v x pointer-value)
|
||||
(dm-v sv `(prog1 (not (null ,pointer)) ,unsafe-pop)))
|
||||
(t
|
||||
(dm-v x `(prog1 ,pointer-value ,unsafe-pop)))))))
|
||||
(cond (sv
|
||||
(dm-v x `(if ,pointer ,unsafe-car ,init))
|
||||
(dm-v sv `(and ,pointer (progn ,unsafe-pop t))))
|
||||
(t
|
||||
(dm-v x `(if ,pointer
|
||||
(prog1 ,unsafe-car ,unsafe-pop)
|
||||
,init))))))
|
||||
(when rest
|
||||
(dm-v rest pointer)
|
||||
(setq no-check t))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue