Revision history for Object-Pad
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.