Tom Hvitved
910995af90
C#: Autoformat QL code
2019-02-04 10:32:30 +01:00
Calum Grant
722402fc89
Merge pull request #825 from hvitved/csharp/cfg/splitting-performance
...
C#: Improve performance of CFG split set computation
2019-01-30 10:05:25 +00:00
Tom Hvitved
86721ff800
C#: Add more documentation to SuccSplits module
2019-01-28 14:12:17 +01:00
Tom Hvitved
50522caa6e
C#: Improve performance of CFG split set computation
...
Rewrite the predicate `succSplits()` and the construction of the IPA type `TSplits`.
The two are now mutually dependent, see more in the comment for the module
`SuccSplits`.
2019-01-25 14:35:56 +01:00
Tom Hvitved
f323049b9d
C#: CFG for expressions without enclosing callables, e.g. field initializers
2019-01-16 10:29:26 +01:00
Tom Hvitved
901f389a7d
C#: Add CFG tests for field/property initializers
2019-01-16 10:29:26 +01:00
Tom Hvitved
390ebc96ae
C#: Autoformat QL files
2019-01-11 13:55:28 +01:00
Tom Hvitved
6fccfa3b0a
C#: Fix CFG for foreach statements with tuple declarations
2019-01-04 18:51:55 +01:00
Tom Hvitved
72b3514970
C#: Add CFG tests for foreach statements with multipe variable declarations
2019-01-04 18:17:48 +01:00
Tom Hvitved
231465143d
C#: Autoformat QL tests
2018-12-20 10:19:59 +01:00
Tom Hvitved
c887dc89dc
C#: Fix a bug in ThrowingCallable
...
A method such as
```
void M()
{
throw new Exception();
}
```
was incorrectly not categorized as a `ThrowingCallable`, that is, a callable
that always throws an exception upon invocation.
2018-12-07 10:56:11 +01:00
Tom Hvitved
243af36167
C#: Add more CFG tests with throwing methods
2018-12-07 10:43:45 +01:00
Tom Hvitved
05b9519e9a
C#: Handle multiple-field Boolean CFG splitting
...
The internal pre-SSA library was extended on 3e78c2671f
to include fields/properties that are local-scope-like. The CFG splitting logic
uses ranking of SSA definitions to define an (arbitrary) order of splits, but for
fields/properties the implicit entry definition all have the same line and column.
In effect, such SSA definitions incorrectly get the same rank. Adding the name
of the field/property to the lexicographic ordering resolves the issue.
2018-11-30 10:57:34 +01:00
Tom Hvitved
610be85c8c
C#: Add CFG test for multiple-field Boolean splitting
2018-11-30 10:32:08 +01:00
Tom Hvitved
8233e34ba2
C#: Fix Boolean splitting for variables defined in a loop
2018-11-20 21:22:00 +01:00
Tom Hvitved
89d5daa137
C#: Fix Boolean splitting negation bug
2018-11-20 21:22:00 +01:00
Tom Hvitved
841218540e
C#: Add CFG test
...
This test exhibits two issues with Boolean CFG splitting: incorrect handling of
negated variables and incorrect splitting for variables defined inside a loop.
2018-11-20 21:22:00 +01:00
Tom Hvitved
a3d74b00e0
C#: Address review comments
2018-10-25 14:15:09 +02:00
Tom Hvitved
515d6b6d26
C#: Detect constantly failing assertions in the CFG
2018-10-19 14:07:40 +02:00
Tom Hvitved
acea4ddfc4
C#: Introduce control flow exit completions
2018-10-19 14:07:35 +02:00
Tom Hvitved
0c1db6afc3
C#: Add more CFG tests
...
Added tests for exits inside `try` statements and constantly failing assertions.
2018-10-19 14:05:30 +02:00
Tom Hvitved
603c3d6a43
C#: Teach null-guards library about pattern matching
2018-10-15 10:55:16 +02:00
Tom Hvitved
e8cd99335a
C#: Simple Boolean control flow graph splitting
2018-09-28 14:59:39 +02:00
Tom Hvitved
d0f63ca303
C#: Introduce SplitKind class
2018-09-28 14:59:39 +02:00
Tom Hvitved
b8caa117f1
C#: Add internal PreBasicBlocks library
2018-09-28 14:59:38 +02:00
calum
cff00506ba
C#: Implementation of case ... when ...: which was not previously handled. Move getCondition to CaseStmt. Implement the CFG and tests.
2018-09-05 17:47:31 +01:00
Tom Hvitved
42faabc552
C#: Rename and restructure control flow graph entities
...
Follow a naming structure similar to the data flow library:
- `ControlFlowNode` -> `ControlFlow::Node`.
- `CallableEntryNode` -> `ControlFlow::Nodes::EntryNode`.
- `CallableExitNode` -> `ControlFlow::Nodes::ExitNode`.
- `ControlFlowEdgeType` -> `ControlFlow::SuccessorType`.
- `ControlFlowEdgeSuccessor` -> `ControlFlow::SuccessorTypes::NormalSuccessor`.
- `ControlFlowEdgeConditional -> ControlFlow::SuccessorTypes::ConditionalSuccessor`.
- `ControlFlowEdgeBoolean` -> `ControlFlow::SuccessorTypes::BooleanSuccessor`.
- `ControlFlowEdgeNullness` -> `ControlFlow::SuccessorTypes::NullnessSuccessor`.
- `ControlFlowEdgeMatching` -> `ControlFlow::SuccessorTypes::MatchingSuccessor`.
- `ControlFlowEdgeEmptiness` -> `ControlFlow::SuccessorTypes::EmptinessSuccessor`.
- `ControlFlowEdgeReturn` -> `ControlFlow::SuccessorTypes::ReturnSuccessor`.
- `ControlFlowEdgeBreak` -> `ControlFlow::SuccessorTypes::BreakSuccessor`.
- `ControlFlowEdgeContinue` -> `ControlFlow::SuccessorTypes::ContinueSuccessor`.
- `ControlFlowEdgeGotoLabel` -> `ControlFlow::SuccessorTypes::GotoLabelSuccessor`.
- `ControlFlowEdgeGotoCase` -> `ControlFlow::SuccessorTypes::GotoCaseSuccessor`.
- `ControlFlowEdgeGotoDefault` -> `ControlFlow::SuccessorTypes::GotoDefaultSuccessor`.
- `ControlFlowEdgeException` -> `ControlFlow::SuccessorTypes::ExceptionSuccessor`
2018-09-05 14:20:26 +02:00
Tom Hvitved
b1451b079e
C#: Add CFG test that mixes finally splitting and catch splitting
2018-08-20 13:10:09 +02:00
Tom Hvitved
91ed111735
C#: Improve CFG for exception handlers
...
Use generic CFG splitting to add a new type of split for exception handlers,
`ExceptionHandlerSplit`, which tags eachs node belonging to a `catch` clause
with the type of exception being caught. This allows for a more accurate CFG
for `try-catch` statements, where exception filters are handled properly.
2018-08-20 13:08:28 +02:00
Tom Hvitved
a705b3afa5
C#: Generic control flow graph splitting
...
Refactor existing logic for splitting control flow nodes belonging to a `finally`
block. A `Split` defines (1) when to enter the split, (2) when to stay in the split,
and (3) when to leave the split. With only these definitions, control flow splitting
is achieved by tagging each control flow element with the set of splits that apply
to it.
2018-08-20 13:04:29 +02:00
Tom Hvitved
1365761f72
C#: Change toString() for FinallySplitControlFlowNode
2018-08-20 09:41:54 +02:00
Tom Hvitved
0edd0057fc
C#: Do not use @kind graph in ql tests
2018-08-17 17:55:13 +02:00
Tom Hvitved
f7a515c8e9
C#: Prune CFG for obviously impossible nullness/matching edges
2018-08-06 13:45:23 -07:00
Tom Hvitved
9a1e148e85
C#: Various minor CFG bug fixes
2018-08-06 13:45:23 -07:00
Tom Hvitved
b161ff195b
C#: Additional CFG tests
2018-08-06 13:45:23 -07:00
Pavel Avgustinov
b55526aa58
QL code and tests for C#/C++/JavaScript.
2018-08-02 17:53:23 +01:00