Revision history for Object-Pad 0.40 2021-06-02 [CHANGES] * Updated for XS::Parse::Keyword v0.06 * Silence the -Wunused-variable warning about PL_savetype_name * Yield PL_sv_yes from `class` statements so as to keep `require` happy (RT136701) 0.39 2021-05-24 [CHANGES] * Update parsing logic to use XS::Parse::Keyword 0.38 2021-05-14 [CHANGES] * Added Object::Pad::MOP::Class->for_class and ->for_caller constructors * Provide a generated ->DOES method on each class to account for applied roles (RT136462) [BUGFIXES] * Make sure that generated accessors are recorded in the metaclass as real methods, ensuring role application includes them (RT136507) 0.37 2021-04-01 [BUGFIXES] * Don't get confused by sub signature parameters of the same name as slot variables (RT134456) * Don't crash if extends/implements package names are missing or malformed (RT134827) * Reject requests to make accessors with invalid identifier names (RT134795) 0.36 2021-02-19 [CHANGES] * Added $classmeta->compose_role() (RT134261) * Docs updates + Point out that slot variables can also be exposed via :reader etc + Reördering for better reading * Always add accessor method name to "Too (many/few) arguments" messages even on older perls [BUGFIXES] * Fix unit tests for change of argcheck message format in perl 5.33.6 (RT134074) 0.35 2020-12-28 [CHANGES] * Permit roles to request their methods still be directly invokable, to provide back/forward compatibility during code migration [BUGFIXES] * More sanity checking around `extends` and `implements` keywords * Better complaint about non-invokable methods directly from roles * Workaround for string buffer swipe of stack temporaries in O:P::MOP::Class->add_method() 0.34 2020-11-04 [CHANGES] * Reword the "experimental warning" at the top of the docs [BUGFIXES] * Use named enum for repr type (thanks ilmari) (RT133354) * Use named structs so pahole can see them (thanks ilmari) (RT133355) * Make sure to set the CvGV of embedded CVs of methods imported from roles * Fixed a crash case on Perl 5.18 and 5.20 involving the PadnameOUTER() flag when fixing up PARENT_PAD_INDEX() (RT132814) 0.33 2020-09-16 [CHANGES] * Roles can now have data slots * `use v5.14` in all files [BUGFIXES] * pp_sv() needs to EXTEND() before PUSH() * Avoid SEGV if ->begin_class is called without PL_parser set (RT133258) * Defer sealing of derived classes until their base class is sealed (RT133190) 0.32 2020-08-19 [CHANGES] * Initial attempt at roles, which can compose new methods into classes. No support yet for roles with data slots * Support compiletime declaration of `requires` methods 0.31 2020-06-30 [CHANGES] * Don't emit a named method for BUILD blocks + Enables subclassing of Moo classes * Begin documenting the (double-experimental) Object::Pad::MOP API [BUGFIXES] * Parser fix for `class NAME VERSION extends ...` without a linefeed (RT132903) * Placate some compiler warnings of uninitialised values * Find a different way to trigger class sealing which doesn't depend on `free` magic of hinthash values, in order to avoid core perl bug https://github.com/Perl/perl5/issues/17903 * Various small fixes to keep -DDEBUGGING perl happy 0.30 2020-06-20 [CHANGES] * Make generated writer methods return $self, for convenient chaining * Apply argument checking to generated accessor methods * Improved performance of constructor, by storing BUILD blocks directly in the class metadata, avoiding runtime method lookup * Updates for XS::Parse::Sublike 0.10 0.29 2020-06-16 [CHANGES] * Accept :override attribute on methods * Accept runtime expressions as `has $slot = DEFAULT` * Added Devel::MAT::Dumper::Helper support [BUGFIXES] * Fix various compiler warnings 0.28 2020-06-14 [BUGFIXES] * Declare correct version of XS::Parse::Sublike in configure_requires as we need it at Build.PL time * Fix printf formats for SLOTOFFSET arguments * Fix github URL in docs 0.27 2020-06-13 [CHANGES] * Support :reader :writer :mutator attributes on slot variables, to automatically generate accessor methods for them * Accept `BUILD { ... }` without the `method` keyword. Suggest this as usual style. Discourage the `method` form. * Updated advice to module authors on how to declare package/VERSION sufficient to keep toolchain modules happy 0.26 2020-04-27 [CHANGES] * Sanity-checking of ->add_slot names * Permit "anonymous" slots with sigils but no names; accessed only via $slotmeta->value * Warn when $self lexical is shadowed (partly fixes RT132428) [BUGFIXES] * Ensure to run GETMAGIC on ->add_slot names * Removed extranous and undeclared `use Devel::MAT::Dumper` from unit tests 0.25 2020-04-24 [CHANGES] * Further expanded the (undocumented) MOP API + Added beginnings of O:P:MOP::Class, O:P:MOP::Slot sufficient to create classes and add slots and methods to them [BUGFIXES] * Ensure that anonymous methods can perform lexical captures from outside scopes (RT132178) * Ensure that subclasses without BUILD methods don't double invoke that of their superclass * Ensure a method's optree begins with OP_NEXTSTATE as debug tools may rely on this (RT132413) * Don't rely on Test::MemoryGrowth at test time, so tests can still pass on non-Linux 0.24 (bad MANIFEST) 0.23 2020-04-21 [CHANGES] * Add another new :repr type of autoselect, which chooses the most appropriate type for the situation 0.22 2020-04-17 [CHANGES] * Allow classes to request their representation type using new class attribute :repr - choices are native(default), HASH, magic 0.21 2020-04-15 [CHANGES] * Added Object::Pad->begin_class() (undocumented) (mostly fixes RT132337 and RT132338) * Improved performance of OP_SLOTPAD * Handle UTF-8 package names more correctly [BUGFIXES] * Fix memory leaks related to OP_METHSTART (RT132332) 0.20 2020-04-10 [CHANGES] * Update suggested style for methods with signatures to put whitespace before open paren * Use core's `feature "indirect"` in preference to indirect.pm where available (perl 5.31.9 onwards) [BUGFIXES] * Fix for segfault when compiling inner anon methods inside other methods (RT132321) 0.19 2020-04-04 [CHANGES] * More sanity checking of HASH-based foreign superclass constructor * More unit testing of reliable destruction of constructor and BUILDARGS arguments [BUGFIXES] * Allow classic Perl superclass constructors to invoke methods on instances (RT132263) * Fix SP pointer discipline during method calls in generated constructor 0.18 2020-03-30 [CHANGES] * Implement the BUILDARGS part of constructor protocol * Apply the :method attribute to all method subs 0.17 2020-03-27 [CHANGES] * Add some style suggestions for code authors using the module * Updated for XS::Parse::Sublike 0.06 API [BUGFIXES] * Create a new slot pad for every method instead of reusing one; avoids some refcounting issues that cause segfaults (RT132249) 0.16 2020-03-26 [CHANGES] * Always generate the slots AV even with no slots because otherwise METHSTART gets upset about no-slot subclasses * Capture the `async method` unit tests from Future-AsyncAwait [BUGFIXES] * Ensure that object refs or slot values don't hang around in method lexicals after they've returned (RT132228) * Use OP_STUB to ensure no-slot subclasses don't crash OP_PUSH on perls 5.18 to 5.22 (thanks ilmari) 0.15 2020-03-19 [CHANGES] * Use XS::Parse::Sublike 0.04 + Provides bugfixes for parameters in sub signatures with defaults [BUGFIXES] * Handle class-scoped regular lexicals and outer captures 0.14 2020-03-17 [CHANGES] * Use XS::Parse::Sublike 0.02's `register_xs_parse_sublike()` ability 0.13 2020-03-15 [CHANGES] * Use XS::Parse::Sublike for the bulk of the `method` parsing work [BUGFIXES] * Inline the code for Perl_package_version() because it isn't exported API so not actually visible on non-ELF platforms 0.12 2020-03-10 [CHANGES] * Minor adjustments to order of operations in method keyword parsing to closer match core's parser [BUGFIXES] * Rename t/80dynamically+Object::Pad.t to use a hyphen because colons confuse MSWin32 (RT132087) 0.11 2020-03-07 [CHANGES] * More efficient method enter on perl 5.22 onwards by detecting which slots are being used per method and only set those ones up [BUGFIXES] * Fix some C99isms in XS code (RT131417) * Avoid a C++-style comment in hax/lexer-additions.c.inc 0.10 2019-11-20 [BUGFIXES] * Back-compat fixes for perl 5.16, 5.20 0.09 2019-11-20 [CHANGES] * Accept optional version number for `class` declaration and `extends` base class * Provide a default `BUILDALL` method which invokes all the available `BUILD` methods of component packages * Unit-test that Syntax::Keyword::Dynamically works correctly with object slots and document the fact that `local` does not [BUGFIXES] * Generate the constructor as an XSUB so we can find the superclass for derived subclasses better and avoid an infinite recusion loop on double-subclassing. 0.08 2019-11-10 [CHANGES] * Accept `class Name;` to introduce a toplevel class scope * Attempt to `require` the relevant module for `extends` if it doesn't appear to be loaded 0.07 2019-10-25 [CHANGES] * Allow subclassing of non-Object::Pad base classes, provided they are HASH-based [BUGFIXES] * Correct handling of UTF-8 package and slot names (thanks ilmari) 0.06 2019-10-23 [CHANGES] * First attempt at `has $slot = DEFAULT` expressions. Only accepts compiletime constants and only on scalar slots 0.05 2019-10-20 [CHANGES] * Implement single-inheriance subclassing 0.04 2019-10-19 [CHANGES] * Croak on attempts to invoke methods on non-instances, non-derived classes, etc... * Support perls back to 5.16 by various trickery * Store array and hash slot variables via RV so the instances are well-behaved as perl data structures 0.03 2019-10-18 [CHANGES] * Implement sub signatures * Apply automatic pragmata - strict, warnings, -indirect 0.02 2019-10-17 [CHANGES] * `method name :lvalue` and (maybe) other attributes * Support perls back to 5.22 due to wrap_keyword_plugin hax 0.01 2019-10-17 First version, released on an unsuspecting world.