- Timestamp:
- 10/14/08 03:24:31 (3 months ago)
- Files:
-
- 1 modified
-
misc/elfish/STD_blue/IRx1_FromAST2_create.pl (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
misc/elfish/STD_blue/IRx1_FromAST2_create.pl
r22595 r22601 32 32 $m<termish>[0] 33 33 } 34 elsif $o<arg> { 35 $m<arg> 36 } 34 37 elsif $o<infix> { 35 38 my $op = $m<infix><sym_name>; … … 38 41 if $args[2] { die "chained => unimplemented" } 39 42 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 { 41 50 Apply.newp("infix:"~$op,Capture.newp1($args)) 42 51 } 43 52 } 44 53 elsif $o<chain> { 54 my $chain = $m<chain>; 45 55 my $op = $o<chain>[1]<sym_name>; 46 my $args = [$ m<chain>[0],$m<chain>[2]];56 my $args = [$chain[0],$chain[2]]; 47 57 Apply.newp("infix:"~$op,Capture.newp1($args)) 48 58 } … … 52 62 Apply.newp("infix:"~$op,Capture.newp1($args)) 53 63 } 54 els e{64 elsif $o<noun> { 55 65 temp $blackboard::expect_term_base = $m<noun>; 56 66 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 }; 58 84 if $o<post> { $ops.push($o<post>.flatten) }; 59 85 for $ops { … … 62 88 $blackboard::expect_term_base 63 89 } 90 elsif $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 } 101 else { die "Didn't understand an EXPR node" } 64 102 65 103 pre … … 74 112 prefix 75 113 my $op = *text*; 76 Apply.newp("prefix:"~$op,Capture.newp1([$blackboard::expect_term_base])) 114 my $name = "prefix:"~$op; 115 if $op.re_matchp('\A\w+\z') { $name = $op } 116 Apply.newp($name,Capture.newp1([$blackboard::expect_term_base])) 77 117 78 118 postfix … … 87 127 Call.newp($blackboard::expect_term_base,$ident,Capture.newp1($args||[])) 88 128 129 circumfix 130 my $op = $m<sym_name>; 131 my $args = $m<semilist>; 132 if $args && ($args.WHAT ne 'Array') { $args = [$args] } 133 Apply.newp("circumfix:"~$op,Capture.newp1($args||[])) 134 89 135 semilist 90 136 $m<statement> … … 98 144 99 145 methodop 100 Call.newp($blackboard::expect_term_base,$m<longname>,Capture.newp1($m<semilist>||[])) 146 my $args = $m<semilist>[0]; 147 Call.newp($blackboard::expect_term_base,$m<longname>,Capture.newp1($args||[])) 101 148 102 149 term … … 125 172 my $parts = [$m<identifier>]; 126 173 if $m<morename> { $parts.push($m<morename>.flatten) } 127 $parts.join("::") ;174 $parts.join("::") 128 175 129 176 morename … … 148 195 149 196 term: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||[])) 197 my $ident = $m<identifier>; 198 my $args; 199 if $o<args><semilist> { 200 $args = $m<args><semilist>; 201 } 202 elsif $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 } 215 else { die "Didn't understand a term:identifier node" } 216 Apply.newp($ident,Capture.newp1($args||[])) 155 217 156 218 … … 166 228 role_name 167 229 *text* 168 169 170 circumfix171 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||[]))176 230 177 231 … … 179 233 my $nibs = $m<nibble><nibbles>; 180 234 my $args = $nibs.map(sub($x){if $x.WHAT eq 'Str' {Buf.newp($x);} else {$x}}); 181 if $args.elems < 2 { $args.push(Buf.newp("")) }235 if $args.elems < 2 && $nibs[0].WHAT ne 'Str' { $args.push(Buf.newp("")) } 182 236 my $tmp = $args.shift; 183 237 for $args { 184 238 $tmp = Apply.newp('infix:~',Capture.newp1([$tmp,$_])) 185 239 } 186 $tmp ;240 $tmp 187 241 188 242 nibbles:\ … … 265 319 266 320 statement_control:while 267 Loop.newp($m< EXPR>,$m<block>,undef,undef)321 Loop.newp($m<xblock><EXPR>,$m<xblock><pblock>,undef,undef) 268 322 269 323 statement_mod_loop:while … … 289 343 my $if_expr = $m<xblock><EXPR>; 290 344 my $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) 345 my $els; 346 if maybe($o<else>) { $els = ir($o<else>[0]<pblock>) } 347 my $elsif = $m<elsif>||[]; 348 Cond.newp([[$if_expr,$if_block]].push($elsif.flatten),$els,undef) 294 349 295 350 elsif 296 [$m<elsif_expr>,$m<elsif_block>] 297 298 if__else 299 *1* 351 [$m<xblock><EXPR>,$m<xblock><pblock>] 352 300 353 301 354 statement_mod_cond:if
