Skip to content

Commit

Permalink
- Replaced some expensive Block.call()s with cheaper Block.runs.
Browse files Browse the repository at this point in the history
- As a side-effect, the `Array.sort{}` method is now faster, among other methods.
  • Loading branch information
trizen committed Jun 20, 2015
1 parent e950204 commit 1a44f27
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 16 deletions.
22 changes: 12 additions & 10 deletions lib/Sidef/Types/Array/Array.pm
Original file line number Diff line number Diff line change
Expand Up @@ -513,16 +513,14 @@ package Sidef::Types::Array::Array {

sub map {
my ($self, $code) = @_;

$self->new(map { $code->run($_->get_value); } @{$self});
$self->new(map { $code->run($_->get_value) } @{$self});
}

*collect = \↦

sub grep {
my ($self, $code) = @_;

$self->new(grep { $code->run($_); } map { $_->get_value } @{$self});
$self->new(grep { $code->run($_) } map { $_->get_value } @{$self});
}

*filter = \&grep;
Expand Down Expand Up @@ -697,7 +695,7 @@ package Sidef::Types::Array::Array {

my $x = $self->[0]->get_value;
foreach my $i (1 .. $offset) {
$x = $obj->call($x, $self->[$i]->get_value);
$x = $obj->run($x, $self->[$i]->get_value);
}
$x;
}
Expand Down Expand Up @@ -835,9 +833,14 @@ package Sidef::Types::Array::Array {
my $ref = delete $hash->{$key};
while (my ($key) = CORE::each %{$ref}) {
if ($key eq $__END__) {
$__CALL__
? $code->call($self->new(map { $_->get_value } @{$ref->{$key}}[0 .. $#{$ref->{$key}} - $count]))
: $callback->(@{$ref->{$key}}[0 .. $#{$ref->{$key}} - $count]);
if ($__CALL__) {
$code->run($self->new(map { $_->get_value } @{$ref->{$key}}[0 .. $#{$ref->{$key}} - $count]));
}
else {
$callback->(@{$ref->{$key}}[0 .. $#{$ref->{$key}} - $count]);
}
last;
}
$ref = $ref->{$key};
Expand Down Expand Up @@ -1003,9 +1006,8 @@ package Sidef::Types::Array::Array {
my ($self, $code) = @_;
if (defined $code) {
return
$self->new(sort { $code->call($a, $b) }
$self->new(sort { $code->run($a, $b) }
map { $_->get_value } @{$self});
}
Expand Down
2 changes: 1 addition & 1 deletion lib/Sidef/Types/Glob/File.pm
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ package Sidef::Types::Glob::File {
my @lines;
open(my $fh, '+<:utf8', $self->get_value) || return Sidef::Types::Bool::Bool->false;
while (defined(my $line = <$fh>)) {
push @lines, $code->call(Sidef::Types::String::String->new($line));
push @lines, $code->run(Sidef::Types::String::String->new($line));
}

truncate($fh, 0) || do {
Expand Down
6 changes: 3 additions & 3 deletions lib/Sidef/Types/Hash/Hash.pm
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ package Sidef::Types::Hash::Hash {
my $key_obj = Sidef::Types::String::String->new($key);
my $val_obj = $value->get_value;

if ($code->call($key_obj, $val_obj)) {
if ($code->run($key_obj, $val_obj)) {
$callback->($key, $val_obj);
}
}
Expand All @@ -170,7 +170,7 @@ package Sidef::Types::Hash::Hash {
Sidef::Variable::Variable->new(
name => '',
type => 'var',
value => $code->call(Sidef::Types::String::String->new($key), $value->get_value)
value => $code->run(Sidef::Types::String::String->new($key), $value->get_value)
);
}

Expand Down Expand Up @@ -305,7 +305,7 @@ package Sidef::Types::Hash::Hash {

my @array;
while (my ($key, $value) = CORE::each %{$self->{data}}) {
push @array, [$key, $code->call(Sidef::Types::String::String->new($key), $value->get_value)];
push @array, [$key, $code->run(Sidef::Types::String::String->new($key), $value->get_value)];
}

my $method = '<=>';
Expand Down
4 changes: 2 additions & 2 deletions lib/Sidef/Types/String/String.pm
Original file line number Diff line number Diff line change
Expand Up @@ -508,7 +508,7 @@ package Sidef::Types::String::String {
return __PACKAGE__->new($self->get_value =~ s{$search}{$code->get_value}eer);
}

__PACKAGE__->new($self->get_value =~ s{$search}{$code->call(_get_captures($self->get_value))}er);
__PACKAGE__->new($self->get_value =~ s{$search}{$code->run(_get_captures($self->get_value))}er);
}

sub gesub {
Expand All @@ -526,7 +526,7 @@ package Sidef::Types::String::String {
}

my $value = $self->get_value;
__PACKAGE__->new($value =~ s{$search}{$code->call(_get_captures($value))}ger);
__PACKAGE__->new($value =~ s{$search}{$code->run(_get_captures($value))}ger);
}

sub glob {
Expand Down

0 comments on commit 1a44f27

Please sign in to comment.