test: prove package initialization semantics

This commit is contained in:
2026-08-14 19:02:49 +09:00
parent c6bec0914d
commit 763bbc8f25
24 changed files with 2243 additions and 349 deletions

View File

@@ -49,6 +49,15 @@ struct row { const char *src, *expect; };
static const struct row rows[] = {
{ "fn main() void = {};", "ok" },
{ "fn init() void = {}; fn init() void = {};", "ok" },
{ "fn init(x: i32) void = {};", "func init must have no arguments and no return values" },
{ "fn init() i32 = { return 1; };", "func init must have no arguments and no return values" },
{ "fn init() void;", "func init must have a body" },
{ "export fn init() void = {};", "func init cannot be exported" },
{ "fn init() void = {}; fn f() void = { init(); };", "undefined: init" },
{ "fn make() i32 = { return 7; }; let state: i32 = make();", "ok" },
{ "fn left() i32 = { return right; }; let first: i32 = left(); let right: i32 = 3;", "ok" },
{ "fn readb() i32 = { return b; }; let a: i32 = readb(); let b: i32 = a;", "initialization cycle for a" },
{ "fn id(x: i32) i32 = { return x; };", "ok" },
{ "fn add(a: i32, b: i32) i32 = { return a + b; };", "ok" },
{ "def MAX: i32 = 4096;", "ok" },