The legacy tagged-Value Interpreter is gone. Relocate the Value result-DTO
+ decodeVariantElements into a new comptime_value.zig (the VM<->host
materialization boundary); repoint comptime_vm/emit_llvm/ir-barrel Value to
it and BuildConfig to compiler_hooks; delete the dead valueToReg bridge;
slim compiler_lib.zig to just the name registry (BoundFn{sx_name} + bound_fns
+ findFn — weldedCompilerFn only validates names); simplify printInterpBailDiag
to comptime_vm.last_bail_reason; drop the unused interp_mod import in lower.zig.
rm src/ir/interp.zig + interp.test.zig.
Value is relocated (not eliminated): it survives only as the slim result DTO
at the VM->valueToLLVMConst boundary; the execution-time marshaling the VM
pivot targeted is gone. Drop dead Value.asString/reflectTypeId.
706/0 corpus + 476/476 unit.
104 lines
4.5 KiB
Zig
104 lines
4.5 KiB
Zig
//! The comptime `compiler` library's name registry — the curated set of the
|
|
//! compiler's own functions reachable from comptime sx via
|
|
//! `abi(.zig) extern compiler`. See `current/PLAN-COMPILER-VM.md`.
|
|
//!
|
|
//! **This registry IS the safety boundary.** Only the names registered here are
|
|
//! bindable from user comptime code; a name not on the export list is rejected
|
|
//! at declaration (`weldedCompilerFn`). The comptime VM
|
|
//! (`comptime_vm.callCompilerFn`) services every welded call by name — this file
|
|
//! only carries the list of recognized names.
|
|
//!
|
|
//! **Direction note (2026-06-17 pivot).** The byte-weld of TYPES (sx structs whose
|
|
//! layout was validated to mirror the compiler's Zig records) was stripped — it
|
|
//! bolted a parallel layout regime + hand-marshaling onto a comptime value model
|
|
//! that isn't bytes. The replacement is a comptime VM where values are
|
|
//! native bytes, so the compiler-API needs no weld/validation/marshaling.
|
|
|
|
const std = @import("std");
|
|
|
|
/// The name of the only compiler library. A `fn abi(.zig) extern <lib>` with a
|
|
/// different `<lib>` is rejected — `compiler` is the sole comptime bind source.
|
|
pub const lib_name = "compiler";
|
|
|
|
// ── Functions (comptime-only, serviced by the comptime VM) ──────────────────
|
|
|
|
pub const BoundFn = struct {
|
|
sx_name: []const u8,
|
|
};
|
|
|
|
/// The compiler-function export list. Every entry is serviced by name in
|
|
/// `comptime_vm.callCompilerFn`; `weldedCompilerFn` consults this list to decide
|
|
/// whether a `abi(.compiler)` name is a recognized compiler-API function.
|
|
pub const bound_fns = [_]BoundFn{
|
|
.{ .sx_name = "intern" },
|
|
.{ .sx_name = "text_of" },
|
|
.{ .sx_name = "find_type" },
|
|
.{ .sx_name = "type_field_count" },
|
|
.{ .sx_name = "type_nominal_name" },
|
|
.{ .sx_name = "type_field_name" },
|
|
.{ .sx_name = "type_field_type" },
|
|
.{ .sx_name = "type_kind" },
|
|
.{ .sx_name = "type_field_value" },
|
|
// ── write side (lowering-time, mints into the type table) ────────────────
|
|
.{ .sx_name = "declare_type" },
|
|
.{ .sx_name = "pointer_to" },
|
|
.{ .sx_name = "register_type" },
|
|
// ── BuildOptions (migrated off `#compiler` onto `abi(.compiler)`) ─────────
|
|
.{ .sx_name = "build_options" },
|
|
.{ .sx_name = "on_build" },
|
|
// ── build-pipeline metadata queries (Phase 5.2) ──────────────────────────
|
|
.{ .sx_name = "c_object_paths" },
|
|
.{ .sx_name = "link_libraries" },
|
|
.{ .sx_name = "emit_object" },
|
|
.{ .sx_name = "link" },
|
|
.{ .sx_name = "build_output" },
|
|
.{ .sx_name = "build_target" },
|
|
.{ .sx_name = "build_frameworks" },
|
|
.{ .sx_name = "build_flags" },
|
|
// ── BuildOptions accessors (Phase 5.5) ───────────────────────────────────
|
|
.{ .sx_name = "add_link_flag" },
|
|
.{ .sx_name = "add_framework" },
|
|
.{ .sx_name = "set_output_path" },
|
|
.{ .sx_name = "set_wasm_shell" },
|
|
.{ .sx_name = "add_asset_dir" },
|
|
.{ .sx_name = "asset_dir_count" },
|
|
.{ .sx_name = "asset_dir_src_at" },
|
|
.{ .sx_name = "asset_dir_dest_at" },
|
|
.{ .sx_name = "set_post_link_module" },
|
|
.{ .sx_name = "binary_path" },
|
|
.{ .sx_name = "set_bundle_path" },
|
|
.{ .sx_name = "set_bundle_id" },
|
|
.{ .sx_name = "set_codesign_identity" },
|
|
.{ .sx_name = "set_provisioning_profile" },
|
|
.{ .sx_name = "bundle_path" },
|
|
.{ .sx_name = "bundle_id" },
|
|
.{ .sx_name = "codesign_identity" },
|
|
.{ .sx_name = "provisioning_profile" },
|
|
.{ .sx_name = "target_triple" },
|
|
.{ .sx_name = "is_macos" },
|
|
.{ .sx_name = "is_ios" },
|
|
.{ .sx_name = "is_ios_device" },
|
|
.{ .sx_name = "is_ios_simulator" },
|
|
.{ .sx_name = "is_android" },
|
|
.{ .sx_name = "framework_count" },
|
|
.{ .sx_name = "framework_at" },
|
|
.{ .sx_name = "framework_path_count" },
|
|
.{ .sx_name = "framework_path_at" },
|
|
.{ .sx_name = "set_manifest_path" },
|
|
.{ .sx_name = "set_keystore_path" },
|
|
.{ .sx_name = "manifest_path" },
|
|
.{ .sx_name = "keystore_path" },
|
|
.{ .sx_name = "jni_main_count" },
|
|
.{ .sx_name = "jni_main_runtime_path_at" },
|
|
.{ .sx_name = "jni_main_java_source_at" },
|
|
};
|
|
|
|
/// Look up a compiler function by its sx name. Returns null when the name is not
|
|
/// on the export list.
|
|
pub fn findFn(sx_name: []const u8) ?*const BoundFn {
|
|
for (&bound_fns) |*bf| {
|
|
if (std.mem.eql(u8, bf.sx_name, sx_name)) return bf;
|
|
}
|
|
return null;
|
|
}
|