Changeset 22601 for misc

Show
Ignore:
Timestamp:
10/14/08 03:24:31 (3 months ago)
Author:
putter
Message:

[elfish/STD_blue] Continuing to adapt IR constructors to gimme5.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • misc/elfish/STD_blue/IRx1_FromAST2_create.pl

    r22595 r22601  
    3232  $m<termish>[0] 
    3333} 
     34elsif $o<arg> { 
     35  $m<arg> 
     36} 
    3437elsif $o<infix> { 
    3538  my $op = $m<infix><sym_name>; 
     
    3841    if $args[2] { die "chained => unimplemented" } 
    3942    Pair.newp($args[0],$args[1]) 
    40   } else { 
     43  } 
     44  elsif $op eq '=' && $args[0].WHAT.re_matchp('VarDecl') { 
     45    # To simplify elf_h STD_red vs STD_blue diffs. 
     46    $args[0].default_expr = $args[1]; 
     47    $args[0]; 
     48  } 
     49  else { 
    4150    Apply.newp("infix:"~$op,Capture.newp1($args)) 
    4251  } 
    4352} 
    4453elsif $o<chain> { 
     54  my $chain = $m<chain>; 
    4555  my $op = $o<chain>[1]<sym_name>; 
    46   my $args = [$m<chain>[0],$m<chain>[2]]; 
     56  my $args = [$chain[0],$chain[2]]; 
    4757  Apply.newp("infix:"~$op,Capture.newp1($args)) 
    4858} 
     
    5262  Apply.newp("infix:"~$op,Capture.newp1($args)) 
    5363} 
    54 else { 
     64elsif $o<noun> { 
    5565  temp $blackboard::expect_term_base = $m<noun>; 
    5666  my $ops = []; 
    57   if $o<pre>  { $ops.push($o<pre>.flatten) }; 
     67  if $o<pre>  { 
     68    my $pre = $o<pre>; 
     69    my $kludge; 
     70    $pre = $pre.map(sub($x){ 
     71      if $x<sym_name> && $x<sym_name> eq 'temp' { 
     72        my $scope = 'temp'; 
     73        my $typenames = undef; 
     74        my $variable = $m<noun>; 
     75        my $traits = undef; 
     76        my $default_value = undef; 
     77        $kludge = VarDecl.newp($scope,$typenames,undef,$variable,undef,$traits,'=',$m<default_value>) 
     78      } 
     79      $x; 
     80    }); 
     81    if $kludge { return $kludge } 
     82    $ops.push($pre.flatten) 
     83  }; 
    5884  if $o<post> { $ops.push($o<post>.flatten) }; 
    5985  for $ops { 
     
    6288  $blackboard::expect_term_base 
    6389} 
     90elsif $o<left> { #XX temp hack for vanished 'infix'. 
     91  my $args = [$m<left>,$m<right>]; 
     92  my $op = "="; 
     93  if $op eq '=' && $args[0].WHAT.re_matchp('VarDecl') { 
     94    # To simplify elf_h STD_red vs STD_blue diffs. 
     95    $args[0].default_expr = $args[1]; 
     96    $args[0]; 
     97  } else { 
     98    Apply.newp("infix:"~$op,Capture.newp1($args)) 
     99  } 
     100} 
     101else { die "Didn't understand an EXPR node" } 
    64102 
    65103pre 
     
    74112prefix 
    75113my $op = *text*; 
    76 Apply.newp("prefix:"~$op,Capture.newp1([$blackboard::expect_term_base])) 
     114my $name = "prefix:"~$op; 
     115if $op.re_matchp('\A\w+\z') { $name = $op } 
     116Apply.newp($name,Capture.newp1([$blackboard::expect_term_base])) 
    77117 
    78118postfix 
     
    87127Call.newp($blackboard::expect_term_base,$ident,Capture.newp1($args||[])) 
    88128 
     129circumfix 
     130my $op = $m<sym_name>; 
     131my $args = $m<semilist>; 
     132if $args && ($args.WHAT ne 'Array')  { $args = [$args] } 
     133Apply.newp("circumfix:"~$op,Capture.newp1($args||[])) 
     134 
    89135semilist 
    90136$m<statement> 
     
    98144 
    99145methodop 
    100 Call.newp($blackboard::expect_term_base,$m<longname>,Capture.newp1($m<semilist>||[])) 
     146my $args = $m<semilist>[0]; 
     147Call.newp($blackboard::expect_term_base,$m<longname>,Capture.newp1($args||[])) 
    101148 
    102149term 
     
    125172my $parts = [$m<identifier>]; 
    126173if $m<morename> { $parts.push($m<morename>.flatten) } 
    127 $parts.join("::"); 
     174$parts.join("::") 
    128175 
    129176morename 
     
    148195 
    149196term:identifier 
    150 my $args = $m<args><semilist>; 
    151 if not($args) && $o<args><arglist>[0]<EXPR> { 
    152   $args = [ ir($o<args><arglist>[0]<EXPR>) ]; 
    153 } 
    154 Apply.newp($m<identifier>,Capture.newp1($args||[])) 
     197my $ident = $m<identifier>; 
     198my $args; 
     199if $o<args><semilist> { 
     200  $args = $m<args><semilist>; 
     201} 
     202elsif $o<args><listopargs> { 
     203  if ($ident.re_matchp('\A[A-Z][:\w]+\z') && 
     204      $o<args><listopargs>.elems == 0) 
     205  { # Typenames.  Foo.new();  # STD_red elf_h compatibility. 
     206    return $ident; 
     207  } 
     208  if $o<args><listopargs>.elems { 
     209    $args = ir($o<args><listopargs>[0]<EXPR>); 
     210    if $args.WHAT ne 'Array' { $args = [$args] } 
     211  } else { 
     212    $args = []; 
     213  } 
     214} 
     215else { die "Didn't understand a term:identifier node" } 
     216Apply.newp($ident,Capture.newp1($args||[])) 
    155217 
    156218 
     
    166228role_name 
    167229*text* 
    168  
    169  
    170 circumfix 
    171 my $s = *text*; 
    172 my $name = substr($s,0,1)~' '~substr($s,-1,1); # XXX :( 
    173 my $args = $m<kludge_name>; 
    174 if $args && ($args.WHAT ne 'Array')  { $args = [$args] } 
    175 Apply.newp("circumfix:"~$name,Capture.newp1($args||[])) 
    176230 
    177231 
     
    179233my $nibs = $m<nibble><nibbles>; 
    180234my $args = $nibs.map(sub($x){if $x.WHAT eq 'Str' {Buf.newp($x);} else {$x}}); 
    181 if $args.elems < 2 { $args.push(Buf.newp("")) } 
     235if $args.elems < 2 && $nibs[0].WHAT ne 'Str' { $args.push(Buf.newp("")) } 
    182236my $tmp = $args.shift; 
    183237for $args { 
    184238  $tmp = Apply.newp('infix:~',Capture.newp1([$tmp,$_])) 
    185239} 
    186 $tmp; 
     240$tmp 
    187241 
    188242nibbles:\ 
     
    265319 
    266320statement_control:while 
    267 Loop.newp($m<EXPR>,$m<block>,undef,undef) 
     321Loop.newp($m<xblock><EXPR>,$m<xblock><pblock>,undef,undef) 
    268322 
    269323statement_mod_loop:while 
     
    289343my $if_expr = $m<xblock><EXPR>; 
    290344my $if_block = $m<xblock><pblock>; 
    291 my $els = $m<else>; 
    292 if $els { $els = $els[0] } 
    293 Cond.newp([[$if_expr,$if_block]].push($m<elsif>.flatten),$els,undef) 
     345my $els; 
     346if maybe($o<else>) { $els = ir($o<else>[0]<pblock>) } 
     347my $elsif = $m<elsif>||[]; 
     348Cond.newp([[$if_expr,$if_block]].push($elsif.flatten),$els,undef) 
    294349 
    295350elsif 
    296 [$m<elsif_expr>,$m<elsif_block>] 
    297  
    298 if__else 
    299 *1* 
     351[$m<xblock><EXPR>,$m<xblock><pblock>] 
     352 
    300353 
    301354statement_mod_cond:if