record StaticList[T, S; capacity] { S size; T[capacity] data; } StaticList_remove: [T, S; capacity]u0(StaticList[T, S; capacity]* this, S index) -> { T* data = &((*this).data[index]); (*this).size = (*this).size - 1; S sz = (*this).size; loop { if(index == sz) { break; } *data = *(data + 1); data = data + 1; index = index + 1; } return; }; StaticList_add: [T, S; capacity]u0(StaticList[T, S; capacity]* this, T value) -> { (*this).data[(*this).size] = value; (*this).size = (*this).size + 1; return; }; @instantiate StaticList_remove[u8, u32; 4]; @instantiate StaticList_add[u8, u32; 4]; /*StaticList[u8, u32; 4] kbbuf; kbbuf.size = 4; kbbuf.data[0] = 0; kbbuf.data[5] = 2; foo: [T]T(T a, T b) -> { return a + b; }; @instantiate foo[u32]; u32 c = foo[u32](5, 3);*/