let {js|stringPattern|js} = ()
let {js|stringPattern|js} as s = ()
let ({js|stringPattern|js} : string) = ()
let ({js|stringPattern|js} : string) as s = ()
;;match x with
  | {js|stringPattern|js} -> ()
  | {js|stringPattern|js} as s -> ()
  | ({js|stringPattern|js} : string) as s -> ()
  | {js|\xff|js} -> ()
  | {js|\u2212|js} -> ()
  | {js|\0|js} -> ()
  | {js|\o123|js} -> ()
;;for {js|stringPattern|js} = 0 to 10 do () done
;;for {js|stringPattern|js} as s = 0 to 10 do () done
;;for {js|stringPattern|js} = 0 to 10 do () done
;;for {js|stringPattern|js} as s = 0 to 10 do () done
;;for {js|stringPattern|js} as s = 0 to 10 do () done
let f [arity:1]{js|stringPattern|js} = ()
let f [arity:1]({js|stringPattern|js} as s) = ()
let f [arity:1]({js|stringPattern|js} as s) = ()
let f [arity:1]({js|stringPattern|js} : string) = ()
let f [arity:1](({js|stringPattern|js} : string) as s) = ()
let f [arity:1]({js|stringPattern|js} : string) = ()
let 1 = ()
let 1 as x = ()
let (1 : int) = ()
let (1 : int) as x = ()
;;match x with
  | 1 -> ()
  | 1 as x -> ()
  | (1 : int) -> ()
  | (1 : int) as x -> ()
let f [arity:1]1 = ()
let f [arity:1](1 as x) = ()
let f [arity:1](1 : int) = ()
let f [arity:1]((1 : int) as x) = ()
let f [arity:1](1 : int) = ()
;;for i = 0 to 10 do () done
;;for i as x = 0 to 10 do () done
;;for i = 0 to 10 do () done
;;for i as x = 0 to 10 do () done
;;for i as x = 0 to 10 do () done
;;match listPatterns with
  | (true, pattern)::patterns ->
      let patterns = (patterns -> (List.map filterSpread)) -> List.rev in
      makeListPattern loc patterns (Some pattern)
  | patterns ->
      let patterns = (patterns -> (List.map filterSpread)) -> List.rev in
      makeListPattern loc patterns None
let _0 = 0x9A
let print [arity:2]ppf i =
  match i.stamp with
  | 0 -> fprintf ppf {js|%s!|js} i.name
  | (-1) -> fprintf ppf {js|%s#|js} i.name
  | 1 -> fprintf ppf {js|%s#|js} i.name
  | (-1.) -> fprintf ppf {js|%s#|js} i.name
  | 1. -> fprintf ppf {js|%s#|js} i.name
let (-1)..(-1.) = x
;;match science with
  | (1.12, (-3.13)) -> true
  | [|1.12;(-3.13)|] -> true
  | 1.12::(-3.13)::[] -> true
  | { x = 1.12; y = (-3.13) } -> true
  | Constructor (1.12, (-2.45)) -> true
  | `Constuctor (1.12, (-2.45)) -> true
  | (-4.15) as x -> true
  | (-4.15)|4.15 -> true
  | ((-3.14) : float) -> true
  | exception 19.34 -> true
  | _ -> false
;;match literal with
  | (({js|literal|js})[@res.template ]) -> true
  | ((({js|literal1|js})[@res.template ]),
     (({js|literal2|js})[@res.template ])) -> true
  | [|(({js|literal1|js})[@res.template ]);(({js|literal2|js})[@res.template
                                                                ])|]
      -> true
  | (({js|literal1|js})[@res.template ])::(({js|literal2|js})[@res.template ])::[]
      -> true
  | { x = (({js|literal1|js})[@res.template ]);
      y = (({js|literal2|js})[@res.template ]) } -> true
  | Constructor
      ((({js|literal1|js})[@res.template ]),
       (({js|literal2|js})[@res.template ]))
      -> true
  | `Constuctor
      ((({js|literal1|js})[@res.template ]),
       (({js|literal2|js})[@res.template ]))
      -> true
  | (({js|literal|js})[@res.template ]) as x -> true
  | (({js|literal|js})[@res.template ])|(({js|literal|js})[@res.template ])
      -> true
  | ((({js|literal|js})[@res.template ]) : string) -> true
  | exception (({js|literal|js})[@res.template ]) -> true
  | _ -> false
let (({js|literal constant|js})[@res.template ]) = x
;;for (({js|literal constant|js})[@res.template ]) = 0 to 10 do () done