.NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

239 lines
4.6 KiB

// Copyright (c) AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty
{
public class CompoundAssignmentTest
{
[Flags]
private enum MyEnum
{
None = 0,
One = 1,
Two = 2,
Four = 4
}
private struct StructContainer
{
public bool HasIndex;
public int Field;
}
public class MutableClass
{
public int Field;
public int Property {
get;
set;
}
public uint this[string name] {
get {
return 0u;
}
set {
}
}
}
private int test1;
private int[] array1;
private StructContainer field1;
private MyEnum enumField;
public static int StaticField;
public static int StaticProperty {
get;
set;
}
private MutableClass M()
{
return new MutableClass();
}
private int[,] Array()
{
return (int[,])null;
}
private unsafe int* GetPointer()
{
// return null;
return (int*)0u;
}
public int GetIndex()
{
return new Random().Next(0, 100);
}
public int[] GetArray()
{
throw new NotImplementedException();
}
public int GetValue(int value)
{
return value;
}
public void Int32_Local_Add(int i)
{
i++;
Console.WriteLine(i++);
Console.WriteLine(++i);
i += 5;
Console.WriteLine(i += 5);
}
public void Int32_Local_Sub(int i)
{
i--;
Console.WriteLine(i--);
Console.WriteLine(--i);
i -= 5;
Console.WriteLine(i -= 5);
}
public void Int32_Local_Mul(int i)
{
i *= 5;
Console.WriteLine(i *= 5);
}
public void Int32_Local_Div(int i)
{
i /= 5;
Console.WriteLine(i /= 5);
}
public void Int32_Local_Rem(int i)
{
i %= 5;
Console.WriteLine(i %= 5);
}
public void Int32_Local_BitAnd(int i)
{
i &= 5;
Console.WriteLine(i &= 5);
}
public void Int32_Local_BitOr(int i)
{
i |= 5;
Console.WriteLine(i |= 5);
}
public void Int32_Local_BitXor(int i)
{
i ^= 5;
Console.WriteLine(i ^= 5);
}
public void Int32_Local_ShiftLeft(int i)
{
i <<= 5;
Console.WriteLine(i <<= 5);
}
public void Int32_Local_ShiftRight(int i)
{
i >>= 5;
Console.WriteLine(i >>= 5);
}
public void IntegerWithInline(int i)
{
Console.WriteLine(i += 5);
Console.WriteLine(i);
}
public void IntegerField(int i)
{
Console.WriteLine(this.test1 += i);
Console.WriteLine(this.test1);
Console.WriteLine(this.test1 -= i);
Console.WriteLine(this.test1);
}
public void Array(int i)
{
Console.WriteLine(this.array1[i] += i);
Console.WriteLine(this.array1[i * 2] += i * 2);
}
public int ArrayUsageWithMethods()
{
return this.GetArray()[this.GetIndex()]++;
}
public void NestedField()
{
if (this.field1.HasIndex) {
Console.WriteLine(this.field1.Field++);
}
}
public void Enum()
{
this.enumField |= MyEnum.Two;
this.enumField &= ~MyEnum.Four;
}
public int PreIncrementInAddition(int i, int j)
{
return i + ++j;
}
public int PreIncrementArrayElement(int[] array, int pos)
{
return --array[pos];
}
public int PreIncrementInstanceField()
{
return ++this.M().Field;
}
public int PreIncrementInstanceField2(MutableClass m)
{
return ++m.Field;
}
public int PreIncrementInstanceProperty()
{
return ++this.M().Property;
}
public int PreIncrementStaticField()
{
return ++CompoundAssignmentTest.StaticField;
}
public int PreIncrementStaticProperty()
{
return ++CompoundAssignmentTest.StaticProperty;
}
}
}