Do not allow duplicate elements in parameter/variable lists
commitf73f825a67f224fd7d59452ab39c9afa9373e44c
authorKris Katterjohn <katterjohn@gmail.com>
Fri, 9 Jun 2017 21:51:19 +0000 (9 16:51 -0500)
committerKris Katterjohn <katterjohn@gmail.com>
Fri, 9 Jun 2017 21:51:19 +0000 (9 16:51 -0500)
tree56ee53b3aa9e6e91abda4d87cc204a5821781037
parent072871006cf23ce8b5d8b2d8ccd038a1cdd32769
Do not allow duplicate elements in parameter/variable lists

Now signal an error when the parameter list in function definitions,
lambda expressions or macro definitions contains duplicate elements.
Likewise for the variable list in blocks.

As discussed on the mailing list, allowing this sort of duplication
does not make sense and it cannot be translated into valid Lisp anyway
(multiple implementations raise errors).

For function and macro definitions, signal the error at the time of
definition.  For lambda expressions, signal the error at the time the
expression is simplified.  For blocks, signal the error at the time
the block is evaluated.

Also, during translation, check for duplication in lambda expression
and block parameter/variable lists.

The test suite runs fine, with new tests.
src/mlisp.lisp
src/mmacro.lisp
src/mutils.lisp
src/simp.lisp
src/trans3.lisp
src/transl.lisp
tests/rtest2.mac
tests/rtest_translator.mac