(command.CommandList
  children: [
    (command.FuncDef
      name: do_build
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:descr spids:[16])
                  op: Equal
                  rhs: {($ VSub_Number '$1')}
                  spids: [16]
                )
              ]
              spids: [16]
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:board spids:[20])
                  op: Equal
                  rhs: {($ VSub_Number '$2')}
                  spids: [20]
                )
              ]
              spids: [20]
            )
            (C {(shift)})
            (C {(shift)})
            (C {(echo)} 
              {(DQ ('building ') ($ VSub_DollarName '$descr') (' ') ($ VSub_DollarName '$board'))}
            )
            (command.Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (lhs_expr.LhsName name:build_dir spids:[40])
                  op: Equal
                  rhs: {(/tmp/stm-build-) ($ VSub_DollarName '$board')}
                  spids: [40]
                )
              ]
              spids: [40]
            )
            (command.AndOr
              ops: [Op_DPipe]
              children: [
                (C {(make)} {(-B)} {($ VSub_At '$@')} 
                  {(Lit_VarLike 'BOARD=') ($ VSub_DollarName '$board')} {(Lit_VarLike 'BUILD=') ($ VSub_DollarName '$build_dir')}
                )
                (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
              ]
            )
            (C {(mv)} {($ VSub_DollarName '$build_dir') (/firmware.dfu)} 
              {($ VSub_DollarName '$dest_dir') (/) ($ VSub_DollarName '$descr') (-) 
                ($ VSub_DollarName '$date') (-) ($ VSub_DollarName '$git_tag') (.dfu)
              }
            )
            (C {(rm)} {(-rf)} {($ VSub_DollarName '$build_dir')})
          ]
          spids: [13]
        )
      spids: [7 12]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.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>'))})
            (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [16777215 105]
        )
      ]
      spids: [16777215 121]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:dest_dir spids:[124])
          op: Equal
          rhs: {($ VSub_Number '$1')}
          spids: [124]
        )
      ]
      spids: [124]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: (C {(Lit_Other '[')} {(KW_Bang '!')} {(-r)} {(modpyb.c)} {(Lit_Other ']')})
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(echo)} {(DQ ('must be in stm directory'))})
            (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
          spids: [16777215 144]
        )
      ]
      spids: [16777215 158]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:date spids:[164])
          op: Equal
          rhs: 
            {
              (word_part.CommandSubPart
                command_list: (command.CommandList children:[(C {(date)} {(SQ <'+%Y-%m-%d'>)})])
                left_token: <Left_CommandSub '$('>
                spids: [165 171]
              )
            }
          spids: [164]
        )
      ]
      spids: [164]
    )
    (command.Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (lhs_expr.LhsName name:git_tag spids:[177])
          op: Equal
          rhs: 
            {
              (DQ 
                (word_part.CommandSubPart
                  command_list: 
                    (command.CommandList
                      children: [
                        (command.AndOr
                          ops: [Op_DPipe]
                          children: [(C {(git)} {(describe)} {(--dirty)}) (C {(echo)} {(unknown)})]
                        )
                      ]
                    )
                  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)})
  ]
)