Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Eradicate internal RWPAIR sub now Pair.new is fast
  • Loading branch information
lizmat committed Oct 21, 2015
1 parent c6326d4 commit 3087de7
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 29 deletions.
7 changes: 0 additions & 7 deletions src/core/Any.pm
Expand Up @@ -482,13 +482,6 @@ multi sub item(\x) { my $ = x }
multi sub item(|c) { my $ = c.list }
multi sub item(Mu $a) { $a }

sub RWPAIR(\k, \v) { # internal fast pair creation
my \p := nqp::create(Pair);
nqp::bindattr(p, Pair, '$!key', k);
nqp::bindattr(p, Pair, '$!value', v);
p
}

sub SLICE_HUH(\SELF, @nogo, %d, %adv) {
@nogo.unshift('delete') # recover any :delete if necessary
if @nogo && @nogo[0] ne 'delete' && %adv.EXISTS-KEY('delete');
Expand Down
44 changes: 22 additions & 22 deletions src/core/SLICE.pm
Expand Up @@ -44,7 +44,7 @@ sub SLICE_ONE_LIST(\SELF,$one,*%adv) {
my $p := DELETEKEY($d,'p');
if nqp::elems($d) == 0 {
!$p || $wasthere
?? RWPAIR($one, !($wasthere ?^ $exists) )
?? Pair.new($one, !($wasthere ?^ $exists) )
!! ();
}
else {
Expand All @@ -70,7 +70,7 @@ sub SLICE_ONE_LIST(\SELF,$one,*%adv) {
my $p := DELETEKEY($d,'p');
if nqp::elems($d) == 0 {
!$p || SELF.EXISTS-POS($one)
?? RWPAIR($one, SELF.DELETE-POS($one))
?? Pair.new($one, SELF.DELETE-POS($one))
!! ();
}
else {
Expand Down Expand Up @@ -124,7 +124,7 @@ sub SLICE_ONE_LIST(\SELF,$one,*%adv) {
my $p := DELETEKEY($d,'p');
if nqp::elems($d) == 0 {
!$p || $wasthere
?? RWPAIR($one, !( $wasthere ?^ $exists ))
?? Pair.new($one, !( $wasthere ?^ $exists ))
!! ();
}
else {
Expand All @@ -150,7 +150,7 @@ sub SLICE_ONE_LIST(\SELF,$one,*%adv) {
my $p := DELETEKEY($d,'p');
if nqp::elems($d) == 0 { # :!delete?:p(0|1)
!$p || SELF.EXISTS-POS($one)
?? RWPAIR($one, SELF.AT-POS($one))
?? Pair.new($one, SELF.AT-POS($one))
!! ();
}
else {
Expand Down Expand Up @@ -232,7 +232,7 @@ sub SLICE_MORE_LIST(\SELF,$more,*%adv) {
$more.cache.flatmap( {
SELF.DELETE-POS($_) if $wasthere = SELF.EXISTS-POS($_);
next unless !$p || $wasthere;
RWPAIR($_,!($wasthere ?^ $exists));
Pair.new($_,!($wasthere ?^ $exists));
} ).eager.list;
}
else {
Expand Down Expand Up @@ -265,10 +265,10 @@ sub SLICE_MORE_LIST(\SELF,$more,*%adv) {
$p
?? $more.cache.flatmap( {
next unless SELF.EXISTS-POS($_);
RWPAIR($_, SELF.DELETE-POS($_));
Pair.new($_, SELF.DELETE-POS($_));
} ).eager.list
!! $more.cache.flatmap( {
RWPAIR($_, SELF.DELETE-POS($_))
Pair.new($_, SELF.DELETE-POS($_))
} ).eager.list;
}
else {
Expand Down Expand Up @@ -338,10 +338,10 @@ sub SLICE_MORE_LIST(\SELF,$more,*%adv) {
$p
?? $more.cache.flatmap( {
next unless SELF.EXISTS-POS($_);
RWPAIR( $_, $exists );
Pair.new( $_, $exists );
} ).eager.list
!! $more.cache.flatmap( {
RWPAIR( $_, !( SELF.EXISTS-POS($_) ?^ $exists ) )
Pair.new( $_, !( SELF.EXISTS-POS($_) ?^ $exists ) )
} ).eager.list;
}
else {
Expand Down Expand Up @@ -374,10 +374,10 @@ sub SLICE_MORE_LIST(\SELF,$more,*%adv) {
$p
?? $more.cache.flatmap( {
next unless SELF.EXISTS-POS($_);
RWPAIR($_, SELF.AT-POS($_));
Pair.new($_, SELF.AT-POS($_));
} ).eager.list
!! $more.cache.flatmap( {
RWPAIR( $_, SELF.AT-POS($_) )
Pair.new( $_, SELF.AT-POS($_) )
} ).eager.list;
}
else {
Expand Down Expand Up @@ -461,7 +461,7 @@ sub SLICE_ONE_HASH(\SELF,$one,*%adv) {
my $p := DELETEKEY($d,'p');
if nqp::elems($d) == 0 {
!$p || $wasthere
?? RWPAIR($one, !($wasthere ?^ $exists) )
?? Pair.new($one, !($wasthere ?^ $exists) )
!! ();
}
else {
Expand All @@ -487,7 +487,7 @@ sub SLICE_ONE_HASH(\SELF,$one,*%adv) {
my $p := DELETEKEY($d,'p');
if nqp::elems($d) == 0 {
!$p || SELF.EXISTS-KEY($one)
?? RWPAIR($one, SELF.DELETE-KEY($one))
?? Pair.new($one, SELF.DELETE-KEY($one))
!! ();
}
else {
Expand Down Expand Up @@ -541,7 +541,7 @@ sub SLICE_ONE_HASH(\SELF,$one,*%adv) {
my $p := DELETEKEY($d,'p');
if nqp::elems($d) == 0 {
!$p || $wasthere
?? RWPAIR($one, !( $wasthere ?^ $exists ))
?? Pair.new($one, !( $wasthere ?^ $exists ))
!! ();
}
else {
Expand All @@ -567,7 +567,7 @@ sub SLICE_ONE_HASH(\SELF,$one,*%adv) {
my $p := DELETEKEY($d,'p');
if nqp::elems($d) == 0 { # :!delete?:p(0|1)
!$p || SELF.EXISTS-KEY($one)
?? RWPAIR($one, SELF.AT-KEY($one))
?? Pair.new($one, SELF.AT-KEY($one))
!! ();
}
else {
Expand Down Expand Up @@ -649,7 +649,7 @@ sub SLICE_MORE_HASH(\SELF,$more,*%adv) {
$more.cache.flatmap( {
SELF.DELETE-KEY($_) if $wasthere = SELF.EXISTS-KEY($_);
next unless !$p || $wasthere;
RWPAIR($_,!($wasthere ?^ $exists));
Pair.new($_,!($wasthere ?^ $exists));
} ).eager.list;
}
else {
Expand Down Expand Up @@ -682,10 +682,10 @@ sub SLICE_MORE_HASH(\SELF,$more,*%adv) {
$p
?? $more.cache.flatmap( {
next unless SELF.EXISTS-KEY($_);
RWPAIR($_, SELF.DELETE-KEY($_));
Pair.new($_, SELF.DELETE-KEY($_));
} ).eager.list
!! $more.cache.flatmap( {
RWPAIR($_, SELF.DELETE-KEY($_))
Pair.new($_, SELF.DELETE-KEY($_))
} ).eager.list;
}
else {
Expand Down Expand Up @@ -755,10 +755,10 @@ sub SLICE_MORE_HASH(\SELF,$more,*%adv) {
$p
?? $more.cache.flatmap( {
next unless SELF.EXISTS-KEY($_);
RWPAIR( $_, $exists );
Pair.new( $_, $exists );
} ).eager.list
!! $more.cache.flatmap( {
RWPAIR( $_, !( SELF.EXISTS-KEY($_) ?^ $exists ) )
Pair.new( $_, !( SELF.EXISTS-KEY($_) ?^ $exists ) )
} ).eager.list;
}
else {
Expand Down Expand Up @@ -791,10 +791,10 @@ sub SLICE_MORE_HASH(\SELF,$more,*%adv) {
$p
?? $more.cache.flatmap( {
next unless SELF.EXISTS-KEY($_);
RWPAIR($_, SELF.AT-KEY($_));
Pair.new($_, SELF.AT-KEY($_));
} ).eager.list
!! $more.cache.flatmap( {
RWPAIR( $_, SELF.AT-KEY($_) )
Pair.new( $_, SELF.AT-KEY($_) )
} ).eager.list;
}
else {
Expand Down

0 comments on commit 3087de7

Please sign in to comment.