David Srbecký
9aff0b724d
Simplify the transform code by using extension methods.
15 years ago
David Srbecký
479918e7bc
Remove MyBlockStatement.
15 years ago
David Srbecký
ea50b09c0d
NRefactory: Add NodeCollection.AddRange method
15 years ago
David Srbecký
07a2cb2a84
NRefactory: Set parent of child when it is added to collection
15 years ago
David Srbecký
932cf1a232
NRefactory: INode.Children type changed from List<T> to more general IList<T>
15 years ago
David Srbecký
e42166ca85
Add NRefactory source code
15 years ago
David Srbecký
34c8127a9b
Restore loop initializer
15 years ago
David Srbecký
5b48611b69
Replace variable name for integers with "i", "j", "k", etc...
15 years ago
David Srbecký
08528a768a
Reduce 'if' statements in loops.
15 years ago
David Srbecký
5b8b80cc72
Restore loop iterator - move assignment from the end of loop.
15 years ago
David Srbecký
af00ad101a
Restore for loop condition. It is a simple pattern match.
15 years ago
David Srbecký
075c5bebdb
Remove empty 'else body' of 'if' statement.
15 years ago
David Srbecký
d086b446e8
Remove flowing redundant jumps at the end of Ast blocks:
...
- Continue at the very end of loop
- Empty Return at the very end of method
- Goto at the very end of 'if' body, if the goto jumps right after the whole 'if' statement
15 years ago
David Srbecký
6ebd05c0fe
Simplify type names. For example replace "System.Console.WriteLine" with "Console.WriteLine" because we have a "using System;" statement. Replace "Int32" with "int", etc...
15 years ago
David Srbecký
8643290a4c
Remove redundant 'goto' statements in form:
...
goto labelX;
labelX: command();
15 years ago
David Srbecký
ecad71d802
Added custom Ast classes for Goto and Label statements that track the reference count of a label.
...
Added an Ast transform to remove dead labels. (first Ast transform in program, I expect many more to come. Some stuff should be rewritten to use these explicit transforms)
15 years ago
David Srbecký
45bedc8d1d
Try to reconstruct if statements. The following logic is used: Depending on the value of the condition, the control flow will branch to one of two locations - let's call then 'true entry' and 'false entry'. Nodes reachable *only* from the 'true entry' are assumed to be the 'true' body of the if statement. Similarly, nodes reachable only from the 'false entry' are the 'false' body. Nodes reachable from both 'true entry' and 'false entry' and not part of the if statement and are placed after it.
15 years ago
David Srbecký
356c0b0d2f
Completely rewritten the Node tree structure. It became increasingly difficult to maintain the node links (Predecessors, Successors) consistent during transformations. So rather then keeping them consistent I have implemented an algorithm that can calculate the Predecessors or Successors for any given node. There are a few caches on the way so that the calculation does not calculate everything again every time. Affected caches are automatically flushed when a tree structure changes. This is implemented using 'collection with events'.
15 years ago
David Srbecký
7bf471eec3
Some set operations that will be need for 'if' simplification
15 years ago
David Srbecký
dda481d0fe
Maintain node links at all levels, not just at the top one.
15 years ago
David Srbecký
ff56995219
Reduce some 'goto's in loops to 'break' and 'continue'.
...
Do not output 'goto' for simple fall-through to next node.
15 years ago
David Srbecký
7df6c364c6
Non-conditional branch does not have 'fall-through' node as successor.
...
Add explicit 'goto' statement after each basic black.
More GUI debugging options.
15 years ago
David Srbecký
b310187433
GUI debugging controls
15 years ago
David Srbecký
693bb16488
Generate the initial graph.
...
Output the graph as nested blocks.
15 years ago
David Srbecký
0bff44d922
Create class for each node type
15 years ago
David Srbecký
faff1bf5a9
Working on graph reduction algorithm. (Graph creation and presentation is still missing)
15 years ago
David Srbecký
aba6b0950c
Split method body to basic blocks
15 years ago
David Srbecký
a43af72f9e
Bugfix - keep return if it is labelled.
15 years ago
David Srbecký
22494bde37
Define local variables when value is first assigned to them
15 years ago
David Srbecký
82d3debe87
Do not output the very last return statement
15 years ago
David Srbecký
9eb2441490
Test on the compiler optimized version of quicksort
15 years ago
David Srbecký
29b95cd28c
Remove some parenthesis
15 years ago
David Srbecký
acdac3ecf5
Join consecutive expression together if possible
15 years ago
David Srbecký
37d40932d9
Convert ByteCodeCollection to new data representation: StackExpressionCollection;
...
Modify the generating code to use this data representation
15 years ago
David Srbecký
ed413b7ec3
Move stack analysis to the ByteCode class
15 years ago
David Srbecký
b7486c3221
Move StackBehaviour code to separate file
15 years ago
David Srbecký
53eed43bf5
Moved typing code to ByteCode.GetType()
15 years ago
David Srbecký
475eab39cf
Move code from Util class to
...
- ByteCode.PopCount
- ByteCode.PushCount
15 years ago
David Srbecký
0fe95f6b0b
Use custom data structure to store bytecode sequence
15 years ago
David Srbecký
9d82c6c55b
Remove unnecessary labels
15 years ago
David Srbecký
970706161a
Get type of elements obtained from array
15 years ago
David Srbecký
a9ab824805
Get type for stack slots (partially implemented); Types are stored as Cecil TypeReferences
15 years ago
David Srbecký
ffef73b007
Hack - convert int to bool on == operator
15 years ago
David Srbecký
cfa3ecd70d
Get type of new array
15 years ago
David Srbecký
56ced90f95
Added "using System;";
...
Do not create namespace with empty name
15 years ago
David Srbecký
2642e6de19
Output local variables
15 years ago
David Srbecký
4468b4a3e1
Use stack analysis to figure out basic data flow - use actual inputs instead of the dummy ones
15 years ago
David Srbecký
238605c831
Initial stack analysis implementation:
...
Verify that the stack sizes are consistent - ie at a given location the stack size is statically known and constant.
Keep track of instruction which pushed a given value on the stack. (Not handling the potential problem at control merge points - this problem does not occur in the quick sort algorithm)
The state of the stack is outputted as a comment in the source code
15 years ago
David Srbecký
306b17db33
Started a type checking algorithm
15 years ago
David Srbecký
466e199cca
Assign the result of each instruction to a temporary local variable
15 years ago