[{ s =
   (DirectiveStmt
      { d = (ImportAll (_, (FileName ("<iostream>", _)), _)); d_attrs = [] });
   s_range = None };
  { s =
    (DirectiveStmt
       { d = (ImportAll (_, (DottedName [("std", _)]), _)); d_attrs = [] });
    s_range = None };
  { s =
    (DefStmt
       ({ name =
          (EN
             (Id (("main", _),
                { id_resolved = ref (None);
                  id_resolved_alternatives = ref ([]); id_type = ref (None);
                  id_svalue = ref (Unknown); id_flags = ref (0);
                  id_info_id = _ }
                )));
          attrs = []; tparams = None },
        (FuncDef
           { fkind = (Function, _); fparams = (_, [], _);
             frettype =
             (Some { t =
                     (TyN
                        (Id (("int", _),
                           { id_resolved = ref (None);
                             id_resolved_alternatives = ref ([]);
                             id_type = ref (None); id_svalue = ref (Unknown);
                             id_flags = ref (0); id_info_id = _ }
                           )));
                     t_attrs = [] });
             fbody =
             (FBStmt
                { s =
                  (Block
                     (_,
                      [{ s =
                         (DefStmt
                            ({ name =
                               (EN
                                  (Id (("grade", _),
                                     { id_resolved =
                                       ref ((Some (LocalVar, _)));
                                       id_resolved_alternatives = ref ([]);
                                       id_type =
                                       ref ((Some { t =
                                                    (TyN
                                                       (Id (("char", _),
                                                          { id_resolved =
                                                            ref (None);
                                                            id_resolved_alternatives =
                                                            ref ([]);
                                                            id_type =
                                                            ref (None);
                                                            id_svalue =
                                                            ref (Unknown);
                                                            id_flags =
                                                            ref (0);
                                                            id_info_id = _ }
                                                          )));
                                                    t_attrs = [] }));
                                       id_svalue = ref (Unknown);
                                       id_flags = ref (0); id_info_id = _ }
                                     )));
                               attrs = []; tparams = None },
                             (VarDef
                                { vinit =
                                  (Some { e = (L (Char ("D", _))); e_id = 0;
                                          e_range = None;
                                          is_implicit_return = false;
                                          facts = <opaque> });
                                  vtype =
                                  (Some { t =
                                          (TyN
                                             (Id (("char", _),
                                                { id_resolved = ref (None);
                                                  id_resolved_alternatives =
                                                  ref ([]);
                                                  id_type = ref (None);
                                                  id_svalue = ref (Unknown);
                                                  id_flags = ref (0);
                                                  id_info_id = _ }
                                                )));
                                          t_attrs = [] });
                                  vtok = (Some _) })));
                         s_range = None };
                        { s =
                          (Switch (_,
                             (Some (Cond
                                      { e =
                                        (N
                                           (Id (("grade", _),
                                              { id_resolved =
                                                ref ((Some (LocalVar, _)));
                                                id_resolved_alternatives =
                                                ref ([]);
                                                id_type =
                                                ref ((Some { t =
                                                             (TyN
                                                                (Id (
                                                                   ("char", _),
                                                                   { id_resolved =
                                                                    ref (None);
                                                                    id_resolved_alternatives =
                                                                    ref (
                                                                    []);
                                                                    id_type =
                                                                    ref (None);
                                                                    id_svalue =
                                                                    ref (Unknown);
                                                                    id_flags =
                                                                    ref (0);
                                                                    id_info_id =
                                                                    _ }
                                                                   )));
                                                             t_attrs = [] }));
                                                id_svalue =
                                                ref ((Lit (Char ("D", _))));
                                                id_flags = ref (0);
                                                id_info_id = _ }
                                              )));
                                        e_id = 0; e_range = None;
                                        is_implicit_return = false;
                                        facts = <opaque> })),
                             [(CasesAndBody
                                 ([(Case (_, (PatLiteral (Char ("A", _)))))],
                                  { s =
                                    (Block
                                       (_,
                                        [{ s =
                                           (ExprStmt (
                                              { e =
                                                (Call (
                                                   { e =
                                                     (Special ((Op LSL), _));
                                                     e_id = 0;
                                                     e_range = None;
                                                     is_implicit_return =
                                                     false; facts = <opaque>
                                                     },
                                                   (_,
                                                    [(Arg
                                                        { e =
                                                          (Call (
                                                             { e =
                                                               (Special
                                                                  ((Op LSL),
                                                                   _));
                                                               e_id = 0;
                                                               e_range = None;
                                                               is_implicit_return =
                                                               false;
                                                               facts =
                                                               <opaque> },
                                                             (_,
                                                              [(Arg
                                                                  { e =
                                                                    (
                                                                    N
                                                                    (Id (
                                                                    ("cout",
                                                                    _),
                                                                    { id_resolved =
                                                                    ref (None);
                                                                    id_resolved_alternatives =
                                                                    ref (
                                                                    []);
                                                                    id_type =
                                                                    ref (None);
                                                                    id_svalue =
                                                                    ref (Unknown);
                                                                    id_flags =
                                                                    ref (0);
                                                                    id_info_id =
                                                                    _ })));
                                                                    e_id = 0;
                                                                    e_range =
                                                                    None;
                                                                    is_implicit_return =
                                                                    false;
                                                                    facts =
                                                                    <opaque>
                                                                    });
                                                                (Arg
                                                                   { e =
                                                                    (L
                                                                    (String
                                                                    (_,
                                                                    ("Excellent!",
                                                                    _), _)));
                                                                    e_id = 0;
                                                                    e_range =
                                                                    None;
                                                                    is_implicit_return =
                                                                    false;
                                                                    facts =
                                                                    <opaque>
                                                                    })
                                                                ],
                                                              _)
                                                             ));
                                                          e_id = 0;
                                                          e_range = None;
                                                          is_implicit_return =
                                                          false;
                                                          facts = <opaque> });
                                                      (Arg
                                                         { e =
                                                           (N
                                                              (Id (
                                                                 ("endl", _),
                                                                 { id_resolved =
                                                                   ref (None);
                                                                   id_resolved_alternatives =
                                                                   ref (
                                                                   []);
                                                                   id_type =
                                                                   ref (None);
                                                                   id_svalue =
                                                                   ref (Unknown);
                                                                   id_flags =
                                                                   ref (0);
                                                                   id_info_id =
                                                                   _ }
                                                                 )));
                                                           e_id = 0;
                                                           e_range = None;
                                                           is_implicit_return =
                                                           false;
                                                           facts = <opaque> })
                                                      ],
                                                    _)
                                                   ));
                                                e_id = 0; e_range = None;
                                                is_implicit_return = false;
                                                facts = <opaque> },
                                              _));
                                           s_range = None };
                                          { s = (Break (_, LNone, _));
                                            s_range = None }
                                          ],
                                        _));
                                    s_range = None }));
                               (CasesAndBody
                                  ([(Case (_, (PatLiteral (Char ("B", _)))));
                                     (Case (_, (PatLiteral (Char ("C", _)))))
                                     ],
                                   { s =
                                     (Block
                                        (_,
                                         [{ s =
                                            (ExprStmt (
                                               { e =
                                                 (Call (
                                                    { e =
                                                      (Special ((Op LSL), _));
                                                      e_id = 0;
                                                      e_range = None;
                                                      is_implicit_return =
                                                      false; facts = <opaque>
                                                      },
                                                    (_,
                                                     [(Arg
                                                         { e =
                                                           (Call (
                                                              { e =
                                                                (Special
                                                                   ((
                                                                    Op LSL),
                                                                    _));
                                                                e_id = 0;
                                                                e_range =
                                                                None;
                                                                is_implicit_return =
                                                                false;
                                                                facts =
                                                                <opaque> },
                                                              (_,
                                                               [(Arg
                                                                   { e =
                                                                    (N
                                                                    (Id (
                                                                    ("cout",
                                                                    _),
                                                                    { id_resolved =
                                                                    ref (None);
                                                                    id_resolved_alternatives =
                                                                    ref (
                                                                    []);
                                                                    id_type =
                                                                    ref (None);
                                                                    id_svalue =
                                                                    ref (Unknown);
                                                                    id_flags =
                                                                    ref (0);
                                                                    id_info_id =
                                                                    _ })));
                                                                    e_id = 0;
                                                                    e_range =
                                                                    None;
                                                                    is_implicit_return =
                                                                    false;
                                                                    facts =
                                                                    <opaque>
                                                                    });
                                                                 (Arg
                                                                    { e =
                                                                    (L
                                                                    (String
                                                                    (_,
                                                                    ("Well done",
                                                                    _), _)));
                                                                    e_id = 0;
                                                                    e_range =
                                                                    None;
                                                                    is_implicit_return =
                                                                    false;
                                                                    facts =
                                                                    <opaque>
                                                                    })
                                                                 ],
                                                               _)
                                                              ));
                                                           e_id = 0;
                                                           e_range = None;
                                                           is_implicit_return =
                                                           false;
                                                           facts = <opaque> });
                                                       (Arg
                                                          { e =
                                                            (N
                                                               (Id (
                                                                  ("endl", _),
                                                                  { id_resolved =
                                                                    ref (None);
                                                                    id_resolved_alternatives =
                                                                    ref (
                                                                    []);
                                                                    id_type =
                                                                    ref (None);
                                                                    id_svalue =
                                                                    ref (Unknown);
                                                                    id_flags =
                                                                    ref (0);
                                                                    id_info_id =
                                                                    _ }
                                                                  )));
                                                            e_id = 0;
                                                            e_range = None;
                                                            is_implicit_return =
                                                            false;
                                                            facts = <opaque>
                                                            })
                                                       ],
                                                     _)
                                                    ));
                                                 e_id = 0; e_range = None;
                                                 is_implicit_return = false;
                                                 facts = <opaque> },
                                               _));
                                            s_range = None };
                                           { s = (Break (_, LNone, _));
                                             s_range = None }
                                           ],
                                         _));
                                     s_range = None }));
                               (CasesAndBody
                                  ([(Case (_, (PatLiteral (Char ("D", _)))))],
                                   { s =
                                     (Block
                                        (_,
                                         [{ s =
                                            (ExprStmt (
                                               { e =
                                                 (Call (
                                                    { e =
                                                      (Special ((Op LSL), _));
                                                      e_id = 0;
                                                      e_range = None;
                                                      is_implicit_return =
                                                      false; facts = <opaque>
                                                      },
                                                    (_,
                                                     [(Arg
                                                         { e =
                                                           (Call (
                                                              { e =
                                                                (Special
                                                                   ((
                                                                    Op LSL),
                                                                    _));
                                                                e_id = 0;
                                                                e_range =
                                                                None;
                                                                is_implicit_return =
                                                                false;
                                                                facts =
                                                                <opaque> },
                                                              (_,
                                                               [(Arg
                                                                   { e =
                                                                    (N
                                                                    (Id (
                                                                    ("cout",
                                                                    _),
                                                                    { id_resolved =
                                                                    ref (None);
                                                                    id_resolved_alternatives =
                                                                    ref (
                                                                    []);
                                                                    id_type =
                                                                    ref (None);
                                                                    id_svalue =
                                                                    ref (Unknown);
                                                                    id_flags =
                                                                    ref (0);
                                                                    id_info_id =
                                                                    _ })));
                                                                    e_id = 0;
                                                                    e_range =
                                                                    None;
                                                                    is_implicit_return =
                                                                    false;
                                                                    facts =
                                                                    <opaque>
                                                                    });
                                                                 (Arg
                                                                    { e =
                                                                    (L
                                                                    (String
                                                                    (_,
                                                                    ("You passed",
                                                                    _), _)));
                                                                    e_id = 0;
                                                                    e_range =
                                                                    None;
                                                                    is_implicit_return =
                                                                    false;
                                                                    facts =
                                                                    <opaque>
                                                                    })
                                                                 ],
                                                               _)
                                                              ));
                                                           e_id = 0;
                                                           e_range = None;
                                                           is_implicit_return =
                                                           false;
                                                           facts = <opaque> });
                                                       (Arg
                                                          { e =
                                                            (N
                                                               (Id (
                                                                  ("endl", _),
                                                                  { id_resolved =
                                                                    ref (None);
                                                                    id_resolved_alternatives =
                                                                    ref (
                                                                    []);
                                                                    id_type =
                                                                    ref (None);
                                                                    id_svalue =
                                                                    ref (Unknown);
                                                                    id_flags =
                                                                    ref (0);
                                                                    id_info_id =
                                                                    _ }
                                                                  )));
                                                            e_id = 0;
                                                            e_range = None;
                                                            is_implicit_return =
                                                            false;
                                                            facts = <opaque>
                                                            })
                                                       ],
                                                     _)
                                                    ));
                                                 e_id = 0; e_range = None;
                                                 is_implicit_return = false;
                                                 facts = <opaque> },
                                               _));
                                            s_range = None };
                                           { s = (Break (_, LNone, _));
                                             s_range = None }
                                           ],
                                         _));
                                     s_range = None }));
                               (CasesAndBody
                                  ([(Case (_, (PatLiteral (Char ("F", _)))))],
                                   { s =
                                     (Block
                                        (_,
                                         [{ s =
                                            (ExprStmt (
                                               { e =
                                                 (Call (
                                                    { e =
                                                      (Special ((Op LSL), _));
                                                      e_id = 0;
                                                      e_range = None;
                                                      is_implicit_return =
                                                      false; facts = <opaque>
                                                      },
                                                    (_,
                                                     [(Arg
                                                         { e =
                                                           (Call (
                                                              { e =
                                                                (Special
                                                                   ((
                                                                    Op LSL),
                                                                    _));
                                                                e_id = 0;
                                                                e_range =
                                                                None;
                                                                is_implicit_return =
                                                                false;
                                                                facts =
                                                                <opaque> },
                                                              (_,
                                                               [(Arg
                                                                   { e =
                                                                    (N
                                                                    (Id (
                                                                    ("cout",
                                                                    _),
                                                                    { id_resolved =
                                                                    ref (None);
                                                                    id_resolved_alternatives =
                                                                    ref (
                                                                    []);
                                                                    id_type =
                                                                    ref (None);
                                                                    id_svalue =
                                                                    ref (Unknown);
                                                                    id_flags =
                                                                    ref (0);
                                                                    id_info_id =
                                                                    _ })));
                                                                    e_id = 0;
                                                                    e_range =
                                                                    None;
                                                                    is_implicit_return =
                                                                    false;
                                                                    facts =
                                                                    <opaque>
                                                                    });
                                                                 (Arg
                                                                    { e =
                                                                    (L
                                                                    (String
                                                                    (_,
                                                                    ("Better try again",
                                                                    _), _)));
                                                                    e_id = 0;
                                                                    e_range =
                                                                    None;
                                                                    is_implicit_return =
                                                                    false;
                                                                    facts =
                                                                    <opaque>
                                                                    })
                                                                 ],
                                                               _)
                                                              ));
                                                           e_id = 0;
                                                           e_range = None;
                                                           is_implicit_return =
                                                           false;
                                                           facts = <opaque> });
                                                       (Arg
                                                          { e =
                                                            (N
                                                               (Id (
                                                                  ("endl", _),
                                                                  { id_resolved =
                                                                    ref (None);
                                                                    id_resolved_alternatives =
                                                                    ref (
                                                                    []);
                                                                    id_type =
                                                                    ref (None);
                                                                    id_svalue =
                                                                    ref (Unknown);
                                                                    id_flags =
                                                                    ref (0);
                                                                    id_info_id =
                                                                    _ }
                                                                  )));
                                                            e_id = 0;
                                                            e_range = None;
                                                            is_implicit_return =
                                                            false;
                                                            facts = <opaque>
                                                            })
                                                       ],
                                                     _)
                                                    ));
                                                 e_id = 0; e_range = None;
                                                 is_implicit_return = false;
                                                 facts = <opaque> },
                                               _));
                                            s_range = None };
                                           { s = (Break (_, LNone, _));
                                             s_range = None }
                                           ],
                                         _));
                                     s_range = None }));
                               (CasesAndBody
                                  ([(Default _)],
                                   { s =
                                     (ExprStmt (
                                        { e =
                                          (Call (
                                             { e = (Special ((Op LSL), _));
                                               e_id = 0; e_range = None;
                                               is_implicit_return = false;
                                               facts = <opaque> },
                                             (_,
                                              [(Arg
                                                  { e =
                                                    (Call (
                                                       { e =
                                                         (Special
                                                            ((Op LSL), _));
                                                         e_id = 0;
                                                         e_range = None;
                                                         is_implicit_return =
                                                         false;
                                                         facts = <opaque> },
                                                       (_,
                                                        [(Arg
                                                            { e =
                                                              (N
                                                                 (Id (
                                                                    (
                                                                    "cout", _),
                                                                    { id_resolved =
                                                                    ref (None);
                                                                    id_resolved_alternatives =
                                                                    ref (
                                                                    []);
                                                                    id_type =
                                                                    ref (None);
                                                                    id_svalue =
                                                                    ref (Unknown);
                                                                    id_flags =
                                                                    ref (0);
                                                                    id_info_id =
                                                                    _ })));
                                                              e_id = 0;
                                                              e_range = None;
                                                              is_implicit_return =
                                                              false;
                                                              facts =
                                                              <opaque> });
                                                          (Arg
                                                             { e =
                                                               (L
                                                                  (String
                                                                    (_,
                                                                    ("Invalid grade",
                                                                    _), _)));
                                                               e_id = 0;
                                                               e_range = None;
                                                               is_implicit_return =
                                                               false;
                                                               facts =
                                                               <opaque> })
                                                          ],
                                                        _)
                                                       ));
                                                    e_id = 0; e_range = None;
                                                    is_implicit_return =
                                                    false; facts = <opaque> });
                                                (Arg
                                                   { e =
                                                     (N
                                                        (Id (("endl", _),
                                                           { id_resolved =
                                                             ref (None);
                                                             id_resolved_alternatives =
                                                             ref ([]);
                                                             id_type =
                                                             ref (None);
                                                             id_svalue =
                                                             ref (Unknown);
                                                             id_flags =
                                                             ref (0);
                                                             id_info_id = _ }
                                                           )));
                                                     e_id = 0;
                                                     e_range = None;
                                                     is_implicit_return =
                                                     false; facts = <opaque>
                                                     })
                                                ],
                                              _)
                                             ));
                                          e_id = 0; e_range = None;
                                          is_implicit_return = false;
                                          facts = <opaque> },
                                        _));
                                     s_range = None }))
                               ]
                             ));
                          s_range = None };
                        { s =
                          (ExprStmt (
                             { e =
                               (Call (
                                  { e = (Special ((Op LSL), _)); e_id = 0;
                                    e_range = None;
                                    is_implicit_return = false;
                                    facts = <opaque> },
                                  (_,
                                   [(Arg
                                       { e =
                                         (Call (
                                            { e = (Special ((Op LSL), _));
                                              e_id = 0; e_range = None;
                                              is_implicit_return = false;
                                              facts = <opaque> },
                                            (_,
                                             [(Arg
                                                 { e =
                                                   (Call (
                                                      { e =
                                                        (Special
                                                           ((Op LSL), _));
                                                        e_id = 0;
                                                        e_range = None;
                                                        is_implicit_return =
                                                        false;
                                                        facts = <opaque> },
                                                      (_,
                                                       [(Arg
                                                           { e =
                                                             (N
                                                                (Id (
                                                                   ("cout", _),
                                                                   { id_resolved =
                                                                    ref (None);
                                                                    id_resolved_alternatives =
                                                                    ref (
                                                                    []);
                                                                    id_type =
                                                                    ref (None);
                                                                    id_svalue =
                                                                    ref (Unknown);
                                                                    id_flags =
                                                                    ref (0);
                                                                    id_info_id =
                                                                    _ }
                                                                   )));
                                                             e_id = 0;
                                                             e_range = None;
                                                             is_implicit_return =
                                                             false;
                                                             facts = <opaque>
                                                             });
                                                         (Arg
                                                            { e =
                                                              (L
                                                                 (String
                                                                    (
                                                                    _,
                                                                    (
                                                                    "Your grade is ",
                                                                    _), _)));
                                                              e_id = 0;
                                                              e_range = None;
                                                              is_implicit_return =
                                                              false;
                                                              facts =
                                                              <opaque> })
                                                         ],
                                                       _)
                                                      ));
                                                   e_id = 0; e_range = None;
                                                   is_implicit_return = false;
                                                   facts = <opaque> });
                                               (Arg
                                                  { e =
                                                    (N
                                                       (Id (("grade", _),
                                                          { id_resolved =
                                                            ref ((Some (
                                                            LocalVar, _)));
                                                            id_resolved_alternatives =
                                                            ref ([]);
                                                            id_type =
                                                            ref ((Some 
                                                            { t =
                                                              (TyN
                                                                 (Id (
                                                                    (
                                                                    "char", _),
                                                                    { id_resolved =
                                                                    ref (None);
                                                                    id_resolved_alternatives =
                                                                    ref (
                                                                    []);
                                                                    id_type =
                                                                    ref (None);
                                                                    id_svalue =
                                                                    ref (Unknown);
                                                                    id_flags =
                                                                    ref (0);
                                                                    id_info_id =
                                                                    _ })));
                                                              t_attrs = [] }));
                                                            id_svalue =
                                                            ref ((Lit
                                                                    (
                                                                    Char
                                                                    ("D", _))));
                                                            id_flags =
                                                            ref (0);
                                                            id_info_id = _ }
                                                          )));
                                                    e_id = 0; e_range = None;
                                                    is_implicit_return =
                                                    false; facts = <opaque> })
                                               ],
                                             _)
                                            ));
                                         e_id = 0; e_range = None;
                                         is_implicit_return = false;
                                         facts = <opaque> });
                                     (Arg
                                        { e =
                                          (N
                                             (Id (("endl", _),
                                                { id_resolved = ref (None);
                                                  id_resolved_alternatives =
                                                  ref ([]);
                                                  id_type = ref (None);
                                                  id_svalue = ref (Unknown);
                                                  id_flags = ref (0);
                                                  id_info_id = _ }
                                                )));
                                          e_id = 0; e_range = None;
                                          is_implicit_return = false;
                                          facts = <opaque> })
                                     ],
                                   _)
                                  ));
                               e_id = 0; e_range = None;
                               is_implicit_return = false; facts = <opaque> },
                             _));
                          s_range = None };
                        { s =
                          (Return (_,
                             (Some { e = (L (Int ((Some 0L), _))); e_id = 0;
                                     e_range = None;
                                     is_implicit_return = false;
                                     facts = <opaque> }),
                             _));
                          s_range = None }
                        ],
                      _));
                  s_range = None })
             })));
    s_range = None }
  ]