Hi,
in a very recent change
https://github.com/msteveb/jimtcl/commit/1843b79a03dd
jimtcl dropped the multiple arguments for the TCL command 'expr'.
It means that the usual syntax
  set a [expr 1 + 1]
now returns a syntax error, and it has to be re-written as
  set a [expr {1 + 1}]
or
  set a [expr "1 + 1"]

This change will be part of future jimtcl 0.81. Maybe Steve in copy
can provide us with some tentative schedule.
In OpenOCD we can delay merging this future jimtcl version, but some
Linux distribution packages OpenOCD and jimtcl in independent
packages; they will update to jimtcl 0.81 as soon as it gets
available, breaking most of scripts in OpenOCD package. It will become
a support nightmare.
I would like to at least anticipate it, by patching existing scripts
in master branch. When jimtcl 0.81 will be tagged we can decide to tag
OpenOCD 0.11.1 or 0.12.0, or simply provide such a patch to the
package managers.

Today
  grep -rw expr tcl src/*/*.tcl
returns 1729 matches! Too many to fix them manually without errors,
mainly because of scripts that cannot be tested without the specific
target. Also the patch review would be challenging.

It exists the nice tool coccinelle
https://coccinelle.gitlabpages.inria.fr/website/
that is able to find matches and run transformations, widely used to
create patches for the Linux kernel, but today it's C language
specific, no specific support for TCL.
Is there anyone familiar enough with coccinelle to give it a try on TCL?
Any other idea?

Some hint on already identified issues. These two cases cannot be
fixed by simply adding {} around the arguments of 'expr'
tcl/chip/atmel/at91/rtt.tcl:20:    set f [expr $AT91C_SLOWOSC_FREQ.0 /
$rtpres.0]
src/jtag/startup.tcl:86:    echo "Running at more than [expr
$iterations.0 / ([ms]-$start_time)] kHz";
because there is the concatenation of '.0' to get float
representation. I'm not questioning the need for such representation,
just showing that simply adding {} it's not enough and each of the
1729 matches has to be carefully analyzed.
The first case above can be fixed using double quote, as
tcl/chip/atmel/at91/rtt.tcl:20:    set f [expr "$AT91C_SLOWOSC_FREQ.0
/ $rtpres.0"]
but the second is already inside double quote; more effort is required.

Regards,
Antonio


_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to