Files
sx/library/modules/std/target.sx
agra 69fd76b02c refactor: home the target facts in a dependency-free std/target.sx
Move OS / ARCH / POINTER_SIZE + the OperatingSystem / Architecture enums out of
build.sx into a new std/target.sx that imports NOTHING, so low-level code can
name the target enum types without dragging the build/std barrel (build.sx
transitively pulls std + compiler + bundle, ~16k lines of IR).

build.sx flat-imports target.sx so the decls stay registered in the standard
import graph (build.sx is reachable from std.sx — dropping it would shift every
std program's type table). This is not a re-export: flat import only splices
into build.sx's own scope. Consumers are unaffected — the compiler resolves
OS / ARCH / POINTER_SIZE by name (comptime constants), so `inline if OS`/value
reads need no import; a module that names the enum type imports target.sx.

No behavior change (full suite green, 817/0); the enum types stay in the same
import graph, so no .ir snapshot drift.
2026-06-26 08:47:07 +03:00

24 lines
1.2 KiB
Plaintext

// modules/std/target.sx — compiler-injected target facts. Dependency-free
// (imports NOTHING) so any low-level module can read the target enums/values
// without pulling the std barrel.
//
// The compiler sets OS / ARCH / POINTER_SIZE per build target (name-matched in
// src/imports.zig). NOTE: a top-level `inline if OS/ARCH/POINTER_SIZE`
// conditional is resolved by the compiler's flatten pre-pass and needs NO
// import at all (that is how std/net/epoll.sx selects its layout). Import this
// module only when you need the enum TYPE (`OperatingSystem` / `Architecture`)
// or a value in a non-`inline if` position.
//
// build.sx imports this (flat) so the decls stay registered in the standard
// import graph — NOT to re-export them (flat import doesn't propagate to a
// module's importers). Code that names the OperatingSystem / Architecture TYPE
// imports this module directly; OS / ARCH / POINTER_SIZE values and `inline if`
// conditions are resolved by the compiler by name and need no import.
OperatingSystem :: enum { macos; linux; windows; wasm; ios; android; unknown; }
Architecture :: enum { aarch64; x86_64; wasm32; wasm64; unknown; }
OS : OperatingSystem = .unknown;
ARCH : Architecture = .unknown;
POINTER_SIZE : i64 = 8;