Break the monolithic examples/50-smoke.sx into 30 focused per-section examples,
filed into their category blocks (basic/types/comptime/memory/protocols/ffi),
each carrying only the top-level decls its section references (the protocols
section keeps the full preamble — its deps flow through UFCS method calls that
name-based extraction can't see). Outputs verified identical to the original
section blocks.
Add examples/1036-errors-failable-smoke.sx — an end-to-end error-handling example
(the E5.4 work): named + inferred error sets consumed via destructure, try (in
helpers), catch (bare-expr / match-body / diverging / no-binding), or
value-terminator, onfail+defer interleave, and error.X value + {} tag
interpolation.
Remove examples/50-smoke.sx. Suite: 324 passed, 0 failed.
80 lines
1.7 KiB
Plaintext
80 lines
1.7 KiB
Plaintext
#import "modules/std.sx";
|
|
#import "modules/math/math.sx";
|
|
#import "modules/compiler.sx";
|
|
#import "modules/test.sx";
|
|
pkg :: #import "modules/testpkg";
|
|
|
|
main :: () {
|
|
|
|
// ========================================================
|
|
// 6. SCOPING & DEFER
|
|
// ========================================================
|
|
print("=== 6. Scoping ===\n");
|
|
|
|
// Scope block with shadowing
|
|
sv := 100;
|
|
{
|
|
sv := 200;
|
|
print("inner: {}\n", sv);
|
|
}
|
|
print("outer: {}\n", sv);
|
|
|
|
// Shadow with different type
|
|
st_v := 42;
|
|
print("shadow-type: {}\n", st_v);
|
|
{
|
|
st_v := 3.14;
|
|
print("shadow-type: {}\n", st_v);
|
|
}
|
|
|
|
// Nested scopes (3 levels)
|
|
nv := 1;
|
|
{
|
|
nv := 2;
|
|
{
|
|
nv := 3;
|
|
print("nest3: {}\n", nv);
|
|
}
|
|
print("nest2: {}\n", nv);
|
|
}
|
|
print("nest1: {}\n", nv);
|
|
|
|
// Scope isolation
|
|
{ iso := 100; print("scope-isolate: {}\n", iso); }
|
|
|
|
// Reuse name after scope exit
|
|
sr := 1;
|
|
print("scope-reuse: {}\n", sr);
|
|
{ sr := 2; print("scope-reuse: {}\n", sr); }
|
|
print("scope-reuse: {}\n", sr);
|
|
|
|
// Multiple defers (LIFO order)
|
|
{
|
|
defer print("defer-c\n");
|
|
defer print("defer-b\n");
|
|
defer print("defer-a\n");
|
|
}
|
|
|
|
// Four defers
|
|
{
|
|
defer print("d1\n");
|
|
defer print("d2\n");
|
|
defer print("d3\n");
|
|
defer print("d4\n");
|
|
}
|
|
|
|
// Defer in nested scopes
|
|
{
|
|
defer print("outer-defer\n");
|
|
{
|
|
defer print("inner-defer\n");
|
|
}
|
|
}
|
|
|
|
// Defer in if block
|
|
if true {
|
|
defer print("defer-in-if: deferred\n");
|
|
print("defer-in-if: body\n");
|
|
}
|
|
}
|