- objc.sx, objc_block.sx (from std/) + sdl3/opengl/raylib/stb/stb_truetype/ wasm vendor bindings (from modules/ root) -> modules/ffi/ - std/uikit.sx deleted: platform/uikit.sx already declares UIApplicationMain and imports objc; '#framework "UIKit"' cannot live in a file imported on macOS targets (unconditional link directive, UIKit is iOS-only), so the three iOS-only examples carry the 3-line glue inline. 1607/1608/1616 also un-rotted (dead ns_string -> 'xx "..."' Into conversions, callconv(.c) msgSend fn-ptrs) — all three build for ios-sim/ios again. - math/math.sx -> math/scalar.sx; one spelling '#import "modules/math"' everywhere (4 pinned IR snapshots regenerated: dir import adds Vec2/Mat4 to the type tables). - compiler.sx -> build.sx (imports, CLAUDE.md bundling table, specs.md). - testpkg/ + test_c.sx -> tests/fixtures/ (resolve CWD-relative from repo root, same as vendors/). - library-internal imports use full modules/... paths (std.sx tail, platform/bundle.sx, fixtures).
107 lines
2.4 KiB
Plaintext
107 lines
2.4 KiB
Plaintext
#import "modules/std.sx";
|
|
#import "modules/math";
|
|
#import "modules/build.sx";
|
|
#import "modules/std/test.sx";
|
|
pkg :: #import "tests/fixtures/testpkg";
|
|
|
|
add :: (a: s32, b: s32) -> s32 { a + b }
|
|
|
|
mul :: (a: s32, b: s32) -> s32 { a * b }
|
|
|
|
identity :: (x: $T) -> T { x }
|
|
|
|
pair_add :: (a: $T, b: $U) -> s64 {
|
|
cast(s64) a + cast(s64) b
|
|
}
|
|
|
|
typed_sum :: (..args: []s32) -> s32 {
|
|
result := 0;
|
|
for args (it) { result = result + it; }
|
|
result
|
|
}
|
|
|
|
apply :: (f: (s32, s32) -> s32, x: s32, y: s32) -> s32 {
|
|
f(x, y)
|
|
}
|
|
|
|
void_return :: () {
|
|
return;
|
|
}
|
|
|
|
implicit_return :: (x: s32) -> s32 {
|
|
x * 2
|
|
}
|
|
|
|
early_return :: (x: s32) -> s32 {
|
|
if x > 10 { return 99; }
|
|
x
|
|
}
|
|
|
|
main :: () {
|
|
|
|
// ========================================================
|
|
// 5. FUNCTIONS & DECLARATIONS
|
|
// ========================================================
|
|
print("=== 5. Functions ===\n");
|
|
|
|
// Constant binding
|
|
FORTY_TWO :: 42;
|
|
print("const: {}\n", FORTY_TWO);
|
|
|
|
// Typed constant
|
|
TYPED_PI : f64 : 3.14;
|
|
print("typed-const: {}\n", TYPED_PI);
|
|
|
|
// Variable with default init
|
|
di : s32;
|
|
print("default-init: {}\n", di);
|
|
|
|
// Implicit return
|
|
print("implicit-ret: {}\n", implicit_return(21));
|
|
|
|
// Explicit return
|
|
print("early-ret: {}\n", early_return(5));
|
|
print("early-ret2: {}\n", early_return(20));
|
|
|
|
// Void return
|
|
void_return();
|
|
print("void-return: ok\n");
|
|
|
|
// Generic — single param
|
|
print("generic-s32: {}\n", identity(42));
|
|
print("generic-f32: {}\n", identity(1.5));
|
|
print("generic-bool: {}\n", identity(true));
|
|
|
|
// Generic — multiple params
|
|
print("generic-multi: {}\n", pair_add(10, 20));
|
|
|
|
// Lambda
|
|
double :: (x: s32) => x * 2;
|
|
print("lambda: {}\n", double(7));
|
|
|
|
// Lambda with return type
|
|
halve :: (x: f32) -> f32 => x / 2.0;
|
|
print("lambda-ret: {}\n", halve(10.0));
|
|
|
|
// Local function (non-lambda)
|
|
local_add :: (a: s32, b: s32) -> s32 { a + b }
|
|
print("local-fn: {}\n", local_add(3, 4));
|
|
|
|
// Nested function calls
|
|
print("fn-nested: {}\n", add(mul(2, 3), mul(4, 5)));
|
|
|
|
// Variadic (typed)
|
|
print("varargs: {}\n", typed_sum(1, 2, 3, 4, 5));
|
|
|
|
// Spread
|
|
spread_arr : [3]s32 = .[10, 20, 30];
|
|
print("spread: {}\n", typed_sum(..spread_arr));
|
|
|
|
// Function pointers
|
|
fp : (s32, s32) -> s32 = add;
|
|
print("fp: {}\n", fp(3, 4));
|
|
fp = mul;
|
|
print("fp-reassign: {}\n", fp(3, 4));
|
|
print("fp-apply: {}\n", apply(add, 10, 20));
|
|
}
|