Correctly compare memory fragments when moving in
seec::trace::moveForwardUntilMemoryChanges() or moveBackwardUntilMemoryChanges(),
rather than relying on modifications changing the fragment iterators. This was
done by changing MemoryState::Region::getContributingFragments() to return
copies of the contributing fragments, rather than iterators (hence no change
to the code of the aforementioned movement functions).
Add a context menu for function nodes in the state graph viewer, with two
options: move backward to the function's entry (not yet implemented), and move
forward until the function is finished (implemented).
Avoid using rankdir=LR and rank=same, because older versions of Graphviz (i.e.
the current version for Debian) have problems when there are edges between
nodes with the same rank in this case. For us, this causes bad things to
happen when there is a pointer in one function that points to a stack allocated
variable in another function. Instead, try to make the graph take a similarly
structured form by maintaining the invisible edges between function nodes, and
making all edges between function nodes have "constraint=false", so that they
don't influence the ranking.
Implement moving to the function entry, and correct the implementation of
moving until a function is finished so that it works for non-active functions.
This handles part of #3.
Merge development upstream into issue #3 branch.
Don't set "-g" for the entire compilation, and deny any user-requested g-group
arguments. When operating as "-cc1", set the CompilerInvocation to generate
full debug info. This prevents the Driver from running dsymutil, which would
complain if the intermediate object created by seec-ld did not exist. Using
traditional debugging on an instrumented executable would be confusing due to
the additional code added by SeeC, so there is no need to support the user
requesting debugging information.
Only pass SeeC's additional linking options to seec-ld, rather than giving them
to the Driver when building the Compilation. This allows the Driver to correctly
detect when the user has not given any input files.
Fix implementation of range() for array references.
Workaround a bug in recent Graphviz versions on OS X by setting penwidth as a
global property rather than on nodes and edges separately.
Use Graphviz by calling the dot executable rather than as a library. This avoids
problems caused by the Graphviz libraries crashing. If dot is not found by the
state graph viewer then a message will be displayed to the user indicating that
Graphviz is required for it to function, and linking to the Graphviz download
page.
Fix build for GCC 4.7 on Ubuntu.
Merge updated development into issue #3 branch.
Stop printing the flags for debug builds.
Load the Trace resource bundle.
Restore the use of "rank=same", but specify it for the entire subgraph. Remove
the "constraint=false" attribute from the function ordering edges. This fixes
a rendering issue with graphviz 2.26.3, but needs testing with the more recent
graphviz on OS X.
Move getCurrentRuntimeValue definition out of line.
Remove outdated TODO comment.
When seec::trace::FunctionState::getCurrentRuntimeValue() returns a nullptr,
make getValue() return a null Value. This fixes an issue where
seec::cm::FunctionState::getStmtValue() would sometimes return a Value for an
Instruction that had not been evaluated (or was outdated).
Add seec::toUnicodeString(), which converts a wxString to an ICU UnicodeString.
Start working on issue #42 by storing annotations on the SourceFilePanel, so
that we will be able to re-render them when a resize event occurs. We still
need to implement the column alignment, a method that causes all annotated
lines to be re-rendered, and then wire up the resize event handler.