The Array and Matrix visualizers evaluated the variable's address only
when the name was typed; every refresh then re-read memory at that
stored address forever. A stale address (a vector entered before its
construction, a reallocation, a re-run) kept being read — errors at
best, plausible-looking dead data at worst.
Split the refresh in two: the refresh handlers now re-evaluate the
variable name, and the answer reads the memory at the fresh address
(readaMemory/readbMemory/readMemory). Every refresh path — the manual
button, the auto-refresh at each stop, and the length/offset/stride
changes — now goes through the re-evaluation. The read is skipped for a
null address or an empty length, so a not-yet-constructed variable shows
its 0x0 address quietly instead of raising memory errors.
Free-form Fortran (90 and later): case-insensitive keywords, dotted and
symbolic operators, both string delimiters, '!' comments ('//' is string
concatenation, not a comment), common intrinsics as functions. Plus the
usual plumbing: suffix settings, editor config page tab, save/restore,
highlighter factory dispatch.
Also let tests/hellofortran90 build with the default 'gfortran' instead
of a hardcoded 'gfortran-12'.
gdb reports the exit as a *stopped event (reason="exited-*"), so with
the Auto checkbox checked the visualizers fired one last refresh on a
process that no longer exists, logging "unable to read memory" errors.
In scatter mode a two-array (X/Y) plot rebuilt the table and chart once
per property setter (data, offset, stride) and restyled every marker four
times, so a ~4000-point phase portrait froze for ~0.8s per refresh.
- SeerArrayWidget: add a BulkUpdate RAII guard that defers create() until
a burst of setters completes, so a refresh does one rebuild, not several.
- redecorateScatterSeries: drop the two redundant transparent passes; after
addSeries() the series holds the theme pen/brush, so setPen(NoPen)/
setBrush() are already real transitions and either re-pushes both to the
markers.
~800ms -> ~200ms per refresh at 4000 points; line/spline and marker
appearance unchanged.
Add tests/helloscatter, a 4000-point two-array phase portrait with a
breakpoint loop, to reproduce the slow refresh.