Files
sx/examples/ffi/1220-ffi-c-import-reserved-name-params.sx
agra 66bdc70bf1 test: group examples into per-category folders
Move examples/*.sx and their expected/ snapshots into per-category
subfolders (examples/<category>/...). Folder = leading filename token,
with ffi-objc/ffi-jni kept whole; filenames are unchanged. The corpus
runner and LSP sweep now discover each category's expected/ dir, while
issues/ stays flat. Example 1058's repo-root-relative companion import
is made file-relative. Path strings embedded in 164 snapshots were
regenerated (path-only changes). Test-layout docs in CLAUDE.md updated.
2026-06-21 14:41:34 +03:00

25 lines
1.1 KiB
Plaintext

// `#import c` extern-name exemption: C names that collide with sx's reserved
// type spellings import unedited. Extern decls are treated as RAW — their names
// are never type-classified nor reserved-checked — so the generated `extern`
// bindings import and call without hand-edits (no backticks needed). This covers
// parameter names (`i1`/`i2`), a function whose own NAME is a reserved spelling
// (`i2`), and bare-calling that function (its callee spelling parses as a type
// but resolves to the extern fn). Before issue 0089 the params errored with
// "'i1' is a reserved type name and cannot be used as an identifier", and the
// bare call errored with "unresolved 'i2'".
// Regression (issue 0089).
#import "modules/std.sx";
#import c {
#include "1220-ffi-c-import-reserved-name-params.h";
#source "1220-ffi-c-import-reserved-name-params.c";
};
main :: () -> i32 {
print("pick(10,20,0) = {}\n", ffi_pick(10, 20, 0));
print("pick(10,20,1) = {}\n", ffi_pick(10, 20, 1));
print("sum(10,20) = {}\n", ffi_sum(10, 20));
print("i2(4) bare = {}\n", i2(4));
0
}