(CommandList
  children: [
    (FuncDef
      name: do_build
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:descr)
                  op: Equal
                  rhs: {($ VSub_Number "$1")}
                  spids: [16]
                )
              ]
              spids: [16]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:board)
                  op: Equal
                  rhs: {($ VSub_Number "$2")}
                  spids: [20]
                )
              ]
              spids: [20]
            )
            (C {(shift)})
            (C {(shift)})
            (C {(echo)} {(DQ ("building ") ($ VSub_Name "$descr") (" ") ($ VSub_Name "$board"))})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:build_dir)
                  op: Equal
                  rhs: {(/tmp/stm-build-) ($ VSub_Name "$board")}
                  spids: [40]
                )
              ]
              spids: [40]
            )
            (AndOr
              children: [
                (C {(make)} {(-B)} {($ VSub_At "$@")} {(Lit_VarLike "BOARD=") ($ VSub_Name "$board")} 
                  {(Lit_VarLike "BUILD=") ($ VSub_Name "$build_dir")}
                )
                (C {(exit)} {(1)})
              ]
              op_id: Op_DPipe
            )
            (C {(mv)} {($ VSub_Name "$build_dir") (/firmware.dfu)} 
              {($ VSub_Name "$dest_dir") (/) ($ VSub_Name "$descr") (-) ($ VSub_Name "$date") (-) 
                ($ VSub_Name "$git_tag") (.dfu)
              }
            )
            (C {(rm)} {(-rf)} {($ VSub_Name "$build_dir")})
          ]
          spids: [13]
        )
      spids: [7 12]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (C {(Lit_Other "[")} {($ VSub_Pound "$#")} {(KW_Bang "!") (Lit_Other "=")} {(1)} 
                  {(Lit_Other "]")}
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(echo)} {(DQ ("usage: ") ($ VSub_Number "$0") (" <dest-dir>"))})
            (C {(exit)} {(1)})
          ]
          spids: [-1 105]
        )
      ]
      spids: [-1 121]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:dest_dir)
          op: Equal
          rhs: {($ VSub_Number "$1")}
          spids: [124]
        )
      ]
      spids: [124]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(Lit_Other "[")} {(KW_Bang "!")} {(-r)} {(modpyb.c)} {(Lit_Other "]")})
              terminator: <Op_Semi ";">
            )
          ]
          action: [(C {(echo)} {(DQ ("must be in stm directory"))}) (C {(exit)} {(1)})]
          spids: [-1 144]
        )
      ]
      spids: [-1 158]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:date)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(date)} {(SQ <"+%Y-%m-%d">)})])
                left_token: <Left_CommandSub "$(">
                spids: [165 171]
              )
            }
          spids: [164]
        )
      ]
      spids: [164]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:git_tag)
          op: Equal
          rhs: 
            {
              (DQ 
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [
                        (AndOr
                          children: [(C {(git)} {(describe)} {(--dirty)}) (C {(echo)} {(unknown)})]
                          op_id: Op_DPipe
                        )
                      ]
                    )
                  left_token: <Left_CommandSub "$(">
                  spids: [179 191]
                )
              )
            }
          spids: [177]
        )
      ]
      spids: [177]
    )
    (C {(do_build)} {(pybv3)} {(PYBV3)})
    (C {(do_build)} {(pybv3-network)} {(PYBV3)} {(Lit_VarLike "MICROPY_PY_WIZNET5K=") (1)} 
      {(Lit_VarLike "MICROPY_PY_CC3K=") (1)}
    )
    (C {(do_build)} {(pybv10)} {(PYBV10)})
    (C {(do_build)} {(pybv10-network)} {(PYBV10)} {(Lit_VarLike "MICROPY_PY_WIZNET5K=") (1)} 
      {(Lit_VarLike "MICROPY_PY_CC3K=") (1)}
    )
    (C {(do_build)} {(stm32f4disc)} {(STM32F4DISC)})
    (C {(do_build)} {(espruino-pico)} {(ESPRUINO_PICO)})
  ]
)