Browse Source

Merge branch 'master' of git://github.com/icsharpcode/ILSpy

pull/285/head
Eusebiu Marcu 14 years ago
parent
commit
9465d1722c
  1. 2
      ICSharpCode.Decompiler/Ast/Transforms/AddCheckedBlocks.cs
  2. 12
      ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs
  3. 51
      ICSharpCode.Decompiler/Tests/CheckedUnchecked.cs
  4. 5
      ICSharpCode.Decompiler/Tests/Generics.cs

2
ICSharpCode.Decompiler/Ast/Transforms/AddCheckedBlocks.cs

@ -339,7 +339,7 @@ namespace ICSharpCode.Decompiler.Ast.Transforms @@ -339,7 +339,7 @@ namespace ICSharpCode.Decompiler.Ast.Transforms
result.NodesToInsertInCheckedContext = result.NodesToInsertInUncheckedContext + new ConvertCompoundAssignment(expr, false);
}
}
} else {
} else if (expr.Role.IsValid(Expression.Null)) {
// We use '<' so that expressions are introduced on the deepest level possible (goal 3)
if (result.CostInCheckedContext + new Cost(0, 1) < result.CostInUncheckedContext) {
result.CostInUncheckedContext = result.CostInCheckedContext + new Cost(0, 1);

12
ICSharpCode.Decompiler/ILAst/TypeAnalysis.cs

@ -916,14 +916,12 @@ namespace ICSharpCode.Decompiler.ILAst @@ -916,14 +916,12 @@ namespace ICSharpCode.Decompiler.ILAst
}
GenericParameter gp = type as GenericParameter;
if (gp != null) {
if (gp.Owner.GenericParameterType == GenericParameterType.Method) {
if (member.DeclaringType is ArrayType) {
return ((ArrayType)member.DeclaringType).ElementType;
} else if (gp.Owner.GenericParameterType == GenericParameterType.Method) {
return ((GenericInstanceMethod)member).GenericArguments[gp.Position];
} else {
if (member.DeclaringType is ArrayType) {
return ((ArrayType)member.DeclaringType).ElementType;
} else {
return ((GenericInstanceType)member.DeclaringType).GenericArguments[gp.Position];
}
} else {
return ((GenericInstanceType)member.DeclaringType).GenericArguments[gp.Position];
}
}
return type;

51
ICSharpCode.Decompiler/Tests/CheckedUnchecked.cs

@ -16,6 +16,8 @@ @@ -16,6 +16,8 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
public class CheckedUnchecked
{
public int Operators(int a, int b)
@ -63,4 +65,53 @@ public class CheckedUnchecked @@ -63,4 +65,53 @@ public class CheckedUnchecked
}
}
}
public void ObjectCreationInitializerChecked()
{
this.TestHelp(new
{
x = 0,
l = 0
}, n => checked(new
{
x = n.x + 1,
l = n.l + 1
}));
}
public void ObjectCreationWithOneFieldChecked()
{
this.TestHelp(new
{
x = 0,
l = 0
}, n => new
{
x = checked(n.x + 1),
l = n.l + 1
});
}
public void ArrayInitializerChecked()
{
this.TestHelp<int[]>(new int[]
{
1,
2
}, (int[] n) => checked(new int[]
{
n[0] + 1,
n[1] + 1
}));
}
public T TestHelp<T>(T t, Func<T, T> f)
{
return f(t);
}
public void CheckedInArrayCreationArgument(int a, int b)
{
Console.WriteLine(new int[checked(a + b)]);
}
}

5
ICSharpCode.Decompiler/Tests/Generics.cs

@ -97,6 +97,11 @@ public static class Generics @@ -97,6 +97,11 @@ public static class Generics
{
}
private static void MultidimensionalArray<T>(T[,] array)
{
array[0, 0] = array[0, 1];
}
public static Dictionary<string, string>.KeyCollection.Enumerator GetEnumerator(Dictionary<string, string> d, Generics.MyArray<string>.NestedClass<int> nc)
{
// Tests references to inner classes in generic classes

Loading…
Cancel
Save