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