5.16.7.2. Union Binding

Start data section to src/flx_parse.mly[9 /35 ] Next Prev First Last
   820: union_decl:
   821:   | ENUM NAME LBRACE enum_items RBRACE SEMI
   822:     {
   823:       `AST_union (rstoken $1 $6, snd $2, dfltvs, $4)
   824:     }
   825: 
   826:   | UNION declname EQUAL type_sum_items SEMI
   827:     {
   828:       let name,vs = hd $2 in
   829:       let sr = rstoken $1 $5 in
   830:       let stmt = `AST_union (sr, name,vs, $4) in
   831:       fold_left (fun stmt (name,vs) -> `AST_namespace (sr,name,vs,[stmt])) stmt (tl $2)
   832:     }
   833:   | UNION declname EQUAL VBAR type_sum_items SEMI
   834:     {
   835:       let name,vs = hd $2 in
   836:       let sr = rstoken $1 $6 in
   837:       let stmt = `AST_union (sr, name,vs, $5) in
   838:       fold_left (fun stmt (name,vs) -> `AST_namespace (sr,name,vs,[stmt])) stmt (tl $2)
   839:     }
   840: 
   841:   | UNION declname LBRACE type_sum_items2 RBRACE
   842:     {
   843:       let name,vs = hd $2 in
   844:       let sr = rstoken $1 $5 in
   845:       let stmt = `AST_union (sr, name,vs, $4) in
   846:       fold_left (fun stmt (name,vs) -> `AST_namespace (sr,name,vs,[stmt])) stmt (tl $2)
   847:     }
   848: 
   849: opt_value:
   850:   | EQUAL INTEGER {
   851:       let sr,t,v = $2 in
   852:       let n = Big_int.int_of_big_int v in
   853:       Some n
   854:     }
   855:   | { None }
   856: 
   857: enum_items:
   858:   | enum_items COMMA enum_item { $1 @ [$3] }
   859:   | enum_item { [$1] }
   860: enum_item:
   861:   | NAME opt_value
   862:     {
   863:       let sr = slift (fst $1) in
   864:       snd $1, $2, dfltvs, typecode_of_expr (`AST_void sr)
   865:     }
   866: 
   867: type_sum_items:
   868:   | type_sum_items VBAR type_sum_item { $1 @ [$3] }
   869:   | type_sum_item { [$1] }
   870: type_sum_item:
   871:   | NAME tvarlist OF expr { (snd $1,None,$2,typecode_of_expr $4) }
   872:   | NAME tvarlist
   873:     {
   874:       let sr = slift (fst $1) in
   875:       snd $1, None, $2, typecode_of_expr (`AST_void sr)
   876:     }
   877: type_sum_items2:
   878:   | type_sum_items2 type_sum_item SEMI { $1 @ [$2] }
   879:   | type_sum_item SEMI { [$1] }
   880: 
End data section to src/flx_parse.mly[9]