X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FLexical%2FTypes.pm;h=6f9f44d54b4cbdc35d9d75b928124e39a9e0dda5;hb=71c9d96f29f29e1daf8ddad746ac7832a7f931e3;hp=e4d9787aff251867d4df231e7ece47c6879f4b77;hpb=5408252b6868bb3a135da110e381643eb41bb136;p=perl%2Fmodules%2FLexical-Types.git diff --git a/lib/Lexical/Types.pm b/lib/Lexical/Types.pm index e4d9787..6f9f44d 100644 --- a/lib/Lexical/Types.pm +++ b/lib/Lexical/Types.pm @@ -1,25 +1,23 @@ package Lexical::Types; -use 5.008; +use 5.008_003; use strict; use warnings; -use Carp qw/croak/; - =head1 NAME Lexical::Types - Extend the semantics of typed lexicals. =head1 VERSION -Version 0.06 +Version 0.12 =cut our $VERSION; BEGIN { - $VERSION = '0.06'; + $VERSION = '0.12'; } =head1 SYNOPSIS @@ -78,11 +76,15 @@ BEGIN { XSLoader::load(__PACKAGE__, $VERSION); } -=head1 FUNCTIONS +=head1 METHODS + +=head2 C -=head2 C<< import [ as => [ $prefix | $mangler ] ] >> + use Lexical::Types; + use Lexical::Types as => $prefix; + use Lexical::Types as => sub { ... }; # = $mangler -Magically called when writing C. +Magically called when C is encountered. All the occurences of C in the current lexical scope will be changed to call at each run a given method in a given package. The method and package are determined by the parameter C<'as'> : @@ -112,7 +114,9 @@ If the value given is a code reference C<$mangler>, it will be called at compile either an empty list, in which case the current typed lexical definition will be skipped (thus it won't be altered to trigger a run-time hook) ; - use Lexical::Types as => sub { return $_[0] =~ /Str/ ? @_ : () }; + use Lexical::Types as => sub { + return $_[0] =~ /Str/ ? @_ : () + }; my Str $y; # calls Str->TYPEDSCALAR my Int $x; # nothing special @@ -152,7 +156,8 @@ sub import { $as .= '::' if $as !~ /::$/; $hint = _tag(sub { $as . $_[0] }); } else { - croak "Invalid $r reference for 'as'"; + require Carp; + Carp::croak("Invalid $r reference for 'as'"); } } else { $hint = _tag(sub { @_ }); @@ -166,7 +171,9 @@ sub import { =head2 C -Magically called when writing C. + no Lexical::Types; + +Magically called when C is encountered. Turns the pragma off. =cut @@ -222,7 +229,7 @@ If you prefer to use constants rather than creating empty packages, you can repl sub import { my $pkg = caller; - for (qw/Str Int/) { + for (qw) { my $type = __PACKAGE__ . '::' . $_; no strict 'refs'; no warnings 'redefine'; @@ -251,12 +258,21 @@ If you prefer to use constants rather than creating empty packages, you can repl True iff the module could have been built with thread-safety features enabled. +=head2 C + +True iff this module could have been built with fork-safety features enabled. +This will always be true except on Windows where it's false for perl 5.10.0 and below . + =head1 CAVEATS +Using this pragma will cause a slight global slowdown of any subsequent compilation phase that happens anywere in your code - even outside of the scope of use of C - which may become noticeable if you rely heavily on numerous calls to C. + The restrictions on the type (being either a defined package name or a constant) apply even if you use the C<'as'> option to redirect to another package, and are unlikely to find a workaround as this happens deep inside the lexer - far from the reach of an extension. Only one mangler or prefix can be in use at the same time in a given scope. +Typed lexicals declarations that appear in code C'd during the global destruction phase of a spawned thread or pseudo-fork (the processes used internally for the C emulation on Windows) are ignored. + The implementation was tweaked to work around several limitations of vanilla C pragmas : it's thread safe, and doesn't suffer from a C bug that causes all pragmas to propagate into Cd scopes. With 5.8 perls, the pragma does not propagate into C. @@ -264,7 +280,12 @@ This is due to a shortcoming in the way perl handles the hints hash, which is ad =head1 DEPENDENCIES -L 5.8, L. +L 5.8.3. + +A C compiler. +This module may happen to build with a C++ compiler as well, but don't rely on it, as no guarantee is made in this regard. + +L (standard since perl 5.6.0). =head1 SEE ALSO @@ -280,7 +301,8 @@ You can contact me by mail or on C (vincent). =head1 BUGS -Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. +Please report any bugs or feature requests to C, or through the web interface at L. +I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SUPPORT @@ -298,7 +320,7 @@ Thanks Florian Ragwitz for suggesting the use of constants for types. =head1 COPYRIGHT & LICENSE -Copyright 2009 Vincent Pit, all rights reserved. +Copyright 2009,2010,2011,2012,2013,2014 Vincent Pit, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.