Thingy::enum{ @str=10 Value = 1, } Thing::union{ union:{ } struct:{ } } Thing::struct{ data: U32; inside_call :: (param: U32){ } } call :: (param:U32) U32{ inner_call :: (param2:U32){ size_of_s64 = sizeof(:S64); size_of_val = sizeof(param); param2 + 10; return; } inner_call(); } @stringify Enumeration:enum{ None, Thing = 1 << 10, Thing2, Thing3, } @sllqueue() @sllqueue(prefix=thing_scope, next=next_scope) Thing::struct{ Inner_Struct :: { test_val : U32; } thing:Inner_Struct; next: Thing*; first: Thing*; last: Thing*; next_scope: Thing*; val: U32[16]; str: String; embed: struct{ thing: S32; } } @register(sllqueue, first, last, next) sllqueue_push:(base:T1, child:T2) void { if(base.first == 0){ base.first = base.last = child; } else{ base.last = base.last.next = child; } } //----------------------------------------------------------------------------- // //----------------------------------------------------------------------------- /* function void thing_sllqueue_push(){ } function void thing_scope_sllqueue_push(){ } */ Builtin types: B8,B16,B32,B64 S8,S16,S32,S64 U8,U16,U32,U64 SizeI, SizeU F32, F64 Decls: S32 *var; S32 (*func)(); S32 *var[expr][expr]; S32 **var; Global scope: function S32 do_thing(S32 a, U32 b){ stmt_list } function S32 do_thing(S32 a, S32 b); typedef struct Thing Thing; struct Thing{}; typedef struct Thing{} Thing; typedef enum Thingy Thingy; enum Thingy{}; typedef enum Thingy{} Thingy; global S32 variable = expr | compound; // typedef S32 NewName; // typedef S32 BaseFunctionType(S32 thing); // typedef S32 (*FunctionPointer)(S32 thing); Local scope-(stmts): S32 variable = expr; variable = expr; variable++; return 0; if(a){}elseif(b){}else{}