Changeset 21619 for perl5

Show
Ignore:
Timestamp:
07/30/08 00:04:19 (4 months ago)
Author:
fglock
Message:

[PCR] 0.36

Location:
perl5/Pugs-Compiler-Rule
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • perl5/Pugs-Compiler-Rule/Changes

    r21578 r21619  
     10.36  2008-07-28 
     2- fixed quoting in perl 5 regex emitter 
     3 
    140.35  2008-07-27 
    25- fixed var name mangler 
  • perl5/Pugs-Compiler-Rule/lib/Pugs/Compiler/RegexPerl5.pm

    r15778 r21619  
    1414# http://www.foo.be/docs/tpj/issues/vol2_3/tpj0203-0002.html 
    1515# is a good reference on the use of pos() 
     16 
     17sub _quote_rule { 
     18    my $rule_source = shift; 
     19    return 'm/' . $rule_source . '/' unless $rule_source =~ m{/}; 
     20    return 'm{' . $rule_source . '}' unless $rule_source =~ m/{/ || $rule_source =~ m/}/; 
     21    return 'm!' . $rule_source . '!' unless $rule_source =~ m/!/; 
     22    return 'm[' . $rule_source . ']' unless $rule_source =~ m/\[/ || $rule_source =~ m/\]/; 
     23    return 'm^' . $rule_source . '^' unless $rule_source =~ m/^/; 
     24} 
    1625 
    1726sub compile { 
     
    4453      '; 
    4554    $self->{perl5} =  
    46 q(do { 
     55q!do { 
    4756  my $rule;  
    4857  $rule = sub { # grammar, string, state, args 
     
    6069    pos(${$_[1]}) = $_[3]{p} 
    6170      if defined $_[3]{p}; 
    62     $bool = \( ${$_[1]} =~ /) . $rule_source . q(/g \) ? 1 : 0; ) .  
    63     $captures . q( 
     71    $bool = ( ${$_[1]} =~ ! 
     72        . _quote_rule( $rule_source )  
     73        . q(g \) ? 1 : 0; )  
     74        . $captures  
     75        . q! 
    6476  } 
    6577   
    6678  if ( defined $_[3]{p} ) { 
    6779      pos(${$_[1]}) = $_[3]{p}; 
    68       $bool = \( ${$_[1]} =~ /\G\(?:) . $rule_source . q(\)/ \) ? 1 : 0; ) .  
    69       $captures . q( 
     80      $bool = ( ${$_[1]} =~ !  
     81        . _quote_rule(  
     82                q(\\G\(?:) . $rule_source . ')'  
     83          )  
     84        . ' ) ? 1 : 0; '  
     85        . $captures  
     86        . q! 
    7087  } 
    7188  else { 
    72       $bool = \( ${$_[1]} =~ /) . $rule_source . q(/ \) ? 1 : 0; ) .  
    73       $captures . q( 
     89      $bool = ( ${$_[1]} =~ ! 
     90      . _quote_rule( $rule_source )  
     91      . q( \) ? 1 : 0; )  
     92      . $captures . q( 
    7493  } 
    7594}; 
     
    7897    # print 'rule perl5: ', do{use Data::Dumper; Dumper($self->{perl5})}; 
    7998 
    80     local $@; 
    81     $self->{code} = eval  
    82         $self->{perl5}; 
    83     die "Error in evaluation: $@\nSource:\n$self->{perl5}\n" if $@; 
    84  
     99    unless ( $param->{compile_only} ) { 
     100        local $@; 
     101        $self->{code} = eval  
     102            $self->{perl5}; 
     103        die "Error in evaluation: $@\nSource:\n$self->{perl5}\n" if $@; 
     104    } 
     105     
    85106    bless $self, 'Pugs::Compiler::Regex'; 
    86107} 
  • perl5/Pugs-Compiler-Rule/lib/Pugs/Compiler/Rule.pm

    r21578 r21619  
    55package Pugs::Compiler::Rule; 
    66 
    7 our $VERSION = '0.35'; 
     7our $VERSION = '0.36'; 
    88 
    99use base 'Pugs::Compiler::Regex';