mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 20:42:21 +02:00
Early code generation support
This commit is contained in:
parent
0b48a60592
commit
71d4dd0e90
26 changed files with 2422 additions and 1576 deletions
64
IDEHelper/Tests/src/Comptime.bf
Normal file
64
IDEHelper/Tests/src/Comptime.bf
Normal file
|
@ -0,0 +1,64 @@
|
|||
using System;
|
||||
|
||||
namespace Tests
|
||||
{
|
||||
class Comptime
|
||||
{
|
||||
[AttributeUsage(.All)]
|
||||
struct IFaceAAttribute : Attribute, IComptimeTypeApply
|
||||
{
|
||||
String mMemberName;
|
||||
int32 mInitVal;
|
||||
|
||||
public int32 InitVal
|
||||
{
|
||||
set mut
|
||||
{
|
||||
mInitVal = value;
|
||||
}
|
||||
}
|
||||
|
||||
public this(String memberName)
|
||||
{
|
||||
mMemberName = memberName;
|
||||
mInitVal = 0;
|
||||
}
|
||||
|
||||
[Comptime]
|
||||
public void ApplyToType(Type type)
|
||||
{
|
||||
Compiler.EmitDefinition(type, scope $"""
|
||||
public int32 m{mMemberName} = {mInitVal};
|
||||
public int32 GetVal{mMemberName}() => mC;
|
||||
""");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
[IFaceA("C", InitVal=345)]
|
||||
class ClassA
|
||||
{
|
||||
public int mA = 123;
|
||||
|
||||
[OnCompile(.TypeInit), Comptime]
|
||||
public static void Generate()
|
||||
{
|
||||
Compiler.EmitDefinition(typeof(Self), """
|
||||
public int32 mB = 234;
|
||||
public int32 GetValB() => mB;
|
||||
""");
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public static void TestBasics()
|
||||
{
|
||||
ClassA ca = scope .();
|
||||
Test.Assert(ca.mA == 123);
|
||||
Test.Assert(ca.mB == 234);
|
||||
Test.Assert(ca.GetValB() == 234);
|
||||
Test.Assert(ca.mC == 345);
|
||||
Test.Assert(ca.GetValC() == 345);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -211,9 +211,26 @@ namespace Tests
|
|||
MethodA(list);
|
||||
}
|
||||
|
||||
public static void MethodC()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public static void MethodD(delegate void() dlg)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public static void MethodD<T1>(delegate void(T1) dlg)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
[Test]
|
||||
public static void TestBasics()
|
||||
{
|
||||
MethodD(scope => MethodC);
|
||||
|
||||
List<Entry> list = scope .();
|
||||
list.Sort();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue