Files
sx/examples/1220-ffi-c-import-reserved-name-params.sx
agra 9719432e79 refactor(ffi-linkage): Phase 9.3 — purge remaining 'foreign' from library/docs/example comments
Capital-Foreign + stale-identifier comment refs: library (Foreign Java types→Runtime,
foreign-class→runtime-class, foreign_class_map→runtime_class_map); docs/debugger
(foreign call→extern call); docs/fork-c ledger (foreign_class_map, protocol/foreign→
runtime-class); docs/inline-asm-design Deviation-6 obsolete #foreign-vs-extern design
RESOLVED to the landed extern/export reality; example comments (parseForeignClassDecl→
parseRuntimeClassDecl, checkForeignRefs→checkExternRefs, Foreign decls→Extern). Docs/
comments only — no build impact.
2026-06-15 11:03:29 +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
}