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