wraith-lang/generic.w

48 lines
890 B
OpenEdge ABL
Raw Normal View History

struct Foo {
static Func2<U>(u: U) : U {
return u;
}
static Func<T>(t: T): T {
foo: T = t;
return Foo.Func2(foo);
}
}
2021-06-03 00:26:26 +00:00
struct MemoryBlock<T>
{
start: MemoryAddress;
capacity: uint;
2021-06-04 00:48:16 +00:00
AddressOf(index: uint): MemoryAddress
2021-06-03 00:26:26 +00:00
{
2021-06-04 00:48:16 +00:00
return start + (index * @sizeof<T>());
}
Get(index: uint): T
{
return @bitcast<T>(AddressOf(index));
}
Free(): void
{
@free(start);
2021-06-03 00:26:26 +00:00
}
}
struct Program {
static Main(): int {
x: int = 4;
y: int = Foo.Func(x);
2021-06-04 00:48:16 +00:00
block: MemoryBlock<uint>;
2021-06-03 22:08:01 +00:00
block.capacity = y;
block.start = @malloc(y * @sizeof<int>());
z: MemoryAddress = block.AddressOf(2);
2021-06-04 00:48:16 +00:00
Console.PrintLine("%u", block.Get(0));
2021-06-03 22:08:01 +00:00
Console.PrintLine("%p", block.start);
Console.PrintLine("%p", z);
2021-06-04 00:48:16 +00:00
block.Free();
2021-06-03 22:08:01 +00:00
return 0;
}
}