Skip to content

v9.3.3 released

Choose a tag to compare

@funlang funlang released this 15 Oct 16:40
· 74 commits to main since this release
Windows joins the gate, and the last portability gaps close.

Highlights since v9.3.2:

- win64 has regex. PCRE 8.45 is built there with the runner's MinGW gcc into
  pcre3.dll beside funcmd.exe and imported by name (-dPCRE_WinDLL), because
  neither FPC linker can pull in the bcc32 or the MinGW PCRE objects. Two
  engine fixes came with it: the __llmul stub is 32-bit only (win64 has no
  System.__llmul), and PCRE memory returns through pcre_free_substring, since
  the DLL allocates from its own CRT (FreeMem corrupted the heap after a
  match). The 8 regex tests and the portability probe run on Windows now
  instead of skipping.

- win64 has getapi. FPC's bundled ffi unit already targets WIN64, so -dWinFFI
  (mapped onto the engine's existing UnixFFI symbol) selects the libffi-backed
  lffi unit and CI copies ffi.dll from MSYS2 next to funcmd.exe; a bare
  library name now falls back to name + '.dll'.

- The portable FFI suite runs on win64 and earned its keep: four of the five
  cases use the shared snapshots, and the fifth found a real bug - kernel32
  exports GetCommandLineA/W, so lffi.pas now retries name + 'A' for unsuffixed
  Windows API names, as io.GetProc already did. windows-x64 is 55/55, 37
  skipped.

- Windows-only engine divergences fixed ({$IfDef FPC} branches, Delphi sources
  untouched by them): the ISO time literal parses directly instead of through
  FPC's locale-dependent VarToDateTime; DefaultFormatSettings is pinned to the
  Unix formats so date and number output is host-independent; stdout goes
  through a new raw-byte WriteOut instead of the RTL text file, which
  re-encoded every non-ASCII byte to the console codepage; and a named script
  forces console mode, so a redirected run prints again (AttachConsole is
  false without a parent console). Also: 0x literals stay 32-bit unsigned on
  Win64, and the FPC-only divergences that broke the Windows build are gone.

- macOS: the lib-proc backend (libproc + mach VM) lands with its test enabled
  (#14); lib-asm-a64 gains live JIT on arm64 (#13) and all b.cond condition
  codes (#4); the lib-crypt-unx hashes go through CommonCrypto (#6).

- CI: every platform gates the build (windows-arm64 stays disabled, FPC 3.2.2
  has no such target), the FPC toolchain is cached on all of them, and the
  Windows runner reports regex/getapi availability as annotations.

- pcrd's dynamic branch (-dPCRE_LINKDLL) no longer breaks the Delphi build:
  dynlibs is FPC-only and the non-FPC side keeps the same behaviour through
  the Win32 loading calls, so dcc32 builds funcmd.dpr again.

Verified: linux x86_64 regression 92/92. The Delphi (dcc32) build of
funcmd.dpr compiles again; -dPCRE_WinDLL/-dPCRE_LINKDLL paths are unchanged.