Revision history for Function-Parameters
2.001002 2017-11-09
- Fix crash when Function::Parameters is loaded at runtime by
multiple threads (a stack overflow due to infinite recursion).
This is arguably a core bug (#132413). The current workaround
employed by Function::Parameters slightly abuses an internal perl
mutex meant for something else (protecting op checkers), but it
fixes the issue on perls v5.16 .. v5.26.
v5.14 doesn't have this API yet, so the workaround is not thread
safe there. It is technically possible to still run into this issue
if two threads initialize Function::Parameters at the exact same
moment (I haven't managed to reproduce this yet, so hopefully it's
unlikely in practice).
It is possible to completely avoid the problem on all versions of
perl and Function::Parameters by making sure the module is loaded
before the first thread is created.
2.001001 2017-07-12
- fix duplicate type check on invocant:
method foo(T $self: $x) { ... }
# every call to foo() performs T->check($self) twice
- clean up how type errors refer to parameters (now it's
"parameter $N" for non-invocant parameters and "invocant $N" for
invocants (or just "invocant" if there is exactly one))
- rewrite pragma implementation and the way %^H is used
- remove several internal package variables
2.000007 2017-05-15
- no real code changes
- extend bug #129090 workaround to perl 5.25.5
- try to detect broken Moose installs earlier
- fix declaration of developer dependencies
2.000006 2017-04-16
- work around core bug #129090 / #131146 in perl 5.22 and 5.24:
perl -e 'use Function::Parameters; \&f; fun f() { eval "" }' hangs
in the compiler (also happens with perl -d or Devel::Cover instead
of eval) (gh #29)
2.000003 2017-03-31
- fix a bug where method modifiers would inadvertently declare subs
(e.g. 'before foo() {}' acting like 'sub foo;
BEGIN { &before('foo', sub {}) }'), breaking Pkg->can($method) and
thus Class::Method::Modifiers (RT #120804)
- make method modifiers take effect at runtime because otherwise
you'd have to wrap every with()/extends() in a BEGIN block to make
consumed/inherited methods visible to modifiers (RT #120804)
- make method modifiers require a name (what would an anonymous
modifier modify?)
- (hopefully) improve the error message you get for trying to add any
parameters after a slurpy
2.000002 2017-03-27
- default to strict mode
- allow types with multiple arguments (e.g. 'Tuple[Int, String]')
- implement new 'auto' type reifier and use it by default
- allow multiple invocants
- support custom installers
- implement Moo/Moose-style method modifiers
- rework and extend import syntax
- make implicit $self available in default arguments
- call type reifiers from correct package and remove 2nd arg
workaround
- remove :(...) prototype syntax
- remove undocumented 'attrs' option
- drop internal Moo dependency
1.0706 2017-03-17
- don't require . in @INC during install
- improve internal code generation functions used on perls before
5.22
1.0705 2016-06-11
- simplify internals
1.0704 2016-02-13
- guard against broken Mooses in Makefile.PL
- remove last internal use of glob()
1.0703 2016-01-05
- fix line numbers in runtime errors caused by calls with bad
arguments
(Carp trying to be smart and skipping over "internal" callers)
1.0702 2015-12-21
- fix parsing of _ in prototypes
(caused bogus "Illegal character after '_' in prototype" warnings)
1.0701 2015-12-04
- remove old "bare" import syntax:
use Function::Parameters 'foo', 'bar';
# equivalent to
# use Function::Parameters { foo => 'function', bar => 'method' };
(marked as deprecated in 0.06, no longer documented since 1.00)
1.0605 2015-04-26
- update metacpan links
- remove wonky test
1.0604 2015-04-22
- new explicit "lax" mode
- fix info() with taint mode on (gh pr #12)
- don't hide syntax errors that are followed by a parameter list with
types (gh #15)
- compatibility with perl v5.21.11 (#103843)
1.0603 2014-11-25
- some documentation changes
- compatibility with perl development versions
1.0602 2014-10-21
- fix warnings under perl5.21 (causes harmless test failure)
1.0601 2014-10-20
- allow nameless parameters for arguments that should be ignored
- fix string comparison bug (":lvaluefoobar" treated as ":lvalue",
etc)
- explicitly disallow $_/@_/%_ as parameters
- change "Not enough" to "Too few" in error message to match perl
- don't parse $#foo as a sigil plus comment
- remove implicitly optional parameters ("fun foo($x = 42, $y)" used
to be equivalent to "fun foo($x = 42, $y = undef)")
1.0503 2014-10-17
- skip initializing parameters if the default argument is undef
(don't generate '$x = undef if @_ < 1' for 'fun ($x = undef)')
1.0502 2014-10-16
- fix bug that prevents building with threaded perls
1.0501 2014-10-13
- support :prototype(...) for setting the prototype
- allow fun foo($x =, $y =) (empty default arg equivalent to
specifying undef)
1.0404 2014-10-13
- fix segfault on 'fun foo(A[[' (malformed type)
1.0403 2014-10-12
- general overhaul for 5.18 and 5.20 support
- be more flexible about strict 'vars' error message in tests
(#99100)
1.0402 2014-09-01
- fix #92871: don't access dead stack frames on error
- fix #95803: don't dereference NULL
1.0401 2013-10-09
- enable type checks by default
1.0301 2013-09-16
- support 'defaults' to base keywords on existing keyword types
- 'check_argument_count' no longer controls type checks
- new 'check_argument_types' property controls type checks
- new 'strict' property does what 'check_argument_count' used to
- new 'runtime' property lets you define functions at runtime
- some more tests
1.0202 2013-08-28
- make t/foreign/Fun/name.t less fragile to support newer Carp
- support older Moo without ->meta support
1.0201 2013-08-13
- custom (per-keyword) type reification
- actually use documented defaults for custom keywords
1.0104 2013-06-16
- support unicode in custom keywords
- actually validate default attributes
1.0103 2013-06-09
- properly allow non-moose-based custom type constraints (#85851)
1.0102 2013-03-08
- prepare for internals changes in the upcoming 5.18 release
(https://rt.cpan.org/Ticket/Display.html?id=83439)
- only allocate memory after recognizing a keyword like 'fun'
(might speed up parsing a little)
1.0101 2013-02-05
- new reflection API to inspect parameter information of functions
- Moose types in parameter lists
- more tests
1.0004 2012-11-26
- fix test relying on hash ordering
1.0003 2012-11-19
- clean up internals
- fix build errors on some platforms
- fix module metadata
- some more tests
1.00 2012-11-01
- add named parameters with ':$foo, :$bar' syntax
- rewrite documentation
- more tests (some of them copied from similar modules on CPAN)
0.10 2012-10-21
- add ':strict' import target
- support $invocant: parameter syntax
0.09 2012-10-14
- fix wrong line number for statement immediately following a
function
0.08 2012-07-19
- support UTF-8 in function/parameter names
- better detection of invalid prototypes
0.07 2012-06-25
- completely rework internals to generate optrees directly
(no more generating/reparsing source)
- simplify / fewer dependencies
- new feature: default arguments (on by default)
- new feature: strict argument count checks (off by default)
enabled by "*_strict" variants of symbolic types
0.06 2012-06-19
- complete rewrite in XS
- require perl 5.14+
- hopefully fix bug where it would get the line numbers wrong
- we're a lexical pragma now; remove import_into()
- more fine-grained control over behavior of generated keywords:
* function name can be optional/required/prohibited
* invocant name can be any variable, not just $self
* default attributes (and method now defaults to ':method')
0.05 2011-08-02
- complete rewrite
- hopefully fix bug where it would swallow compilation errors or get
the line numbers wrong
- method keyword!
- more flexible keyword customization
0.04 2010-03-03
- allow renaming the function keyword
- provide import_into so you can mess with other packages
0.03 2009-12-14
First version, released on an unsuspecting world.