aboutsummaryrefslogtreecommitdiff
path: root/jim.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2021-04-03 14:00:22 +1000
committerSteve Bennett <steveb@workware.net.au>2021-04-03 14:06:53 +1000
commit3703a49423578649b67abe0e0457842e4ff911a2 (patch)
treef40294cad6b7f25cce1a68db8193e91e3ff19d4e /jim.c
parentc3df59264eb27d4914c21f0901350a6d9eeb1807 (diff)
downloadjimtcl-3703a49423578649b67abe0e0457842e4ff911a2.zip
jimtcl-3703a49423578649b67abe0e0457842e4ff911a2.tar.gz
jimtcl-3703a49423578649b67abe0e0457842e4ff911a2.tar.bz2
expr: allow existing multiple argument support with --compat
Some users may not be ready to immediately move to the single-argument expr, so provide a --compat option to configure to support the previous behaviour as a transition strategy. Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim.c')
-rw-r--r--jim.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/jim.c b/jim.c
index 64f47bd..cfc0f8f 100644
--- a/jim.c
+++ b/jim.c
@@ -13598,11 +13598,31 @@ static int Jim_UplevelCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *
/* [expr] */
static int Jim_ExprCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
{
+ int retcode;
+
if (argc == 2) {
- return Jim_EvalExpression(interp, argv[1]);
+ retcode = Jim_EvalExpression(interp, argv[1]);
}
- Jim_WrongNumArgs(interp, 1, argv, "expression");
- return JIM_ERR;
+#ifndef JIM_COMPAT
+ else {
+ Jim_WrongNumArgs(interp, 1, argv, "expression");
+ retcode = JIM_ERR;
+ }
+#else
+ else if (argc > 2) {
+ Jim_Obj *objPtr;
+
+ objPtr = Jim_ConcatObj(interp, argc - 1, argv + 1);
+ Jim_IncrRefCount(objPtr);
+ retcode = Jim_EvalExpression(interp, objPtr);
+ Jim_DecrRefCount(interp, objPtr);
+ }
+ else {
+ Jim_WrongNumArgs(interp, 1, argv, "expression ?...?");
+ return JIM_ERR;
+ }
+#endif
+ return retcode;
}
/* [break] */