From dfeadd4e8a8b1f1acdde2937ad4a210a9350b59e Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Mon, 24 Aug 2015 07:59:46 -0700 Subject: Compatibility <= 107 allows redefinition of builtins. * eval.c (builtin_reject_test): Suppress the diagnostic against redefinition of built-in macros and operators if the compatibility is 107 or lower. The rejection appeared in 108. * txr.1: Document this compatibility behavior. --- eval.c | 2 ++ txr.1 | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/eval.c b/eval.c index 3800c6ca..c792e99e 100644 --- a/eval.c +++ b/eval.c @@ -1469,6 +1469,8 @@ static void builtin_reject_test(val op, val sym, val form) if (!bindable(sym)) { eval_error(form, lit("~s: cannot bind ~s, which is not a bindable symbol"), is_operator, sym, nao); + } else if (opt_compat && opt_compat <= 107) { + /* empty */ } else if (builtin_kind) { eval_error(form, lit("~s: cannot bind ~s, which is a built-in ~s"), op, sym, builtin_kind, nao); diff --git a/txr.1 b/txr.1 index 374e1f31..6cb58443 100644 --- a/txr.1 +++ b/txr.1 @@ -32342,7 +32342,12 @@ Up through \*(TX 107, by accident, there was a function called as well as an operator by the same name. The function was renamed to .codn flipargs . Version 107 compatibility or earlier provides the -function under the original name also. +function under the original name also. Also, up until this version, +\*(TX allowed functions and macros to be defined with the same names +as built-in operators, and macros. Newer versions reject this as an error. +Requesting compatibility to 107 or earlier suppresses the rejection, +though without introducing any requirement that redefinition will work as +expected. .IP 105 Provides the behavior that the -- cgit v1.2.3