// selfhost/test/sym_link.ww — link-and-run probe for the ww-cgen // against the sym/typ/ast/mem dep stack. Exercises arena (mem), // hashtable scope (sym), and pulls in typ/ast as type carriers. // Returns 42 on success; smaller values name the probe that broke. use mem; use typ; use ast; use sym; export fn main() i32 = { let a: *arena = newarena(); if (a == nil) { return 1; }; let s: *scope = newscope(a, nil); if (s == nil) { return 2; }; let n1: str = "foo"; let r1: *sym = scope_define(s, n1, SK_VAR, nil, nil); if (r1 == nil) { return 3; }; let n2: str = "bar"; let r2: *sym = scope_define(s, n2, SK_TYPE, nil, nil); if (r2 == nil) { return 4; }; // Duplicate define in same scope must fail. let r3: *sym = scope_define(s, n1, SK_VAR, nil, nil); if (r3 != nil) { return 5; }; let l1: *sym = scope_lookup(s, n1); if (l1 == nil) { return 6; }; if (l1.skind != SK_VAR) { return 7; }; let l2: *sym = scope_lookup(s, n2); if (l2 == nil) { return 8; }; if (l2.skind != SK_TYPE) { return 9; }; // Not-found lookup returns nil. let n3: str = "baz"; let l3: *sym = scope_lookup(s, n3); if (l3 != nil) { return 10; }; freearena(a); return 42; };