Revision history for Object-Pad
0.45 2021-07-17
[BUGFIXES]
* Don't give role embedding information a pad name or
Future::AsyncAwait will break it (RT137649)
* Make sure that `parammeta->is_weak` is initialised even for params
applied via roles (RT137751)
0.44 2021-07-15
[CHANGES]
* Added `:weak` slot attribute
* Adjusted some documentation headings for better generation of HTML
anchors on metacpan.org
Development time for this release was sponsored by Oetiker+Partner AG
0.43 2021-07-03
[CHANGES]
* Initial implementation of `ADJUST` blocks, without params
* Better docs about ordering of stages of constructor
* Initial attempt at (temporary) `:struct(params)` class attribute
* Add O:P:MOP::Class and ::Slot support for slot params
Development time for this release was sponsored by Oetiker+Partner AG
0.42 2021-07-01
[CHANGES]
* Expose `$slotmeta->has_param` API
* Clarify in docs that `:param` happens before `BUILD`
* Remove the word "very" from "very experimental" in introduction
docs paragraph
* Add `$classmeta->slots`
[BUGFIXES]
* Make sure to embed params from roles correctly (RT136869)
* Use `XS_INTERNAL()` rather than `static XS()` to (maybe?) keep
cygwin happy
Development time for this release was sponsored by Oetiker+Partner AG
0.41 2021-06-21
[CHANGES]
* Recognise `:param` on slots, assign automatically from constructor,
check for required parameters
* Accept `isa` as a synonym for `extends`, and `does` as a synonym
for `implements`
* No longer allow `method BUILD`
[BUGFIXES]
* Complain about a lack of NAME for `class` (related to RT136798)
Development time for this release was sponsored by Oetiker+Partner AG
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.