Write Antril, run it in your browser and share it with a link. Programs are compiled to WebAssembly and run on your machine, not on the server.
Running programs is unavailable right now: the WebAssembly linker (wasm-ld, part of LLVM) is not installed on this server. You can still write, share and download code.
importSystem;
importSystem.Reflection;
publicattributeColumn
{
public:
strName;
i32Width;
boolRequired;
new(str name) { Name = name; }
}
publicattributeNote : Column
{
public:
new() : base("note") { }
}
[Column("people", Width = 40)]
publicclassPerson
{
public:
[Column("full name", Required = true)] strName = "";
[Note] i32Age;
[Column("greet")]
Greet([Column("who")] str other) : str => "hi " + other;
}
Main()
{
Type t = typeof(Person);
loop (any a in t.GetCustomAttributes())
{
if (a isColumnAttribute c)
Console.WriteLine("type: " + c.Name + " " + c.Width);
}
FieldInfo? name = t.GetField("Name");
if (name isFieldInfo f && f.GetCustomAttributes(typeof(ColumnAttribute))[0] isColumnAttribute col)
Console.WriteLine("field: " + col.Name + " " + col.Required);
if (t.GetField("Age") isFieldInfo age)
Console.WriteLine("Age has Note: " + age.IsDefined(typeof(NoteAttribute)));
MethodInfo? greet = t.GetMethod("Greet");
if (greet isMethodInfo m)
{
ParameterInfo p = m.GetParameters()[0];
if (p.GetCustomAttributes()[0] isColumnAttribute pc)
Console.WriteLine("parameter: " + pc.Name);
}
Console.WriteLine(t.IsDefined(typeof(NoteAttribute)));
}
Output
Press Run (or Ctrl+Enter) to compile and run the program.
Input
What Console.ReadLine() reads, one line at a time.
Ctrl+Enter runs. Tab indents (Shift+Tab outdents); press Esc, then Tab, to leave the editor. A program may run for 10 seconds.