feat: preprocess native argv into sentinel slices

This commit is contained in:
2026-10-23 12:07:23 +02:00
parent eddca5c3bf
commit 8ebbf72388
8 changed files with 167 additions and 93 deletions
+3 -3
View File
@@ -1764,15 +1764,15 @@ configure_entry_point :: proc(checker: ^Checker) {
args_item, args_ok := types.node(&checker.module.types, args_type)
args_fields := types.fields_for(&checker.module.types, args_type)
values_name := symbol.intern(checker.symbols, "values")
argument_pointer := types.pointer(&checker.module.types, types.U8, false, true, true, 0)
argument_values := types.slice(&checker.module.types, argument_pointer, false)
argument_slice := types.slice(&checker.module.types, types.U8, false, true, 0)
argument_values := types.slice(&checker.module.types, argument_slice, false)
if !args_ok || args_item.kind != .Struct || args_item.tuple || args_item.c_layout ||
len(args_fields) != 1 || args_fields[0].name != u32(values_name) ||
!types.equal(types.resolve_alias(args_fields[0].type, &checker.module.types), argument_values) {
checker.template_diagnostics[main_template] = source.add(
checker.diagnostics,
main.span,
"@std/process Args must be an auto-layout record containing exactly 'values [][*;0]u8'",
"@std/process Args must be an auto-layout record containing exactly 'values [][;0]u8'",
)
return
}