# Changelog

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

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [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

[Unreleased]: https://github.com/sanko/Affix.pm/compare/v1.0.1...HEAD
[v1.0.1]: https://github.com/sanko/Affix.pm/compare/v1.0.0...v1.0.1
[v1.0.0]: https://github.com/sanko/Affix.pm/compare/v0.12.0...v1.0.0
[v0.12.0]: https://github.com/sanko/Affix.pm/compare/0.11...v0.12.0
[0.11]: https://github.com/sanko/Affix.pm/compare/0.10...0.11
[0.10]: https://github.com/sanko/Affix.pm/compare/0.09...0.10
[0.09]: https://github.com/sanko/Affix.pm/compare/0.08...0.09
[0.08]: https://github.com/sanko/Affix.pm/compare/0.07...0.08
[0.07]: https://github.com/sanko/Affix.pm/compare/0.06...0.07
[0.06]: https://github.com/sanko/Affix.pm/compare/0.05...0.06
[0.05]: https://github.com/sanko/Affix.pm/compare/0.04...0.05
[0.04]: https://github.com/sanko/Affix.pm/releases/tag/0.04