Changelog

All notable changes to Affix.pm will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

v1.0.2 - 2025-12-14

Changed

- In an attempt to debug mystery failures in SDL3.pm, Affix.pm will warn and return `undef` instead of `croak`ing.
- Improved error reporting: if the internal error message is empty, the numeric error code is now included in the warning.

Fixed

- [infix] Fixed a critical file descriptor leak on POSIX platforms (Linux/FreeBSD) where the file descriptor returned by `shm_open` was kept open for the lifetime of the trampoline, eventually hitting the process file descriptor limit (EMFILE). The descriptor is now closed immediately after mapping, as intended.
- Fixed memory leaks that occurred when trampoline creation failed midway (cleaning up partial arenas, strings, and backend structures).

v1.0.1 - 2025-12-13

Changed

- Improved Union marshalling: Union members are now exposed as pins within the hash. This allows clean syntax (like `$u->{member} = 5`) without needing to dereference a reference, while maintaining C-memory aliasing.

Fixed

- Fixed `writeback_pointer_generic` to support writing back to scalar output parameters (pointers-to-pointers). This resolves issues where C functions returning handles via arguments would fail to populate the SV*/pin.

v1.0.0 - 2025-12-13

- Stable? Stable. Stable enough.

v0.12.0 - 2025-12-12

Changed

- Affix is reborn! This is a complete rewrite
- Replaced dyncall with a JIT and introspection engine I've called [infix](https://github.com/sanko/infix.git)

0.11 - 2023-03-30

Added

- Support for WChar
- Rough, basic support for mangled symbols:
    - Itanium C++ ABI
    - Rust (legacy)
- Expose dcNewCallVM( ... ) size variable

0.10 - 2023-03-11

Changed

- Support for ArrayRef[] with dynamic size
- Support for empty Stuct[]
- Coerce Enum[] types with sv2ptr(...)
- Explicit undef values are turned into NULL in Pointer[], ArrayRef[], etc.
- Provide default values in Struct[]
- Ignore perl's PTRSIZE which might be different than the system's actual pointer size
- Cleanup VM on Affix::END()
- Simplify API around named subs
- Support for WStr (wchar_t *, PWSTR, etc.)

0.09 - 2023-01-26

Added

- Structs may now contain a CodeRef
- CodeRef, Any, etc. are now properly handled as aggregate members
- Nesting CodeRefs used as callbacks work now
- Bind to exported values with pin()
- Expose aggregate by value and syscall support in Affix::Feature
- Survive callbacks with unexpectedly empty return values
- Delayed type resolution with InstanceOf

0.08 - 2022-12-19

Fixed

- Correct struct alignment for perls with quadmath and/or longdouble enabled

0.07 - 2022-12-17

Changed

- Pull upstream changes to dyncall 1.5 (unstable)

0.06 - 2022-12-16

Changed

- Allow calling convention to be changed in param lists
- Fix quadmath tests (I hope)
- Attempt to build with nmake on Win32 smokers that have gcc but not GNU make (how? why?)
- Fix default struct padding when passing around by value

0.05 - 2022-12-14

Changed

- Expose offsetof( ... )
- Pull upstream changes to dyncall 1.4 (stable)

0.04 - 2022-12-07

Changed

- Affix.pm is born