(command.CommandList
  children: [
    (command.AndOr
      children: [
        (command.Simple
          blame_tok: <Id.Lit_LBracket '['>
          more_env: []
          words: [
            {<Id.Lit_LBracket '['>}
            {
              (BracedVarSub
                left: <Id.Left_DollarBrace '${'>
                token: <Id.VSub_Name VARIABLES_SH>
                var_name: VARIABLES_SH
                suffix_op: (suffix_op.Unary op:<Id.VTest_Plus _> arg_word:{<true>})
                right: <Id.Right_DollarBrace '}'>
              )
            }
            {<Id.Lit_RBracket ']'>}
          ]
          redirects: []
          do_fork: T
        )
        (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
      ]
      ops: [<Id.Op_DAmp _>]
    )
    (command.Simple
      blame_tok: <declare>
      more_env: []
      words: [{<declare>} {<-g>} {<Id.Lit_VarLike 'VARIABLES_SH='> <true>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [
        {<.>}
        {
          (BracedVarSub
            left: <Id.Left_DollarBrace '${'>
            token: <Id.VSub_Name BASH_SOURCE>
            var_name: BASH_SOURCE
            suffix_op: 
              (suffix_op.Unary
                op: <Id.VOp1_Percent '%'>
                arg_word: {<Id.Lit_Slash '/'> <Id.Lit_Other '*'>}
              )
            right: <Id.Right_DollarBrace '}'>
          ) <'/common.sh'>
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <.>
      more_env: []
      words: [
        {<.>}
        {
          (BracedVarSub
            left: <Id.Left_DollarBrace '${'>
            token: <Id.VSub_Name BASH_SOURCE>
            var_name: BASH_SOURCE
            suffix_op: 
              (suffix_op.Unary
                op: <Id.VOp1_Percent '%'>
                arg_word: {<Id.Lit_Slash '/'> <Id.Lit_Other '*'>}
              )
            right: <Id.Right_DollarBrace '}'>
          ) <'/logger.sh'>
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <declare>
      more_env: []
      words: [
        {<declare>}
        {<-g>}
        {<-A>}
        {<Id.Lit_VarLike 'VARIABLES_METADATA='> 
          (ShArrayLiteral left:<Id.Op_LParen _> words:[] right:<Id.Right_ShArrayLiteral _>)
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <declare>
      more_env: []
      words: [
        {<declare>}
        {<-g>}
        {<-A>}
        {<Id.Lit_VarLike 'VARIABLES_VALUES='> 
          (ShArrayLiteral left:<Id.Op_LParen _> words:[] right:<Id.Right_ShArrayLiteral _>)
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <declare>
      more_env: []
      words: [{<declare>} {<-g>} {<Id.Lit_VarLike 'VARIABLES_INDEX='> <0>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <declare>
      more_env: []
      words: [
        {<declare>}
        {<-g>}
        {<-A>}
        {<Id.Lit_VarLike 'VARIABLES_OFFSETS='> 
          (word_part.AssocArrayLiteral
            left: <Id.Op_LParen _>
            pairs: [(AssocPair key:{<type>} value:{<0>})]
            right: <Id.Right_ShArrayLiteral _>
          )
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <declare>
      more_env: []
      words: [{<declare>} {<-g>} {<Id.Lit_VarLike 'VARIABLES_DEBUG='> <0>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <declare>
      more_env: []
      words: [
        {<declare>}
        {<-g>}
        {<-A>}
        {<Id.Lit_VarLike 'VARIABLES_TYPES='> 
          (ShArrayLiteral left:<Id.Op_LParen _> words:[] right:<Id.Right_ShArrayLiteral _>)
        }
      ]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <variable>
      name: 'variable::new'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(${ Id.VSub_Name VARIABLES_DEBUG)}
                                  right: {<1>}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Sentence
                      child: 
                        (command.Simple
                          blame_tok: <stderr>
                          more_env: []
                          words: [{<stderr>} {(DQ <'variable::new '> (${ Id.VSub_At '@'))}]
                          redirects: []
                          do_fork: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  spids: [162 177]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<token>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ (${ Id.VSub_Number 1))}
                                  right: {(DQ <-name>)}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'token='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'token='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'token='> name:token)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Number 1))}
                        )
                      ]
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [200 219]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'token='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'token='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'token='> name:token)
                      op: assign_op.Equal
                      rhs: {(DQ <'auto#'> (${ Id.VSub_Name VARIABLES_INDEX))}
                    )
                  ]
                  redirects: []
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'VARIABLES_INDEX='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'VARIABLES_INDEX='>
                      lhs: 
                        (sh_lhs_expr.Name
                          left: <Id.Lit_VarLike 'VARIABLES_INDEX='>
                          name: VARIABLES_INDEX
                        )
                      op: assign_op.Equal
                      rhs: 
                        {
                          (word_part.ArithSub
                            left: <Id.Left_DollarDParen '$(('>
                            anode: 
                              (arith_expr.Binary
                                op_id: Id.Arith_Plus
                                left: {(${ Id.VSub_Name VARIABLES_INDEX)}
                                right: {<Id.Lit_Digits 1>}
                              )
                            right: <Id.Right_DollarDParen _>
                          )
                        }
                    )
                  ]
                  redirects: []
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.LogicalOr
                                  left: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_lt
                                      left: 
                                        {
                                          (DQ 
                                            (BracedVarSub
                                              left: <Id.Left_DollarBrace '${'>
                                              token: <Id.VSub_At '@'>
                                              var_name: '@'
                                              prefix_op: <Id.VSub_Pound '#'>
                                              right: <Id.Right_DollarBrace '}'>
                                            )
                                          )
                                        }
                                      right: {<1>}
                                    )
                                  right: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_gt
                                      left: 
                                        {
                                          (DQ 
                                            (BracedVarSub
                                              left: <Id.Left_DollarBrace '${'>
                                              token: <Id.VSub_At '@'>
                                              var_name: '@'
                                              prefix_op: <Id.VSub_Pound '#'>
                                              right: <Id.Right_DollarBrace '}'>
                                            )
                                          )
                                        }
                                      right: {<2>}
                                    )
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <stderr>
                      more_env: []
                      words: [{<stderr>} {(DQ <'Usage: variable::new ?name? <type> <value>'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [267 298]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'type='> (DQ (${ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<Id.KW_Bang '!'>}
                                {
                                  (BracedVarSub
                                    left: <Id.Left_DollarBrace '${'>
                                    token: <Id.VSub_Name VARIABLES_TYPES>
                                    var_name: VARIABLES_TYPES
                                    bracket_op: (bracket_op.ArrayIndex expr:{(${ Id.VSub_Name type)})
                                    suffix_op: 
                                      (suffix_op.Unary
                                        op: <Id.VTest_Plus _>
                                        arg_word: {<isset>}
                                      )
                                    right: <Id.Right_DollarBrace '}'>
                                  )
                                }
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <stderr>
                      more_env: []
                      words: [{<stderr>} {(DQ <'Unknown variable type ['> (${ Id.VSub_Name type) <']'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [327 348]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_eq
                                  left: 
                                    {
                                      (DQ 
                                        (BracedVarSub
                                          left: <Id.Left_DollarBrace '${'>
                                          token: <Id.VSub_At '@'>
                                          var_name: '@'
                                          prefix_op: <Id.VSub_Pound '#'>
                                          right: <Id.Right_DollarBrace '}'>
                                        )
                                      )
                                    }
                                  right: {<1>}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <declare>
                      more_env: []
                      words: [{<declare>} {<Id.Lit_VarLike 'value='> (DQ )}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [371 389]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.Simple
                  blame_tok: <declare>
                  more_env: []
                  words: [{<declare>} {<Id.Lit_VarLike 'value='> (DQ (${ Id.VSub_Number 2))}]
                  redirects: []
                  do_fork: T
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [
                {<declare>}
                {<-a>}
                {<Id.Lit_VarLike 'metadata='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [{($ Id.VSub_DollarName type)}]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_ArrayLhsOpen 'VARIABLES_METADATA['>
              pairs: [
                (AssignPair
                  left: <Id.Lit_ArrayLhsOpen 'VARIABLES_METADATA['>
                  lhs: 
                    (sh_lhs_expr.IndexedName
                      left: <Id.Lit_ArrayLhsOpen 'VARIABLES_METADATA['>
                      name: VARIABLES_METADATA
                      index: {(DQ (${ Id.VSub_Name token))}
                    )
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name metadata>
                          var_name: metadata
                          bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                          right: <Id.Right_DollarBrace '}'>
                        )
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_ArrayLhsOpen 'VARIABLES_VALUES['>
              pairs: [
                (AssignPair
                  left: <Id.Lit_ArrayLhsOpen 'VARIABLES_VALUES['>
                  lhs: 
                    (sh_lhs_expr.IndexedName
                      left: <Id.Lit_ArrayLhsOpen 'VARIABLES_VALUES['>
                      name: VARIABLES_VALUES
                      index: {(DQ (${ Id.VSub_Name token))}
                    )
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName value))}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'RESULT='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'RESULT='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName token))}
                )
              ]
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <_variable>
      name: '_variable::new_p'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [
                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>}
                {(DQ (${ Id.VSub_At '@'))}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ ($ Id.VSub_DollarName RESULT))}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <variable>
      name: 'variable::clone'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(${ Id.VSub_Name VARIABLES_DEBUG)}
                                  right: {<1>}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Sentence
                      child: 
                        (command.Simple
                          blame_tok: <stderr>
                          more_env: []
                          words: [{<stderr>} {(DQ <'variable::clone '> (${ Id.VSub_At '@'))}]
                          redirects: []
                          do_fork: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  spids: [529 544]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ (${ Id.VSub_Number 1))}
                                  right: {(DQ <-name>)}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <declare>
                      more_env: []
                      words: [{<declare>} {<Id.Lit_VarLike 'token='> (DQ (${ Id.VSub_Number 1))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [561 580]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.Simple
                  blame_tok: <declare>
                  more_env: []
                  words: [
                    {<declare>}
                    {<Id.Lit_VarLike 'token='> (DQ <'auto#'> (${ Id.VSub_Name VARIABLES_INDEX))}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'VARIABLES_INDEX='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'VARIABLES_INDEX='>
                      lhs: 
                        (sh_lhs_expr.Name
                          left: <Id.Lit_VarLike 'VARIABLES_INDEX='>
                          name: VARIABLES_INDEX
                        )
                      op: assign_op.Equal
                      rhs: 
                        {
                          (word_part.ArithSub
                            left: <Id.Left_DollarDParen '$(('>
                            anode: 
                              (arith_expr.Binary
                                op_id: Id.Arith_Plus
                                left: {(${ Id.VSub_Name VARIABLES_INDEX)}
                                right: {<Id.Lit_Digits 1>}
                              )
                            right: <Id.Right_DollarDParen _>
                          )
                        }
                    )
                  ]
                  redirects: []
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.LogicalOr
                                  left: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_lt
                                      left: 
                                        {
                                          (DQ 
                                            (BracedVarSub
                                              left: <Id.Left_DollarBrace '${'>
                                              token: <Id.VSub_At '@'>
                                              var_name: '@'
                                              prefix_op: <Id.VSub_Pound '#'>
                                              right: <Id.Right_DollarBrace '}'>
                                            )
                                          )
                                        }
                                      right: {<1>}
                                    )
                                  right: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_gt
                                      left: 
                                        {
                                          (DQ 
                                            (BracedVarSub
                                              left: <Id.Left_DollarBrace '${'>
                                              token: <Id.VSub_At '@'>
                                              var_name: '@'
                                              prefix_op: <Id.VSub_Pound '#'>
                                              right: <Id.Right_DollarBrace '}'>
                                            )
                                          )
                                        }
                                      right: {<2>}
                                    )
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <stderr>
                      more_env: []
                      words: [{<stderr>} {(DQ <'Usage: variable::new ?name? <type> <value>'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [632 663]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'from_token='> (DQ (${ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.Sentence
              child: 
                (command.Simple
                  blame_tok: <variable>
                  more_env: []
                  words: [
                    {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type>}
                    {(DQ (${ Id.VSub_Name from_token))}
                  ]
                  redirects: []
                  do_fork: T
                )
              terminator: <Id.Op_Semi _>
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'type='> (DQ (${ Id.VSub_Name RESULT))}]
              redirects: []
              do_fork: T
            )
            (command.Sentence
              child: 
                (command.Simple
                  blame_tok: <variable>
                  more_env: []
                  words: [
                    {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>}
                    {(DQ (${ Id.VSub_Name from_token))}
                  ]
                  redirects: []
                  do_fork: T
                )
              terminator: <Id.Op_Semi _>
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'value='> (DQ (${ Id.VSub_Name RESULT))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [
                {<declare>}
                {<-a>}
                {<Id.Lit_VarLike 'metadata='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [{($ Id.VSub_DollarName type)}]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_ArrayLhsOpen 'VARIABLES_METADATA['>
              pairs: [
                (AssignPair
                  left: <Id.Lit_ArrayLhsOpen 'VARIABLES_METADATA['>
                  lhs: 
                    (sh_lhs_expr.IndexedName
                      left: <Id.Lit_ArrayLhsOpen 'VARIABLES_METADATA['>
                      name: VARIABLES_METADATA
                      index: {(${ Id.VSub_Name token)}
                    )
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name metadata>
                          var_name: metadata
                          bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                          right: <Id.Right_DollarBrace '}'>
                        )
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_ArrayLhsOpen 'VARIABLES_VALUES['>
              pairs: [
                (AssignPair
                  left: <Id.Lit_ArrayLhsOpen 'VARIABLES_VALUES['>
                  lhs: 
                    (sh_lhs_expr.IndexedName
                      left: <Id.Lit_ArrayLhsOpen 'VARIABLES_VALUES['>
                      name: VARIABLES_VALUES
                      index: {(${ Id.VSub_Name token)}
                    )
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName value))}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'RESULT='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'RESULT='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName token))}
                )
              ]
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <variable>
      name: 'variable::set'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(${ Id.VSub_Name VARIABLES_DEBUG)}
                                  right: {<1>}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Sentence
                      child: 
                        (command.Simple
                          blame_tok: <stderr>
                          more_env: []
                          words: [{<stderr>} {(DQ <'variable::set '> (${ Id.VSub_At '@'))}]
                          redirects: []
                          do_fork: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  spids: [812 827]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_ne
                                  left: 
                                    {
                                      (BracedVarSub
                                        left: <Id.Left_DollarBrace '${'>
                                        token: <Id.VSub_At '@'>
                                        var_name: '@'
                                        prefix_op: <Id.VSub_Pound '#'>
                                        right: <Id.Right_DollarBrace '}'>
                                      )
                                    }
                                  right: {<3>}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <stderr>
                      more_env: []
                      words: [{<stderr>} {(DQ <'Usage: variable::set <variable token> <type> <value>'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [843 859]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'token='> (DQ ($ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'type='> (DQ ($ Id.VSub_Number 2))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'value='> (DQ ($ Id.VSub_Number 3))}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<Id.KW_Bang '!'>}
                                {
                                  (BracedVarSub
                                    left: <Id.Left_DollarBrace '${'>
                                    token: <Id.VSub_Name VARIABLES_TYPES>
                                    var_name: VARIABLES_TYPES
                                    bracket_op: (bracket_op.ArrayIndex expr:{(${ Id.VSub_Name type)})
                                    suffix_op: 
                                      (suffix_op.Unary
                                        op: <Id.VTest_Plus _>
                                        arg_word: {<isset>}
                                      )
                                    right: <Id.Right_DollarBrace '}'>
                                  )
                                }
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <stderr>
                      more_env: []
                      words: [{<stderr>} {(DQ <'Unknown variable type ['> (${ Id.VSub_Name type) <']'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [904 925]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [
                {<declare>}
                {<-a>}
                {<Id.Lit_VarLike 'metadata='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [{($ Id.VSub_DollarName type)}]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_ArrayLhsOpen 'VARIABLES_METADATA['>
              pairs: [
                (AssignPair
                  left: <Id.Lit_ArrayLhsOpen 'VARIABLES_METADATA['>
                  lhs: 
                    (sh_lhs_expr.IndexedName
                      left: <Id.Lit_ArrayLhsOpen 'VARIABLES_METADATA['>
                      name: VARIABLES_METADATA
                      index: {(${ Id.VSub_Name token)}
                    )
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name metadata>
                          var_name: metadata
                          bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                          right: <Id.Right_DollarBrace '}'>
                        )
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_ArrayLhsOpen 'VARIABLES_VALUES['>
              pairs: [
                (AssignPair
                  left: <Id.Lit_ArrayLhsOpen 'VARIABLES_VALUES['>
                  lhs: 
                    (sh_lhs_expr.IndexedName
                      left: <Id.Lit_ArrayLhsOpen 'VARIABLES_VALUES['>
                      name: VARIABLES_VALUES
                      index: {(${ Id.VSub_Name token)}
                    )
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName value))}
                )
              ]
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'RESULT='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'RESULT='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                  op: assign_op.Equal
                  rhs: {(DQ )}
                )
              ]
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <variable>
      name: 'variable::type'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(${ Id.VSub_Name VARIABLES_DEBUG)}
                                  right: {<1>}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Sentence
                      child: 
                        (command.Simple
                          blame_tok: <stderr>
                          more_env: []
                          words: [{<stderr>} {(DQ <'variable::type '> (${ Id.VSub_At '@'))}]
                          redirects: []
                          do_fork: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  spids: [1021 1036]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'index='> ($ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<Id.KW_Bang '!'>}
                                {
                                  (DQ 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name VARIABLES_METADATA>
                                      var_name: VARIABLES_METADATA
                                      bracket_op: 
                                        (bracket_op.ArrayIndex
                                          expr: {(${ Id.VSub_Name index)}
                                        )
                                      suffix_op: 
                                        (suffix_op.Unary
                                          op: <Id.VTest_Plus _>
                                          arg_word: {<isset>}
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    )
                                  )
                                }
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <stderr>
                      more_env: []
                      words: [
                        {<stderr>}
                        {(DQ <'The variable token ['> (${ Id.VSub_Name index) <'] does not exist'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [1058 1080]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [
                {<declare>}
                {<-a>}
                {<Id.Lit_VarLike 'metadata='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [
                      {
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name VARIABLES_METADATA>
                          var_name: VARIABLES_METADATA
                          bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName index)})
                          right: <Id.Right_DollarBrace '}'>
                        )
                      }
                    ]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'RESULT='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'RESULT='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (BracedVarSub
                        left: <Id.Left_DollarBrace '${'>
                        token: <Id.VSub_Name metadata>
                        var_name: metadata
                        bracket_op: 
                          (bracket_op.ArrayIndex
                            expr: 
                              {
                                (BracedVarSub
                                  left: <Id.Left_DollarBrace '${'>
                                  token: <Id.VSub_Name VARIABLES_OFFSETS>
                                  var_name: VARIABLES_OFFSETS
                                  bracket_op: 
                                    (bracket_op.ArrayIndex
                                      expr: ($ Id.Lit_ArithVarLike type)
                                    )
                                  right: <Id.Right_DollarBrace '}'>
                                )
                              }
                          )
                        right: <Id.Right_DollarBrace '}'>
                      )
                    }
                )
              ]
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <_variable>
      name: '_variable::type_p'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [
                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type>}
                {(DQ (${ Id.VSub_At '@'))}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ ($ Id.VSub_DollarName RESULT))}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <variable>
      name: 'variable::type::define'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'typeName='> (DQ (${ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [
                {<declare>}
                {<-a>}
                {<Id.Lit_VarLike 'typeParents='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: []
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {
                                  (BracedVarSub
                                    left: <Id.Left_DollarBrace '${'>
                                    token: <Id.VSub_Name VARIABLES_TYPES>
                                    var_name: VARIABLES_TYPES
                                    bracket_op: 
                                      (bracket_op.ArrayIndex
                                        expr: {(${ Id.VSub_Name typeName)}
                                      )
                                    suffix_op: 
                                      (suffix_op.Unary
                                        op: <Id.VTest_Plus _>
                                        arg_word: {<isset>}
                                      )
                                    right: <Id.Right_DollarBrace '}'>
                                  )
                                }
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <stderr>
                      more_env: []
                      words: [
                        {<stderr>}
                        {(DQ <'Variable type ['> (${ Id.VSub_Name typeName) <'] already defined'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [1204 1223]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<-a>} {<superTypes>}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {
                                  (BracedVarSub
                                    left: <Id.Left_DollarBrace '${'>
                                    token: <Id.VSub_Number 2>
                                    var_name: 2
                                    suffix_op: 
                                      (suffix_op.Unary
                                        op: <Id.VTest_Plus _>
                                        arg_word: {<isset>}
                                      )
                                    right: <Id.Right_DollarBrace '}'>
                                  )
                                }
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <declare>
                      more_env: []
                      words: [{<declare>} {<Id.Lit_VarLike 'typeParent='> (DQ (${ Id.VSub_Number 2))}]
                      redirects: []
                      do_fork: T
                    )
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {<Id.KW_Bang '!'>}
                                        {
                                          (BracedVarSub
                                            left: <Id.Left_DollarBrace '${'>
                                            token: <Id.VSub_Name VARIABLES_TYPES>
                                            var_name: VARIABLES_TYPES
                                            bracket_op: 
                                              (bracket_op.ArrayIndex
                                                expr: {($ Id.VSub_DollarName typeParent)}
                                              )
                                            suffix_op: 
                                              (suffix_op.Unary
                                                op: <Id.VTest_Plus _>
                                                arg_word: {<true>}
                                              )
                                            right: <Id.Right_DollarBrace '}'>
                                          )
                                        }
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <stderr>
                              more_env: []
                              words: [
                                {<stderr>}
                                {
                                  (DQ <'Variable type ['> (${ Id.VSub_Name typeName) 
                                    <'] declare unknown parent type ['> (${ Id.VSub_Name typeParent) <']'>
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Exit exit>
                              arg_word: {<1>}
                            )
                          ]
                          spids: [1280 1299]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'typeParents+='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'typeParents+='>
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'typeParents+='>
                              name: typeParents
                            )
                          op: assign_op.PlusEqual
                          rhs: 
                            {
                              (ShArrayLiteral
                                left: <Id.Op_LParen _>
                                words: [{(DQ (${ Id.VSub_Name typeParent))}]
                                right: <Id.Right_ShArrayLiteral _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'typeParents+='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'typeParents+='>
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'typeParents+='>
                              name: typeParents
                            )
                          op: assign_op.PlusEqual
                          rhs: 
                            {
                              (ShArrayLiteral
                                left: <Id.Op_LParen _>
                                words: [
                                  {
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name VARIABLES_TYPES>
                                      var_name: VARIABLES_TYPES
                                      bracket_op: 
                                        (bracket_op.ArrayIndex
                                          expr: {(${ Id.VSub_Name typeParent)}
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    )
                                  }
                                ]
                                right: <Id.Right_ShArrayLiteral _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                    (command.ShAssignment
                      left: <Id.Lit_ArrayLhsOpen 'VARIABLES_TYPES['>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_ArrayLhsOpen 'VARIABLES_TYPES['>
                          lhs: 
                            (sh_lhs_expr.IndexedName
                              left: <Id.Lit_ArrayLhsOpen 'VARIABLES_TYPES['>
                              name: VARIABLES_TYPES
                              index: {(${ Id.VSub_Name typeName)}
                            )
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  left: <Id.Left_DollarBrace '${'>
                                  token: <Id.VSub_Name typeParents>
                                  var_name: typeParents
                                  bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                  right: <Id.Right_DollarBrace '}'>
                                )
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                  ]
                  spids: [1253 1267]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.ShAssignment
                  left: <Id.Lit_ArrayLhsOpen 'VARIABLES_TYPES['>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_ArrayLhsOpen 'VARIABLES_TYPES['>
                      lhs: 
                        (sh_lhs_expr.IndexedName
                          left: <Id.Lit_ArrayLhsOpen 'VARIABLES_TYPES['>
                          name: VARIABLES_TYPES
                          index: {(${ Id.VSub_Name typeName)}
                        )
                      op: assign_op.Equal
                      rhs: {(DQ )}
                    )
                  ]
                  redirects: []
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <variable>
      name: 'variable::type::instanceOf'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'token='> (DQ (${ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'expectedType='> (DQ (${ Id.VSub_Number 2))}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <variable>
                              more_env: []
                              words: [
                                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type> 
                                  <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <exactlyA>
                                }
                                {(DQ (${ Id.VSub_Name token))}
                                {(DQ (${ Id.VSub_Name expectedType))}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})]
                  spids: [1433 1457]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [
                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type>}
                {(DQ (${ Id.VSub_Name token))}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'actualType='> (DQ (${ Id.VSub_Name RESULT))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [
                {<declare>}
                {<-a>}
                {<Id.Lit_VarLike 'actualSuperTypes='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [
                      {
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name VARIABLES_TYPES>
                          var_name: VARIABLES_TYPES
                          bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName actualType)})
                          right: <Id.Right_DollarBrace '}'>
                        )
                      }
                    ]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {
                                  (BracedVarSub
                                    left: <Id.Left_DollarBrace '${'>
                                    token: <Id.VSub_Name actualSuperTypes>
                                    var_name: actualSuperTypes
                                    prefix_op: <Id.VSub_Pound '#'>
                                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                    right: <Id.Right_DollarBrace '}'>
                                  )
                                }
                                {<-lt>}
                                {<1>}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Sentence
                      child: 
                        (command.ControlFlow
                          keyword: <Id.ControlFlow_Return return>
                          arg_word: {<1>}
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  spids: [1507 1527]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<superType>}]
              redirects: []
              do_fork: T
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [superType]
              iterable: 
                (for_iter.Words
                  words: [
                    {
                      (DQ 
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name actualSuperTypes>
                          var_name: actualSuperTypes
                          bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                          right: <Id.Right_DollarBrace '}'>
                        )
                      )
                    }
                  ]
                )
              semi_tok: <Id.Op_Semi _>
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <Id.Lit_LBracket '['>
                                      more_env: []
                                      words: [
                                        {<Id.Lit_LBracket '['>}
                                        {(DQ (${ Id.VSub_Name expectedType))}
                                        {<Id.Lit_Equals '='> <Id.Lit_Equals '='>}
                                        {(DQ (${ Id.VSub_Name superType))}
                                        {<Id.Lit_RBracket ']'>}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                              arg_word: {<0>}
                            )
                          ]
                          spids: [1563 1586]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <variable>
      name: 'variable::type::instanceOfOrExit'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'valueToken='> (DQ (${ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'expectedType='> (DQ (${ Id.VSub_Number 2))}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <variable>
                                  more_env: []
                                  words: [
                                    {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type> 
                                      <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <instanceOf>
                                    }
                                    {(DQ (${ Id.VSub_Name valueToken))}
                                    {(DQ (${ Id.VSub_Name expectedType))}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <variable>
                      more_env: []
                      words: [
                        {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type>}
                        {(DQ (${ Id.VSub_Name valueToken))}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <stderr>
                      more_env: []
                      words: [
                        {<stderr>}
                        {
                          (DQ <'Variable ['> (${ Id.VSub_Name valueToken) <'] is not of type ['> 
                            (${ Id.VSub_Name expectedType) <'] (actual type ['> (${ Id.VSub_Name RESULT) <'])'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [1644 1670]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <variable>
      name: 'variable::type::exactlyA'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'token='> (DQ (${ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'expectedType='> (DQ (${ Id.VSub_Number 2))}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {<Id.KW_Bang '!'>}
                                {
                                  (BracedVarSub
                                    left: <Id.Left_DollarBrace '${'>
                                    token: <Id.VSub_Name VARIABLES_TYPES>
                                    var_name: VARIABLES_TYPES
                                    bracket_op: 
                                      (bracket_op.ArrayIndex
                                        expr: {($ Id.VSub_DollarName expectedType)}
                                      )
                                    suffix_op: (suffix_op.Unary op:<Id.VTest_Plus _> arg_word:{<true>})
                                    right: <Id.Right_DollarBrace '}'>
                                  )
                                }
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <stderr>
                      more_env: []
                      words: [{<stderr>} {(DQ <'Unknown type ['> (${ Id.VSub_Name expectedType) <']'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [1759 1778]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [
                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type>}
                {(DQ (${ Id.VSub_Name token))}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'actualType='> (DQ (${ Id.VSub_Name RESULT))}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <Id.Lit_LBracket '['>
                              more_env: []
                              words: [
                                {<Id.Lit_LBracket '['>}
                                {(DQ (${ Id.VSub_Name actualType))}
                                {<Id.Lit_Equals '='> <Id.Lit_Equals '='>}
                                {(DQ (${ Id.VSub_Name expectedType))}
                                {<Id.Lit_RBracket ']'>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<0>})]
                  spids: [1824 1846]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <variable>
      name: 'variable::value'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(${ Id.VSub_Name VARIABLES_DEBUG)}
                                  right: {<1>}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Sentence
                      child: 
                        (command.Simple
                          blame_tok: <stderr>
                          more_env: []
                          words: [{<stderr>} {(DQ <'variable::value '> (${ Id.VSub_At '@'))}]
                          redirects: []
                          do_fork: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                  ]
                  spids: [1880 1895]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'index='> (DQ (${ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <Id.Lit_LBracket '['>
                                  more_env: []
                                  words: [
                                    {<Id.Lit_LBracket '['>}
                                    {
                                      (DQ 
                                        (BracedVarSub
                                          left: <Id.Left_DollarBrace '${'>
                                          token: <Id.VSub_Name VARIABLES_VALUES>
                                          var_name: VARIABLES_VALUES
                                          bracket_op: 
                                            (bracket_op.ArrayIndex
                                              expr: {(${ Id.VSub_Name index)}
                                            )
                                          suffix_op: 
                                            (suffix_op.Unary
                                              op: <Id.VTest_Plus _>
                                              arg_word: {<isset>}
                                            )
                                          right: <Id.Right_DollarBrace '}'>
                                        )
                                      )
                                    }
                                    {<Id.Lit_RBracket ']'>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <stderr>
                      more_env: []
                      words: [
                        {<stderr>}
                        {(DQ <'The variable token ['> (${ Id.VSub_Name index) <'] does not exist'>)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [1921 1943]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'RESULT='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'RESULT='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (BracedVarSub
                        left: <Id.Left_DollarBrace '${'>
                        token: <Id.VSub_Name VARIABLES_VALUES>
                        var_name: VARIABLES_VALUES
                        bracket_op: (bracket_op.ArrayIndex expr:{(${ Id.VSub_Name index)})
                        right: <Id.Right_DollarBrace '}'>
                      )
                    }
                )
              ]
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <_variable>
      name: '_variable::value_p'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [
                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>}
                {(DQ (${ Id.VSub_At '@'))}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ ($ Id.VSub_DollarName RESULT))}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <variable>
      name: 'variable::debug'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'token='> (DQ (${ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.Sentence
              child: 
                (command.Simple
                  blame_tok: <variable>
                  more_env: []
                  words: [
                    {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type>}
                    {($ Id.VSub_DollarName token)}
                  ]
                  redirects: []
                  do_fork: T
                )
              terminator: <Id.Op_Semi _>
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'type='> ($ Id.VSub_DollarName RESULT)}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <functionExists>
                              more_env: []
                              words: [
                                {<functionExists>}
                                {(DQ <'variable::'> (${ Id.VSub_Name type) <'::debug'>)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <eval>
                      more_env: []
                      words: [
                        {<eval>}
                        {
                          (DQ <'variable::'> (${ Id.VSub_Name type) <'::debug '> (${ Id.VSub_Name token))
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'RESULT='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'RESULT='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName RESULT)}
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
                  ]
                  spids: [2050 2063]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_z
                                  child: 
                                    {
                                      (BracedVarSub
                                        left: <Id.Left_DollarBrace '${'>
                                        token: <Id.VSub_Name VARIABLES_TYPES>
                                        var_name: VARIABLES_TYPES
                                        bracket_op: 
                                          (bracket_op.ArrayIndex
                                            expr: {(${ Id.VSub_Name type)}
                                          )
                                        right: <Id.Right_DollarBrace '}'>
                                      )
                                    }
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <variable>
                      more_env: []
                      words: [
                        {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <debug> <Id.Lit_Colon ':'> 
                          <Id.Lit_Colon ':'> <simple>
                        }
                        {($ Id.VSub_DollarName token)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'RESULT='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'RESULT='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName RESULT)}
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
                  ]
                  spids: [2092 2110]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [
                {<declare>}
                {<-a>}
                {<Id.Lit_VarLike 'actualSuperTypes='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [
                      {
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name VARIABLES_TYPES>
                          var_name: VARIABLES_TYPES
                          bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName type)})
                          right: <Id.Right_DollarBrace '}'>
                        )
                      }
                    ]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<superType>}]
              redirects: []
              do_fork: T
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [superType]
              iterable: 
                (for_iter.Words
                  words: [
                    {
                      (DQ 
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name actualSuperTypes>
                          var_name: actualSuperTypes
                          bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                          right: <Id.Right_DollarBrace '}'>
                        )
                      )
                    }
                  ]
                )
              semi_tok: <Id.Op_Semi _>
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <functionExists>
                                      more_env: []
                                      words: [
                                        {<functionExists>}
                                        {(DQ <'variable::'> (${ Id.VSub_Name superType) <'::debug'>)}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <eval>
                              more_env: []
                              words: [
                                {<eval>}
                                {
                                  (DQ <'variable::'> (${ Id.VSub_Name superType) <'::debug '> 
                                    (${ Id.VSub_Name token)
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'RESULT='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'RESULT='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName RESULT)}
                                )
                              ]
                              redirects: []
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                            )
                          ]
                          spids: [2174 2187]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [
                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <debug> <Id.Lit_Colon ':'> 
                  <Id.Lit_Colon ':'> <simple>
                }
                {($ Id.VSub_DollarName token)}
              ]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'RESULT='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'RESULT='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName RESULT)}
                )
              ]
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <variable>
      name: 'variable::debug::simple'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'token='> (DQ (${ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [
                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type>}
                {(DQ (${ Id.VSub_Name token))}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'type='> (DQ (${ Id.VSub_Name RESULT))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [
                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>}
                {(DQ (${ Id.VSub_Name token))}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'value='> (DQ (${ Id.VSub_Name RESULT))}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'RESULT='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'RESULT='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name type) <' :: '> (${ Id.VSub_Name value))}
                )
              ]
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <variable>
      name: 'variable::debug::join'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'joinChar='> (${ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: 
                                    {
                                      (BracedVarSub
                                        left: <Id.Left_DollarBrace '${'>
                                        token: <Id.VSub_At '@'>
                                        var_name: '@'
                                        prefix_op: <Id.VSub_Pound '#'>
                                        right: <Id.Right_DollarBrace '}'>
                                      )
                                    }
                                  right: {<1>}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'RESULT='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'RESULT='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                          op: assign_op.Equal
                          rhs: {(DQ )}
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
                  ]
                  spids: [2342 2358]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: 
                                    {
                                      (BracedVarSub
                                        left: <Id.Left_DollarBrace '${'>
                                        token: <Id.VSub_At '@'>
                                        var_name: '@'
                                        prefix_op: <Id.VSub_Pound '#'>
                                        right: <Id.Right_DollarBrace '}'>
                                      )
                                    }
                                  right: {<2>}
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'RESULT='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'RESULT='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Number 2))}
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
                  ]
                  spids: [2373 2389]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [
                {<declare>}
                {<-a>}
                {<Id.Lit_VarLike 'items='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [
                      {
                        (DQ 
                          (BracedVarSub
                            left: <Id.Left_DollarBrace '${'>
                            token: <Id.VSub_At '@'>
                            var_name: '@'
                            suffix_op: (suffix_op.Slice begin:{<Id.Lit_Digits 2>})
                            right: <Id.Arith_RBrace _>
                          )
                        )
                      }
                    ]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<size>} {<declare>} {<max_index>}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'RESULT='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'RESULT='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Number 2))}
                )
              ]
              redirects: []
            )
            (command.DParen
              left: <Id.Op_DLeftParen _>
              child: 
                (arith_expr.Binary
                  op_id: Id.Arith_Comma
                  left: 
                    (arith_expr.BinaryAssign
                      op_id: Id.Arith_Equal
                      left: ($ Id.Lit_ArithVarLike size)
                      right: 
                        {
                          (BracedVarSub
                            left: <Id.Left_DollarBrace '${'>
                            token: <Id.VSub_Name items>
                            var_name: items
                            prefix_op: <Id.VSub_Pound '#'>
                            bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                            right: <Id.Right_DollarBrace '}'>
                          )
                        }
                    )
                  right: 
                    (arith_expr.BinaryAssign
                      op_id: Id.Arith_Equal
                      left: ($ Id.Lit_ArithVarLike max_index)
                      right: 
                        (arith_expr.Binary
                          op_id: Id.Arith_Minus
                          left: ($ Id.Lit_ArithVarLike size)
                          right: {<Id.Lit_Digits 1>}
                        )
                    )
                )
              right: <Id.Op_DRightParen _>
              redirects: []
            )
            (command.ForExpr
              keyword: <Id.KW_For for>
              init: 
                (arith_expr.BinaryAssign
                  op_id: Id.Arith_Equal
                  left: ($ Id.Lit_ArithVarLike i)
                  right: {<Id.Lit_Digits 1>}
                )
              cond: 
                (arith_expr.Binary
                  op_id: Id.Arith_LessEqual
                  left: ($ Id.Lit_ArithVarLike i)
                  right: ($ Id.Lit_ArithVarLike max_index)
                )
              update: 
                (arith_expr.BinaryAssign
                  op_id: Id.Arith_PlusEqual
                  left: ($ Id.Lit_ArithVarLike i)
                  right: {<Id.Lit_Digits 1>}
                )
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'RESULT='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'RESULT='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ (${ Id.VSub_Name RESULT) (${ Id.VSub_Name joinChar) 
                                (BracedVarSub
                                  left: <Id.Left_DollarBrace '${'>
                                  token: <Id.VSub_Name items>
                                  var_name: items
                                  bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName i)})
                                  right: <Id.Right_DollarBrace '}'>
                                )
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <variable>
      name: 'variable::toSexp'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'token='> (DQ (${ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.Sentence
              child: 
                (command.Simple
                  blame_tok: <variable>
                  more_env: []
                  words: [
                    {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type>}
                    {($ Id.VSub_DollarName token)}
                  ]
                  redirects: []
                  do_fork: T
                )
              terminator: <Id.Op_Semi _>
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'type='> ($ Id.VSub_DollarName RESULT)}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <functionExists>
                              more_env: []
                              words: [
                                {<functionExists>}
                                {(DQ <'variable::'> (${ Id.VSub_Name type) <'::toSexp'>)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <eval>
                      more_env: []
                      words: [
                        {<eval>}
                        {
                          (DQ <'variable::'> (${ Id.VSub_Name type) <'::toSexp '> 
                            (${ Id.VSub_Name token)
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'RESULT='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'RESULT='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName RESULT)}
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
                  ]
                  spids: [2549 2562]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              left: <Id.KW_DLeftBracket '[['>
                              expr: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_z
                                  child: 
                                    {
                                      (BracedVarSub
                                        left: <Id.Left_DollarBrace '${'>
                                        token: <Id.VSub_Name VARIABLES_TYPES>
                                        var_name: VARIABLES_TYPES
                                        bracket_op: 
                                          (bracket_op.ArrayIndex
                                            expr: {(${ Id.VSub_Name type)}
                                          )
                                        right: <Id.Right_DollarBrace '}'>
                                      )
                                    }
                                )
                              right: <Id.Lit_DRightBracket ']]'>
                              redirects: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <variable>
                      more_env: []
                      words: [
                        {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <debug>}
                        {($ Id.VSub_DollarName token)}
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'RESULT='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'RESULT='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_DollarName RESULT)}
                        )
                      ]
                      redirects: []
                    )
                    (command.ControlFlow keyword:<Id.ControlFlow_Return return>)
                  ]
                  spids: [2591 2609]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [
                {<declare>}
                {<-a>}
                {<Id.Lit_VarLike 'actualSuperTypes='> 
                  (ShArrayLiteral
                    left: <Id.Op_LParen _>
                    words: [
                      {
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name VARIABLES_TYPES>
                          var_name: VARIABLES_TYPES
                          bracket_op: (bracket_op.ArrayIndex expr:{($ Id.VSub_DollarName type)})
                          right: <Id.Right_DollarBrace '}'>
                        )
                      }
                    ]
                    right: <Id.Right_ShArrayLiteral _>
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<superType>}]
              redirects: []
              do_fork: T
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [superType]
              iterable: 
                (for_iter.Words
                  words: [
                    {
                      (DQ 
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name actualSuperTypes>
                          var_name: actualSuperTypes
                          bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                          right: <Id.Right_DollarBrace '}'>
                        )
                      )
                    }
                  ]
                )
              semi_tok: <Id.Op_Semi _>
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <functionExists>
                                      more_env: []
                                      words: [
                                        {<functionExists>}
                                        {(DQ <'variable::'> (${ Id.VSub_Name superType) <'::toSexp'>)}
                                      ]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <eval>
                              more_env: []
                              words: [
                                {<eval>}
                                {
                                  (DQ <'variable::'> (${ Id.VSub_Name superType) <'::toSexp '> 
                                    (${ Id.VSub_Name token)
                                  )
                                }
                              ]
                              redirects: []
                              do_fork: T
                            )
                            (command.ShAssignment
                              left: <Id.Lit_VarLike 'RESULT='>
                              pairs: [
                                (AssignPair
                                  left: <Id.Lit_VarLike 'RESULT='>
                                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_DollarName RESULT)}
                                )
                              ]
                              redirects: []
                            )
                            (command.ControlFlow
                              keyword: <Id.ControlFlow_Return return>
                            )
                          ]
                          spids: [2670 2683]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [
                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <debug>}
                {($ Id.VSub_DollarName token)}
              ]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'RESULT='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'RESULT='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'RESULT='> name:RESULT)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName RESULT)}
                )
              ]
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <variable>
      name: 'variable::printMetadata'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <stderr>
              more_env: []
              words: [{<stderr>} {(DQ <VARIABLES_METADATA>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<keys>}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'keys='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'keys='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'keys='> name:keys)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Pipeline
                            children: [
                              (command.ForEach
                                keyword: <Id.KW_For for>
                                iter_names: [var]
                                iterable: 
                                  (for_iter.Words
                                    words: [
                                      {
                                        (DQ 
                                          (BracedVarSub
                                            left: <Id.Left_DollarBrace '${'>
                                            token: <Id.VSub_Name VARIABLES_METADATA>
                                            var_name: VARIABLES_METADATA
                                            prefix_op: <Id.VSub_Bang '!'>
                                            bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                            right: <Id.Right_DollarBrace '}'>
                                          )
                                        )
                                      }
                                    ]
                                  )
                                semi_tok: <Id.Op_Semi _>
                                body: 
                                  (command.DoGroup
                                    left: <Id.KW_Do do>
                                    children: [
                                      (command.Sentence
                                        child: 
                                          (command.Simple
                                            blame_tok: <echo>
                                            more_env: []
                                            words: [{<echo>} {(DQ ($ Id.VSub_DollarName var))}]
                                            redirects: []
                                            do_fork: T
                                          )
                                        terminator: <Id.Op_Semi _>
                                      )
                                    ]
                                    right: <Id.KW_Done done>
                                  )
                                redirects: []
                              )
                              (command.Simple
                                blame_tok: <sort>
                                more_env: []
                                words: [{<sort>} {<-n>}]
                                redirects: []
                                do_fork: T
                              )
                            ]
                            ops: [<Id.Op_Pipe _>]
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [key]
              iterable: (for_iter.Words words:[{(${ Id.VSub_Name keys)}])
              semi_tok: <Id.Op_Semi _>
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <stderr>
                      more_env: []
                      words: [
                        {<stderr>}
                        {
                          (DQ <'    ['> (${ Id.VSub_Name key) <']=['> 
                            (BracedVarSub
                              left: <Id.Left_DollarBrace '${'>
                              token: <Id.VSub_Name VARIABLES_METADATA>
                              var_name: VARIABLES_METADATA
                              bracket_op: (bracket_op.ArrayIndex expr:{(${ Id.VSub_Name key)})
                              right: <Id.Right_DollarBrace '}'>
                            ) <']'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Simple
              blame_tok: <stderr>
              more_env: []
              words: [{<stderr>} {(DQ <VARIABLES_VALUES>)}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'keys='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'keys='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'keys='> name:keys)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Pipeline
                            children: [
                              (command.ForEach
                                keyword: <Id.KW_For for>
                                iter_names: [var]
                                iterable: 
                                  (for_iter.Words
                                    words: [
                                      {
                                        (DQ 
                                          (BracedVarSub
                                            left: <Id.Left_DollarBrace '${'>
                                            token: <Id.VSub_Name VARIABLES_VALUES>
                                            var_name: VARIABLES_VALUES
                                            prefix_op: <Id.VSub_Bang '!'>
                                            bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                            right: <Id.Right_DollarBrace '}'>
                                          )
                                        )
                                      }
                                    ]
                                  )
                                semi_tok: <Id.Op_Semi _>
                                body: 
                                  (command.DoGroup
                                    left: <Id.KW_Do do>
                                    children: [
                                      (command.Sentence
                                        child: 
                                          (command.Simple
                                            blame_tok: <echo>
                                            more_env: []
                                            words: [{<echo>} {(DQ ($ Id.VSub_DollarName var))}]
                                            redirects: []
                                            do_fork: T
                                          )
                                        terminator: <Id.Op_Semi _>
                                      )
                                    ]
                                    right: <Id.KW_Done done>
                                  )
                                redirects: []
                              )
                              (command.Simple
                                blame_tok: <sort>
                                more_env: []
                                words: [{<sort>} {<-n>}]
                                redirects: []
                                do_fork: T
                              )
                            ]
                            ops: [<Id.Op_Pipe _>]
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.ForEach
              keyword: <Id.KW_For for>
              iter_names: [key]
              iterable: (for_iter.Words words:[{(${ Id.VSub_Name keys)}])
              semi_tok: <Id.Op_Semi _>
              body: 
                (command.DoGroup
                  left: <Id.KW_Do do>
                  children: [
                    (command.Simple
                      blame_tok: <stderr>
                      more_env: []
                      words: [
                        {<stderr>}
                        {
                          (DQ <'    ['> (${ Id.VSub_Name key) <']=['> 
                            (BracedVarSub
                              left: <Id.Left_DollarBrace '${'>
                              token: <Id.VSub_Name VARIABLES_VALUES>
                              var_name: VARIABLES_VALUES
                              bracket_op: (bracket_op.ArrayIndex expr:{(${ Id.VSub_Name key)})
                              right: <Id.Right_DollarBrace '}'>
                            ) <']'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.KW_Done done>
                )
              redirects: []
            )
            (command.Simple
              blame_tok: <stderr>
              more_env: []
              words: [{<stderr>} {(DQ <'VARIABLES_INDEX='> (${ Id.VSub_Name VARIABLES_INDEX))}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      keyword: <Id.KW_Function function>
      name_tok: <variable>
      name: 'variable::print'
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'token='> ($ Id.VSub_Number 1)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'indent='> ($ Id.VSub_Number 2)}]
              redirects: []
              do_fork: T
            )
            (command.Sentence
              child: 
                (command.Simple
                  blame_tok: <variable>
                  more_env: []
                  words: [
                    {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type>}
                    {(${ Id.VSub_Name token)}
                  ]
                  redirects: []
                  do_fork: T
                )
              terminator: <Id.Op_Semi _>
            )
            (command.Simple
              blame_tok: <declare>
              more_env: []
              words: [{<declare>} {<Id.Lit_VarLike 'type='> ($ Id.VSub_DollarName RESULT)}]
              redirects: []
              do_fork: T
            )
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{(${ Id.VSub_Name type)})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <list>
                  pattern: (pat.Words words:[{<list>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ (${ Id.VSub_Name indent) (${ Id.VSub_Name type) <'('> 
                            (${ Id.VSub_Name token) <') :: ['>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Sentence
                      child: 
                        (command.Simple
                          blame_tok: <variable>
                          more_env: []
                          words: [
                            {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>}
                            {(${ Id.VSub_Name token)}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      terminator: <Id.Op_Semi _>
                    )
                    (command.Simple
                      blame_tok: <declare>
                      more_env: []
                      words: [
                        {<declare>}
                        {<-a>}
                        {<Id.Lit_VarLike 'values='> 
                          (ShArrayLiteral
                            left: <Id.Op_LParen _>
                            words: [{($ Id.VSub_DollarName RESULT)}]
                            right: <Id.Right_ShArrayLiteral _>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.ForEach
                      keyword: <Id.KW_For for>
                      iter_names: [value]
                      iterable: 
                        (for_iter.Words
                          words: [
                            {
                              (BracedVarSub
                                left: <Id.Left_DollarBrace '${'>
                                token: <Id.VSub_Name values>
                                var_name: values
                                bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                                right: <Id.Right_DollarBrace '}'>
                              )
                            }
                          ]
                        )
                      semi_tok: <Id.Op_Semi _>
                      body: 
                        (command.DoGroup
                          left: <Id.KW_Do do>
                          children: [
                            (command.Simple
                              blame_tok: <variable>
                              more_env: []
                              words: [
                                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <print>}
                                {(${ Id.VSub_Name value)}
                                {(DQ (${ Id.VSub_Name indent) <'  '>)}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          right: <Id.KW_Done done>
                        )
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ (${ Id.VSub_Name indent) <']'>)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <string>
                  pattern: (pat.Words words:[{<string>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ (${ Id.VSub_Name indent) (${ Id.VSub_Name type) <'('> 
                            (${ Id.VSub_Name token) <') :: ['> 
                            (CommandSub
                              left_token: <Id.Left_DollarParen '$('>
                              child: 
                                (command.Simple
                                  blame_tok: <_variable>
                                  more_env: []
                                  words: [
                                    {<_variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value_p>}
                                    {(${ Id.VSub_Name token)}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              right: <Id.Eof_RParen _>
                            ) <']'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <integer>
                  pattern: (pat.Words words:[{<integer>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [
                        {<echo>}
                        {
                          (DQ (${ Id.VSub_Name indent) (${ Id.VSub_Name type) <'('> 
                            (${ Id.VSub_Name token) <') :: ['> 
                            (CommandSub
                              left_token: <Id.Left_DollarParen '$('>
                              child: 
                                (command.Simple
                                  blame_tok: <_variable>
                                  more_env: []
                                  words: [
                                    {<_variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value_p>}
                                    {(${ Id.VSub_Name token)}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              right: <Id.Eof_RParen _>
                            ) <']'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <stderr>
                      more_env: []
                      words: [
                        {<stderr>}
                        {
                          (DQ <'Invalid variable type ['> (${ Id.VSub_Name type) <'] for token ['> 
                            (${ Id.VSub_Name token) <']'>
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <variable>
                      more_env: []
                      words: [{<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <printMetadata>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Simple
                      blame_tok: <Id.Lit_LBracket '['>
                      more_env: []
                      words: [
                        {<Id.Lit_LBracket '['>}
                        {($ Id.VSub_Number 0)}
                        {<Id.KW_Bang '!'> <Id.Lit_Equals '='>}
                        {($ Id.VSub_DollarName BASH_SOURCE)}
                        {<Id.Lit_RBracket ']'>}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return>)]
          spids: [3189 3203]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
    (command.Simple
      blame_tok: <declare>
      more_env: []
      words: [{<declare>} {<testToken>}]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <variable>
      more_env: []
      words: [
        {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> 
          <define>
        }
        {<atom>}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <variable>
      more_env: []
      words: [
        {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> 
          <define>
        }
        {<string>}
        {<atom>}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <variable>
      more_env: []
      words: [
        {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> 
          <define>
        }
        {<number>}
        {<atom>}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <variable>
      more_env: []
      words: [
        {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> 
          <define>
        }
        {<integer>}
        {<number>}
      ]
      redirects: []
      do_fork: T
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [{<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<integer>} {<12>}]
              redirects: []
              do_fork: T
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Simple
          blame_tok: <declare>
          more_env: []
          words: [{<declare>} {<Id.Lit_VarLike 'atomId_1='> ($ Id.VSub_DollarName RESULT)}]
          redirects: []
          do_fork: T
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [
                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type>}
                {($ Id.VSub_DollarName atomId_1)}
              ]
              redirects: []
              do_fork: T
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Simple
          blame_tok: <assert>
          more_env: []
          words: [
            {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>}
            {<integer>}
            {(DQ ($ Id.VSub_DollarName RESULT))}
            {<Type>}
            {<of>}
            {<first>}
            {<atom>}
          ]
          redirects: []
          do_fork: T
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [
                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type>}
                {(DQ (${ Id.VSub_Name atomId_1))}
              ]
              redirects: []
              do_fork: T
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Simple
          blame_tok: <assert>
          more_env: []
          words: [
            {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>}
            {<integer>}
            {(DQ ($ Id.VSub_DollarName RESULT))}
            {<Type>}
            {<of>}
            {<first>}
            {<atom>}
          ]
          redirects: []
          do_fork: T
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [
                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>}
                {($ Id.VSub_DollarName atomId_1)}
              ]
              redirects: []
              do_fork: T
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Simple
          blame_tok: <assert>
          more_env: []
          words: [
            {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>}
            {<12>}
            {(DQ ($ Id.VSub_DollarName RESULT))}
            {<Value>}
            {<of>}
            {<first>}
            {<atom>}
          ]
          redirects: []
          do_fork: T
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [
                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>}
                {($ Id.VSub_DollarName atomId_1)}
              ]
              redirects: []
              do_fork: T
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Simple
          blame_tok: <assert>
          more_env: []
          words: [
            {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>}
            {<12>}
            {(DQ ($ Id.VSub_DollarName RESULT))}
            {<Value>}
            {<of>}
            {<first>}
            {<atom>}
          ]
          redirects: []
          do_fork: T
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [
                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>}
                {<string>}
                {(DQ <'hello there'>)}
              ]
              redirects: []
              do_fork: T
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Simple
          blame_tok: <declare>
          more_env: []
          words: [{<declare>} {<Id.Lit_VarLike 'atomId_2='> ($ Id.VSub_DollarName RESULT)}]
          redirects: []
          do_fork: T
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [
                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type>}
                {($ Id.VSub_DollarName atomId_2)}
              ]
              redirects: []
              do_fork: T
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Simple
          blame_tok: <assert>
          more_env: []
          words: [
            {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>}
            {<string>}
            {(DQ ($ Id.VSub_DollarName RESULT))}
            {<Type>}
            {<of>}
            {<second>}
            {<atom>}
          ]
          redirects: []
          do_fork: T
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [
                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>}
                {($ Id.VSub_DollarName atomId_2)}
              ]
              redirects: []
              do_fork: T
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Simple
          blame_tok: <assert>
          more_env: []
          words: [
            {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>}
            {(DQ <'hello there'>)}
            {(DQ ($ Id.VSub_DollarName RESULT))}
            {<Value>}
            {<of>}
            {<second>}
            {<atom>}
          ]
          redirects: []
          do_fork: T
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [
                {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <value>}
                {($ Id.VSub_DollarName atomId_1)}
              ]
              redirects: []
              do_fork: T
            )
          terminator: <Id.Op_Semi _>
        )
        (command.Simple
          blame_tok: <assert>
          more_env: []
          words: [
            {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>}
            {<12>}
            {(DQ ($ Id.VSub_DollarName RESULT))}
            {<Value>}
            {<of>}
            {<first>}
            {<atom>}
            {<remains>}
          ]
          redirects: []
          do_fork: T
        )
      ]
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [{<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<integer>}]
              redirects: []
              do_fork: T
            )
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          left: <Id.Lit_VarLike 'testToken='>
          pairs: [
            (AssignPair
              left: <Id.Lit_VarLike 'testToken='>
              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'testToken='> name:testToken)
              op: assign_op.Equal
              rhs: {(DQ (${ Id.VSub_Name RESULT))}
            )
          ]
          redirects: []
        )
      ]
    )
    (command.Simple
      blame_tok: <variable>
      more_env: []
      words: [
        {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type>}
        {($ Id.VSub_DollarName testToken)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <variable>
      more_env: []
      words: [
        {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> 
          <exactlyA>
        }
        {(DQ (${ Id.VSub_Name testToken))}
        {<integer>}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <assert>
      more_env: []
      words: [
        {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>}
        {<0>}
        {($ Id.VSub_QMark '?')}
        {(DQ <'exactlyA same'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <variable>
      more_env: []
      words: [
        {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> 
          <exactlyA>
        }
        {(DQ (${ Id.VSub_Name testToken))}
        {<number>}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <assert>
      more_env: []
      words: [
        {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>}
        {<1>}
        {($ Id.VSub_QMark '?')}
        {(DQ <'exactlyA super'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <variable>
      more_env: []
      words: [
        {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> 
          <exactlyA>
        }
        {(DQ (${ Id.VSub_Name testToken))}
        {<string>}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <assert>
      more_env: []
      words: [
        {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>}
        {<1>}
        {($ Id.VSub_QMark '?')}
        {(DQ <'exactlyA other'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.CommandList
      children: [
        (command.Sentence
          child: 
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [{<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <new>} {<number>}]
              redirects: []
              do_fork: T
            )
          terminator: <Id.Op_Semi _>
        )
        (command.ShAssignment
          left: <Id.Lit_VarLike 'testToken='>
          pairs: [
            (AssignPair
              left: <Id.Lit_VarLike 'testToken='>
              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'testToken='> name:testToken)
              op: assign_op.Equal
              rhs: {(DQ (${ Id.VSub_Name RESULT))}
            )
          ]
          redirects: []
        )
      ]
    )
    (command.Simple
      blame_tok: <variable>
      more_env: []
      words: [
        {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type>}
        {($ Id.VSub_DollarName testToken)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <variable>
      more_env: []
      words: [
        {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> 
          <instanceOf>
        }
        {(DQ (${ Id.VSub_Name testToken))}
        {<integer>}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <assert>
      more_env: []
      words: [
        {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>}
        {<1>}
        {($ Id.VSub_QMark '?')}
        {(DQ <'number instanceOf integer'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <variable>
      more_env: []
      words: [
        {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> 
          <instanceOf>
        }
        {(DQ (${ Id.VSub_Name testToken))}
        {<number>}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <assert>
      more_env: []
      words: [
        {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>}
        {<0>}
        {($ Id.VSub_QMark '?')}
        {(DQ <'number instanceOf number'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <variable>
      more_env: []
      words: [
        {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> 
          <instanceOf>
        }
        {(DQ (${ Id.VSub_Name testToken))}
        {<atom>}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <assert>
      more_env: []
      words: [
        {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>}
        {<0>}
        {($ Id.VSub_QMark '?')}
        {(DQ <'number instanceOf atom'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <variable>
      more_env: []
      words: [
        {<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <type> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> 
          <instanceOf>
        }
        {(DQ (${ Id.VSub_Name testToken))}
        {<string>}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <assert>
      more_env: []
      words: [
        {<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <equals>}
        {<1>}
        {($ Id.VSub_QMark '?')}
        {(DQ <'number instanceOf string'>)}
      ]
      redirects: []
      do_fork: T
    )
    (command.Simple
      blame_tok: <assert>
      more_env: []
      words: [{<assert> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <report>}]
      redirects: []
      do_fork: T
    )
    (command.If
      if_kw: <Id.KW_If if>
      arms: [
        (IfArm
          keyword: <Id.KW_If if>
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.AndOr
                      children: [
                        (command.Simple
                          blame_tok: <Id.Lit_LBracket '['>
                          more_env: []
                          words: [
                            {<Id.Lit_LBracket '['>}
                            {
                              (BracedVarSub
                                left: <Id.Left_DollarBrace '${'>
                                token: <Id.VSub_Number 1>
                                var_name: 1
                                suffix_op: (suffix_op.Unary op:<Id.VTest_Plus _> arg_word:{<isset>})
                                right: <Id.Right_DollarBrace '}'>
                              )
                            }
                            {<Id.Lit_RBracket ']'>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <Id.Lit_LBracket '['>
                          more_env: []
                          words: [
                            {<Id.Lit_LBracket '['>}
                            {(DQ ($ Id.VSub_Number 1))}
                            {<Id.Lit_Equals '='> <Id.Lit_Equals '='>}
                            {(DQ <debug>)}
                            {<Id.Lit_RBracket ']'>}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      ops: [<Id.Op_DAmp _>]
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          then_kw: <Id.KW_Then then>
          action: [
            (command.Simple
              blame_tok: <variable>
              more_env: []
              words: [{<variable> <Id.Lit_Colon ':'> <Id.Lit_Colon ':'> <printMetadata>}]
              redirects: []
              do_fork: T
            )
          ]
          spids: [3795 3825]
        )
      ]
      else_action: []
      fi_kw: <Id.KW_Fi fi>
      redirects: []
    )
  ]
)