Changeset 25581 for lang/perl/Shika

Show
Ignore:
Timestamp:
12/01/08 17:19:35 (6 years ago)
Author:
tokuhirom
Message:

performance tuning

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Shika/trunk/lib/Shika.pm

    r25579 r25581  
    6363        next unless $klass->can('meta'); 
    6464        my %has_map = %{ $klass->meta->{has} }; 
    65         # set default values 
    6665        while (my ($name, $has) = each %has_map) { 
    67             next if     exists $args->{$name}; 
    68             next unless exists $has->{default} && $has->{default}; 
    69             next if     exists $has->{lazy} && $has->{lazy}; 
    70             next if     exists $has->{lazy_build} && $has->{lazy_build}; 
    71             my $code = $has->{default}; 
    72             $args->{$name} = ref($code) eq 'CODE' ? $code->() : $code; 
    73         } 
    74         # process coerce 
    75         while (my ($name, $has) = each %has_map) { 
    76             next unless exists $args->{$name}; 
    77             next unless exists $has->{coerce} && $has->{coerce}; 
    78             Carp::confess "does not pass the type constraint because: Validation failed for '$has->{isa}' failed $name" 
    79                 unless Shika::Util::TypeConstraints::check_valid($class, $has, undef, $args->{$name}); 
    80         } 
    81         # process 'required' 
    82         while (my ($name, $has) = each %has_map) { 
    83             next if     exists $args->{$name}; 
    84             next unless $has->{required}; 
    85             Carp::croak "missing parameter $name for $class"; 
     66            # set default values 
     67            if ( 
     68                (! (exists $args->{$name}))                           && 
     69                   (exists $has->{default}    && $has->{default}   )  && 
     70                (! (exists $has->{lazy}       && $has->{lazy}      )) && 
     71                (! (exists $has->{lazy_build} && $has->{lazy_build})) 
     72            ) { 
     73                my $code = $has->{default}; 
     74                $args->{$name} = ref($code) eq 'CODE' ? $code->() : $code; 
     75            } 
     76 
     77            # process coerce 
     78            if ( $args->{$name} && exists $has->{coerce} && $has->{coerce} ) { 
     79                Carp::confess "does not pass the type constraint because: Validation failed for '$has->{isa}' failed $name" 
     80                    unless Shika::Util::TypeConstraints::check_valid($class, $has, undef, $args->{$name}); 
     81            } 
     82 
     83            # process 'required' 
     84            if (!$args->{$name} && $has->{required}) { 
     85                Carp::croak "missing parameter $name for $class"; 
     86            } 
    8687        } 
    8788    }