PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB` # INTERNAL MODULE: guts for ScalarRef type from Types::Standard. package Types::Standard::ScalarRef; use 5.008001; use strict; use warnings; BEGIN { $Types::Standard::ScalarRef::AUTHORITY = 'cpan:TOBYINK'; $Types::Standard::ScalarRef::VERSION = '2.006000'; } $Types::Standard::ScalarRef::VERSION =~ tr/_//d; use Types::Standard (); use Types::TypeTiny (); sub _croak ($;@) { require Error::TypeTiny; goto \&Error::TypeTiny::croak } no warnings; sub __constraint_generator { return Types::Standard::ScalarRef unless @_; my $param = shift; Types::TypeTiny::is_TypeTiny( $param ) or _croak( "Parameter to ScalarRef[`a] expected to be a type constraint; got $param" ); return sub { my $ref = shift; $param->check( $$ref ) || return; return !!1; }; } #/ sub __constraint_generator sub __inline_generator { my $param = shift; return unless $param->can_be_inlined; return sub { my $v = $_[1]; my $param_check = $param->inline_check( "\${$v}" ); "(ref($v) eq 'SCALAR' or ref($v) eq 'REF') and $param_check"; }; } sub __deep_explanation { my ( $type, $value, $varname ) = @_; my $param = $type->parameters->[0]; for my $item ( $$value ) { next if $param->check( $item ); return [ sprintf( '"%s" constrains the referenced scalar value with "%s"', $type, $param ), @{ $param->validate_explain( $item, sprintf( '${%s}', $varname ) ) }, ]; } # This should never happen... return; # uncoverable statement } #/ sub __deep_explanation sub __coercion_generator { my ( $parent, $child, $param ) = @_; return unless $param->has_coercion; my $coercable_item = $param->coercion->_source_type_union; my $C = "Type::Coercion"->new( type_constraint => $child ); if ( $param->coercion->can_be_inlined and $coercable_item->can_be_inlined ) { $C->add_type_coercions( $parent => Types::Standard::Stringable { my @code; push @code, 'do { my ($orig, $return_orig, $new) = ($_, 0);'; push @code, 'for ($$orig) {'; push @code, sprintf( '++$return_orig && last unless (%s);', $coercable_item->inline_check( '$_' ) ); push @code, sprintf( '$new = (%s);', $param->coercion->inline_coercion( '$_' ) ); push @code, '}'; push @code, '$return_orig ? $orig : \\$new'; push @code, '}'; "@code"; } ); } #/ if ( $param->coercion->...) else { $C->add_type_coercions( $parent => sub { my $value = @_ ? $_[0] : $_; my $new; for my $item ( $$value ) { return $value unless $coercable_item->check( $item ); $new = $param->coerce( $item ); } return \$new; }, ); } #/ else [ if ( $param->coercion->...)] return $C; } #/ sub __coercion_generator 1;