This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perlhist for 5.19.0
[perl5.git] / mad / Nomad.pm
old mode 100755 (executable)
new mode 100644 (file)
index c20d8b4..eaac474
@@ -440,6 +440,7 @@ sub newtype {
 sub madness {
     my $self = shift;
     my @keys = split(' ', shift);
+    @keys = map { $_ eq 'd' ? ('k', 'd') : $_ } @keys;
     my @vals = ();
     for my $key (@keys) {
        my $madprop = $self->{mp}{$key};
@@ -519,13 +520,8 @@ sub hash {
     for my $kid (@{$$self{Kids}}) {
        my ($k,$v) = $kid->pair($self, @_);
        $firstthing ||= $k;
-       if ($k =~ /^[_#]$/) {   # rekey whitespace according to preceding entry
-           $k .= $lastthing;   # (which is actually the token the whitespace is before)
-       }
-       else {
-           $k .= 'x' while exists $hash{$k};
-           $lastthing = $k;
-       }
+        $k .= 'x' while exists $hash{$k};
+        $lastthing = $k;
        $hash{$k} = $v;
     }
     $hash{FIRST} = $firstthing;
@@ -678,7 +674,7 @@ sub ast {
        return P5AST::listop->new(Kids => [@before,@retval]);
     }
 
-    push @retval, $self->madness('o ( [ {');
+    push @retval, $self->madness('o ( [ {');
 
     my @newkids;
     for my $kid (@{$$self{Kids}}) {
@@ -1687,7 +1683,10 @@ sub ast {
     if ($rfirst[-1]->uni ne $llast[-1]->uni) {
        push @newkids, @rfirst;
     }
-
+    # remove the fake '\n' if /e and '#' in replacement.
+    if (@mods and $mods[0] =~ m/e/ and ($self->madness('R'))[0]->uni =~ m/#/) {
+        unshift @rlast, bless {}, 'chomp'; # hack to remove '\n'
+    }
     push @newkids, $bits->{repl}, @rlast, @mods;
 
     my $retval = $self->newtype->new(Kids => [@newkids]);
@@ -2199,16 +2198,6 @@ sub ast {
 package PLXML::op_unpack;
 package PLXML::op_pack;
 package PLXML::op_split;
-
-sub ast {
-    my $self = shift;
-    my $results = $self->SUPER::ast(@_);
-    if (my @dest = $self->madness('R')) {
-       return PLXML::op_aassign->newtype->new(Kids => [@dest, $self->madness('ox'), $results]);
-    }
-    return $results;
-}
-
 package PLXML::op_join;
 package PLXML::op_list;
 
@@ -2849,6 +2838,7 @@ package PLXML::op_enterwrite;
 package PLXML::op_leavewrite;
 package PLXML::op_prtf;
 package PLXML::op_print;
+package PLXML::op_say;
 package PLXML::op_sysopen;
 package PLXML::op_sysseek;
 package PLXML::op_sysread;