1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-24 18:48:01 +02:00

Fixed extension initializers and dtors. [NoExtension]. Extension warning

This commit is contained in:
Brian Fiete 2020-10-22 11:33:13 -07:00
parent 6e71cbc765
commit b6db69d2b0
15 changed files with 235 additions and 64 deletions

View file

@ -1,5 +1,6 @@
using System;
using System.Collections;
using System.Diagnostics;
namespace LibA
{
@ -90,11 +91,18 @@ namespace LibA
class LibClassA
{
public int32 mA = GetVal(7, "LibA.LibClassA.mA");
public int32 mA = GetVal(7, 10, "LibA.LibClassA.mA");
public static int32 sMagic = 1;
public static this()
{
sMagic += 10;
}
public this()
{
PrintF("LibA.LibClassA()\n");
Debug.WriteLine("LibA.LibClassA()\n");
mA += 100;
}
@ -103,9 +111,15 @@ class LibClassA
mA += a;
}
public static int32 GetVal(int32 val, String str)
public ~this()
{
PrintF("GetVal: %s\n", str.CStr());
sMagic += 20;
}
public static int32 GetVal(int32 val, int32 magic, String str)
{
Debug.WriteLine("GetVal: {}", str);
sMagic += magic;
return val;
}
@ -118,6 +132,11 @@ class LibClassA
{
return 30;
}
public static LibClassA Create()
{
return new LibClassA();
}
}
class LibClassB

View file

@ -14,15 +14,25 @@ namespace LibB
extension LibClassA
{
public int32 mB = GetVal(8, "LibB.LibClassA.mB");
public int32 mB = GetVal(8, 100, "LibB.LibClassA.mB");
public this()
public static this()
{
sMagic += 100;
}
public ~this()
{
sMagic += 200;
}
public new this() : [NoExtension]this()
{
PrintF("LibB.LibClassA()\n");
mB += 100;
}
public this(int32 a)
public new this(int32 a)
{
PrintF("LibB.LibClassA(int32)\n");
mB += 1000;

View file

@ -12,7 +12,17 @@ namespace LibC
extension LibClassA
{
public int32 mB = GetVal(13, "LibC.LibClassA.mB");
public int32 mB = GetVal(13, 1000, "LibC.LibClassA.mB");
public static this()
{
sMagic += 1000;
}
public ~this()
{
sMagic += 2000;
}
public this(int8 i8)
{

View file

@ -2,15 +2,15 @@ using System;
extension LibClassA
{
public int32 mC = GetVal(9, "TestsB.LibClassA.mC");
public int32 mC = GetVal(9, 10000, "TestsB.LibClassA.mC");
public this()
public new this()
{
PrintF("TestB.LibClassA()\n");
mB += 10000;
}
public int GetVal2()
public new int GetVal2()
{
return 11;
}

View file

@ -227,21 +227,32 @@ namespace Tests
[Test]
public static void TestSharedData()
{
Test.Assert(LibClassA.sMagic == 1111);
LibClassA ca = scope LibClassA();
Test.Assert(ca.mA == 7);
Test.Assert(LibClassA.sMagic == 2221);
Test.Assert(ca.mA == 107);
Test.Assert(ca.LibB_GetB() == 108);
Test.Assert(ca.LibC_GetB() == 13);
Test.Assert(ca.GetVal2() == 9);
ca = scope LibClassA(12345);
Test.Assert(LibClassA.sMagic == 3331);
Test.Assert(ca.mA == 7);
Test.Assert(ca.LibB_GetB() == 1008);
Test.Assert(ca.LibC_GetB() == 13);
ca = scope LibClassA((int8)2);
Test.Assert(LibClassA.sMagic == 4441);
Test.Assert(ca.mA == 7);
Test.Assert(ca.LibB_GetB() == 8);
Test.Assert(ca.LibC_GetB() == 30013);
ca = LibClassA.Create();
Test.Assert(LibClassA.sMagic == 5551);
Test.Assert(ca.mA == 107);
delete ca;
Test.Assert(LibClassA.sMagic == 7771);
}
[Test]