The old method was to keep a NRefactory expression for each node.
The new method is create a lambda expression for each node.
The main motivation for this change is to get ready for NR5 which does not allow any sharing of AST nodes. This would mean that we would have to create a complete AST for each node, which might get expensive for deeply nested nodes. Caching of already evaluated expression would also be more difficult with separate ASTs. ILSpy is based on NR5 so we need this solution for it right now.
Another disadvantage was that every operation had to go though AST so we had to support it in the evaluator, we had to generate the AST, and we had to hope that nothing breaks on the way. This is particularly complex for types - with lambda expression we simply keep around the reference to the type or to whatever we need. Some things like "current exception object" do not exist in the AST so we had to hack around it.
On the other had, it was nice to have accurate C# expression for all nodes - for pretty printing, editing, or saving/loading it.
The old method was to keep a NRefactory expression for each node.
The new method is create a lambda expression for each node.
The main motivation for this change is to get ready for NR5 which does not allow any sharing of AST nodes. This would mean that we would have to create a complete AST for each node, which might get expensive for deeply nested nodes. Caching of already evaluated expression would also be more difficult with separate ASTs. ILSpy is based on NR5 so we need this solution for it right now.
Another disadvantage was that every operation had to go though AST so we had to support it in the evaluator, we had to generate the AST, and we had to hope that nothing breaks on the way. This is particularly complex for types - with lambda expression we simply keep around the reference to the type or to whatever we need. Some things like "current exception object" do not exist in the AST so we had to hack around it.
On the other had, it was nice to have accurate C# expression for all nodes - for pretty printing, editing, or saving/loading it.
The name 'Content' could result in a hard to understand exception 'Specified element is already the logical child of another element. Disconnect it first.' when implementing IOptionPanel in a WPF UserControl. See forum-9233.
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@4018 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
- applied patch for drag&drop in Watch pad from http://community.sharpdevelop.net/forums/t/9320.aspx
- fixed NullReferenceException in ValueNode if either Watch Pad or LocalVarPad are not opened (added comments)
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3962 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
Cleaned up using Statements.
added some Exception xml doc blocks.
Updated the projects to Visual Studio 3.5
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3648 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
SetAutoRowHeight to true on the TreeVeiwAdv in the LocalVarPad.
You can now maximize the DebuggerEventForm.
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3227 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
DoEvents() called very often.
New class for logging time measurements to the console.
If one OnPause delegate resumes process, remaining delegates are not called.
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2906 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
Fixed incremental search for the local variables pad.
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2870 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
Add context menu to error item which shows the full exception.
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2847 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
The pad is progressively updated using the same method as before - Application.DoEvents() is called periodically so that repaint events are invoked. I still need to put is checks so that press of Stepping command terminates the update.
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2792 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
Previously the nodes wrapped debugger values - any requests were redirected to the underling value.
The nodes are now based on Expressions and act as dum data storage. When node is created the expression is evaluated and the properties (Image, Name, Text, Type) are stored locally in the node. The node is immutable so its content can not be changed - the GUI need to create a fresh node. This implies that the expression is evaluated only once - when the node is created.
A node can have child nodes. The child nodes are created on-demand using enumerators. This is desirable since creation of node involves evaluation of expression. It also prevents infinite recursion.
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2791 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61