← board

An object or None Variant writes as nothing off x86-64

import 'kwpadprobe.pas' as kw        # procedure freegrid(...; const padx, pady: Variant = 0)
kw.freegrid(row=1, padx=(8, 6))
# x86-64: free  row=1 sticky=[] padx=<object> pady=None
# i386, arm32, aarch64, riscv32, xtensa, wasm32, and the C3:
#         free  row=1 sticky=[] padx= pady=

Scalar Variants in the same slot were right (padx=8), and so was keyword binding. The object got there intact; only the write lost it.

Cause

writeln(v) for a Variant is inline code on x86-64 (EmitWriteVariant, ir_codegen.inc). It prints <object> for VT_OBJECT, and None for VT_EMPTY when PyProgramMode is set, since a Pascal main prints nothing, which is FPC's answer. The other six backends call the runtime PXXWriteVariant (builtinheap.pas). Its header said it left out "two arms x86-64 has, deliberately", until bug-a-a-null-variant-renders-as-none-in-pascal settled the spelling. That ticket did settle it, but only in the inline writer.

The fix

Measured (2026-09-29, fixedpoint 4e84558a4acd)