This commit is contained in:
Smaug123
2025-06-27 12:09:15 +01:00
parent c049313dd9
commit 277f303431
4 changed files with 47 additions and 7 deletions

View File

@@ -70,7 +70,7 @@ module TestPureCases =
} }
{ {
FileName = "CastClassSimpleInheritance.cs" FileName = "CastClassSimpleInheritance.cs"
ExpectedReturnCode = 1 ExpectedReturnCode = 5
NativeImpls = MockEnv.make () NativeImpls = MockEnv.make ()
LocalVariablesOfMain = None LocalVariablesOfMain = None
} }
@@ -82,7 +82,7 @@ module TestPureCases =
} }
{ {
FileName = "CastClassNull.cs" FileName = "CastClassNull.cs"
ExpectedReturnCode = 1 ExpectedReturnCode = 42
NativeImpls = MockEnv.make () NativeImpls = MockEnv.make ()
LocalVariablesOfMain = None LocalVariablesOfMain = None
} }
@@ -106,7 +106,7 @@ module TestPureCases =
} }
{ {
FileName = "CastClassMultipleInterfaces.cs" FileName = "CastClassMultipleInterfaces.cs"
ExpectedReturnCode = 1 ExpectedReturnCode = 42
NativeImpls = MockEnv.make () NativeImpls = MockEnv.make ()
LocalVariablesOfMain = None LocalVariablesOfMain = None
} }
@@ -160,7 +160,7 @@ module TestPureCases =
} }
{ {
FileName = "IsinstNull.cs" FileName = "IsinstNull.cs"
ExpectedReturnCode = 1 ExpectedReturnCode = 42
NativeImpls = MockEnv.make () NativeImpls = MockEnv.make ()
LocalVariablesOfMain = None LocalVariablesOfMain = None
} }
@@ -176,6 +176,12 @@ module TestPureCases =
NativeImpls = MockEnv.make () NativeImpls = MockEnv.make ()
LocalVariablesOfMain = None LocalVariablesOfMain = None
} }
{
FileName = "IsinstFailedInterface.cs"
ExpectedReturnCode = 1
NativeImpls = MockEnv.make ()
LocalVariablesOfMain = None
}
{ {
FileName = "CastClassInterface.cs" FileName = "CastClassInterface.cs"
ExpectedReturnCode = 1 ExpectedReturnCode = 1
@@ -184,7 +190,7 @@ module TestPureCases =
} }
{ {
FileName = "IsinstInterface.cs" FileName = "IsinstInterface.cs"
ExpectedReturnCode = 1 ExpectedReturnCode = 42
NativeImpls = MockEnv.make () NativeImpls = MockEnv.make ()
LocalVariablesOfMain = None LocalVariablesOfMain = None
} }

View File

@@ -47,6 +47,7 @@
<EmbeddedResource Include="sourcesPure\IsinstNull.cs" /> <EmbeddedResource Include="sourcesPure\IsinstNull.cs" />
<EmbeddedResource Include="sourcesPure\CastClassInvalid.cs" /> <EmbeddedResource Include="sourcesPure\CastClassInvalid.cs" />
<EmbeddedResource Include="sourcesPure\IsinstFailed.cs" /> <EmbeddedResource Include="sourcesPure\IsinstFailed.cs" />
<EmbeddedResource Include="sourcesPure\IsinstFailedInterface.cs" />
<EmbeddedResource Include="sourcesPure\CastClassInterface.cs" /> <EmbeddedResource Include="sourcesPure\CastClassInterface.cs" />
<EmbeddedResource Include="sourcesPure\IsinstInterface.cs" /> <EmbeddedResource Include="sourcesPure\IsinstInterface.cs" />
<EmbeddedResource Include="sourcesPure\CustomDelegate.cs" /> <EmbeddedResource Include="sourcesPure\CustomDelegate.cs" />

View File

@@ -14,8 +14,11 @@ public class Program
{ {
Bird sparrow = new Bird { CanFly = true }; Bird sparrow = new Bird { CanFly = true };
// This should fail and return null (not throw) // Cast to object first to bypass compile-time checking
Fish fish = sparrow as Fish; object obj = sparrow;
// This should fail at runtime and return null (not throw)
Fish fish = obj as Fish;
return fish == null ? 42 : 0; return fish == null ? 42 : 0;
} }

View File

@@ -0,0 +1,30 @@
public class Program
{
public interface IAnimal
{
string Name { get; set; }
}
public class Bird : IAnimal
{
public string Name { get; set; }
public bool CanFly { get; set; }
}
public class Fish : IAnimal
{
public string Name { get; set; }
public bool CanSwim { get; set; }
}
public static int Main(string[] args)
{
IAnimal animal = new Bird { Name = "Sparrow", CanFly = true };
// This should fail at runtime and return null (not throw)
// because the actual object is Bird, not Fish
Fish fish = animal as Fish;
return fish == null ? 42 : 0;
}
}