5.16.8. Type match

Start data section to src/flx_parse.mly[33 /35 ] Next Prev First Last
  2497: tpattern_comma_list:
  2498:   | tpattern COMMA tpattern_comma_list { $1 :: $3 }
  2499:   | tpattern { [$1] }
  2500:   | { [] }
  2501: 
  2502: tuple_tpattern:
  2503:   | tpattern_comma_list {
  2504:       match $1 with
  2505:       | _ :: _ :: _ -> `TPAT_type_tuple $1
  2506:       | x :: [] -> x
  2507:       | [] -> assert false
  2508:     }
  2509: 
  2510: tpattern:
  2511:   | tpattern AS NAME { `TPAT_as ($1,snd $3) }
  2512:   | tpat0 { $1 }
  2513: 
  2514: tpat0:
  2515:   | tpat1 RIGHTARROW tpat0 { `TPAT_function ($1,$3) }
  2516:   | tpat1  { $1 }
  2517: 
  2518: tpat1:
  2519:   | sumpat
  2520:     {
  2521:       match $1 with
  2522:       | [x] -> x
  2523:       | ps -> `TPAT_sum ps
  2524:     }
  2525: 
  2526: sumpat:
  2527:   | tpat2 PLUS sumpat { $1 :: $3 }
  2528:   | tpat2 { [$1] }
  2529: 
  2530: tpat2:
  2531:   | mulpat
  2532:     {
  2533:       match $1 with
  2534:       | [x] -> x
  2535:       | ps -> `TPAT_tuple ps
  2536:     }
  2537: 
  2538: mulpat:
  2539:   | tpat3 STAR mulpat { $1 :: $3 }
  2540:   | tpat3 { [$1] }
  2541: 
  2542: tpat3:
  2543:   | NAME tpatlist { `TPAT_name (snd $1, $2) }
  2544:   | LPAR tuple_tpattern RPAR { $2 }
  2545:   | QUEST NAME { `TPAT_var (snd $2) }
  2546:   | QUEST { `TPAT_any }
  2547:   | UNDERSCORE { `TPAT_any }
  2548:   | INTEGER { let sr,t,v = $1 in `TPAT_unitsum (Big_int.int_of_big_int v) }
  2549: 
  2550: tpatlist:
  2551:    | LSQB tpattern_comma_list RSQB { $2 }
  2552:    | { [] }
  2553: 
  2554: 
  2555: type_match_expr:
  2556:   | TYPEMATCH expr WITH type_matchings ENDMATCH
  2557:   {
  2558:     let t = typecode_of_expr $2 in
  2559:     `AST_type_match (rstoken $1 $5, (t, $4))
  2560:   }
  2561: 
  2562: type_matchings:
  2563:   | type_matching type_matchings { $1 :: $2 }
  2564:   | type_matching { [$1] }
  2565: 
  2566: type_matching:
  2567:   /*
  2568:   | VBAR tuple_tpattern EQRIGHTARROW expr { $2, typecode_of_expr $4 }
  2569:   */
  2570:   | VBAR expr EQRIGHTARROW expr { typecode_of_expr $2, typecode_of_expr $4 }
  2571: 
End data section to src/flx_parse.mly[33]