ninja: no work to do.
---
skipping ysh/testdata/assign.osh
---
(command.CommandList
  children: [
    (command.ShFunction
      name_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: 
            (SourceLine
              line_num: 19
              content: "argv() {\n"
              src: (source.MainFile path:ysh/testdata/sigil-pairs.sh)
            )
        )
      name: argv
      body: 
        (BraceGroup
          left: (Token id:Id.Lit_LBrace length:1 col:7 line:...0x129e)
          children: [
            (command.Simple
              blame_tok: 
                (Token
                  id: Id.Lit_Chars
                  length: 6
                  col: 2
                  line: 
                    (SourceLine
                      line_num: 20
                      content: "  python -c 'import sys;print(sys.argv[1:])' @ARGV\n"
                      src: ...0x1c45
                    )
                )
              more_env: []
              words: [
                (CompoundWord parts:[...0x1256])
                (CompoundWord
                  parts: [(Token id:Id.Lit_Chars length:2 col:9 line:...0x125e)]
                )
                (CompoundWord
                  parts: [
                    (SingleQuoted
                      left: (Token id:Id.Left_SingleQuote length:1 col:12 line:...0x125e)
                      sval: "import sys;print(sys.argv[1:])"
                      right: (Token id:Id.Right_SingleQuote length:1 col:43 line:...0x125e)
                    )
                  ]
                )
                (CompoundWord
                  parts: [(Token id:Id.Lit_Splice length:5 col:45 line:...0x125e)]
                )
              ]
              is_last_cmd: F
            )
          ]
          right: 
            (Token
              id: Id.Lit_RBrace
              length: 1
              col: 0
              line: (SourceLine line_num:21 content:"}\n" src:...0x1c45)
            )
        )
    )
    (command.ShFunction
      name_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: (SourceLine line_num:23 content:"show() {\n" src:...0x1c45)
        )
      name: show
      body: 
        (BraceGroup
          left: (Token id:Id.Lit_LBrace length:1 col:7 line:...0x11ba)
          children: [
            (command.Simple
              blame_tok: 
                (Token
                  id: Id.Lit_Chars
                  length: 4
                  col: 2
                  line: (SourceLine line_num:24 content:"  echo '====='\n" src:...0x1c45)
                )
              more_env: []
              words: [
                (CompoundWord parts:[...0x117a])
                (CompoundWord
                  parts: [
                    (SingleQuoted
                      left: (Token id:Id.Left_SingleQuote length:1 col:7 line:...0x1182)
                      sval: "====="
                      right: (Token id:Id.Right_SingleQuote length:1 col:13 line:...0x1182)
                    )
                  ]
                )
              ]
              is_last_cmd: F
            )
            (command.Simple
              blame_tok: 
                (Token
                  id: Id.Lit_Chars
                  length: 4
                  col: 2
                  line: (SourceLine line_num:25 content:"  argv @ARGV\n" src:...0x1c45)
                )
              more_env: []
              words: [
                (CompoundWord parts:[...0x111e])
                (CompoundWord
                  parts: [(Token id:Id.Lit_Splice length:5 col:7 line:...0x1126)]
                )
              ]
              is_last_cmd: F
            )
            (command.Simple
              blame_tok: 
                (Token
                  id: Id.Lit_Chars
                  length: 4
                  col: 2
                  line: (SourceLine line_num:26 content:"  echo\n" src:...0x1c45)
                )
              more_env: []
              words: [(CompoundWord parts:[...0x10de])]
              is_last_cmd: F
            )
          ]
          right: 
            (Token
              id: Id.Lit_RBrace
              length: 1
              col: 0
              line: (SourceLine line_num:27 content:"}\n" src:...0x1c45)
            )
        )
    )
    (command.VarDecl
      keyword: 
        (Token
          id: Id.KW_Var
          length: 3
          col: 0
          line: (SourceLine line_num:30 content:"var strarray = %(\n" src:...0x1c45)
        )
      lhs: [(NameType left:(Token id:Id.Expr_Name length:8 col:4 line:...0x1086) name:strarray)]
      rhs: 
        (ShArrayLiteral
          left: (Token id:Id.Left_PercentParen length:2 col:15 line:...0x1086)
          words: [
            (CompoundWord
              parts: [
                (Token
                  id: Id.Lit_Chars
                  length: 4
                  col: 4
                  line: 
                    (SourceLine
                      line_num: 31
                      content: "    bare words *.sh {a,b}@example.com 'sq' \"dq ${x:-default}\"\n"
                      src: ...0x1c45
                    )
                )
              ]
            )
            (CompoundWord parts:[(Token id:Id.Lit_Chars length:5 col:9 line:...0x1a9e)])
            (CompoundWord
              parts: [
                (Token id:Id.Lit_Star length:1 col:15 line:...0x1a9e)
                (Token id:Id.Lit_Chars length:3 col:16 line:...0x1a9e)
              ]
            )
            (word.BracedTree
              parts: [
                (word_part.BracedTuple
                  words: [
                    (CompoundWord
                      parts: [(Token id:Id.Lit_Chars length:1 col:21 line:...0x1a9e)]
                    )
                    (CompoundWord
                      parts: [(Token id:Id.Lit_Chars length:1 col:23 line:...0x1a9e)]
                    )
                  ]
                )
                (Token id:Id.Lit_Splice length:8 col:25 line:...0x1a9e)
                (Token id:Id.Lit_Chars length:4 col:33 line:...0x1a9e)
              ]
            )
            (CompoundWord
              parts: [
                (SingleQuoted
                  left: (Token id:Id.Left_SingleQuote length:1 col:38 line:...0x1a9e)
                  sval: sq
                  right: (Token id:Id.Right_SingleQuote length:1 col:41 line:...0x1a9e)
                )
              ]
            )
            (CompoundWord
              parts: [
                (DoubleQuoted
                  left: (Token id:Id.Left_DoubleQuote length:1 col:43 line:...0x1a9e)
                  parts: [
                    (Token id:Id.Lit_Chars length:3 col:44 line:...0x1a9e)
                    (BracedVarSub
                      left: (Token id:Id.Left_DollarBrace length:2 col:47 line:...0x1a9e)
                      token: (Token id:Id.VSub_Name length:1 col:49 line:...0x1a9e)
                      var_name: x
                      suffix_op: 
                        (suffix_op.Unary
                          op: (Token id:Id.VTest_ColonHyphen length:2 col:50 line:...0x1a9e)
                          arg_word: 
                            (CompoundWord
                              parts: [(Token id:Id.Lit_Chars length:7 col:52 line:...0x1a9e)]
                            )
                        )
                      right: (Token id:Id.Right_DollarBrace length:1 col:59 line:...0x1a9e)
                    )
                  ]
                  right: (Token id:Id.Right_DoubleQuote length:1 col:60 line:...0x1a9e)
                )
              ]
            )
          ]
          right: 
            (Token
              id: Id.Right_ShArrayLiteral
              length: 1
              col: 0
              line: (SourceLine line_num:32 content:")\n" src:...0x1c45)
            )
        )
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: (SourceLine line_num:34 content:"show @strarray\n" src:...0x1c45)
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x1992])
        (CompoundWord parts:[(Token id:Id.Lit_Splice length:9 col:5 line:...0x1996)])
      ]
      is_last_cmd: F
    )
    (command.VarDecl
      keyword: 
        (Token
          id: Id.KW_Var
          length: 3
          col: 0
          line: (SourceLine line_num:36 content:"var cmd_sub = $(\n" src:...0x1c45)
        )
      lhs: [(NameType left:(Token id:Id.Expr_Name length:7 col:4 line:...0x194a) name:cmd_sub)]
      rhs: 
        (CommandSub
          left_token: (Token id:Id.Left_DollarParen length:2 col:14 line:...0x194a)
          child: 
            (command.Simple
              blame_tok: 
                (Token
                  id: Id.Lit_Chars
                  length: 4
                  col: 4
                  line: 
                    (SourceLine
                      line_num: 37
                      content: 
"    echo bare words *.sh {a,b}@example.com 'sq' \"dq ${x:-default}\"\n"
                      src: ...0x1c45
                    )
                )
              more_env: []
              words: [
                (CompoundWord parts:[...0x18b2])
                (CompoundWord
                  parts: [(Token id:Id.Lit_Chars length:4 col:9 line:...0x18ba)]
                )
                (CompoundWord
                  parts: [(Token id:Id.Lit_Chars length:5 col:14 line:...0x18ba)]
                )
                (CompoundWord
                  parts: [
                    (Token id:Id.Lit_Star length:1 col:20 line:...0x18ba)
                    (Token id:Id.Lit_Chars length:3 col:21 line:...0x18ba)
                  ]
                )
                (word.BracedTree
                  parts: [
                    (word_part.BracedTuple
                      words: [
                        (CompoundWord
                          parts: [(Token id:Id.Lit_Chars length:1 col:26 line:...0x18ba)]
                        )
                        (CompoundWord
                          parts: [(Token id:Id.Lit_Chars length:1 col:28 line:...0x18ba)]
                        )
                      ]
                    )
                    (Token id:Id.Lit_Splice length:8 col:30 line:...0x18ba)
                    (Token id:Id.Lit_Chars length:4 col:38 line:...0x18ba)
                  ]
                )
                (CompoundWord
                  parts: [
                    (SingleQuoted
                      left: (Token id:Id.Left_SingleQuote length:1 col:43 line:...0x18ba)
                      sval: sq
                      right: (Token id:Id.Right_SingleQuote length:1 col:46 line:...0x18ba)
                    )
                  ]
                )
                (CompoundWord
                  parts: [
                    (DoubleQuoted
                      left: (Token id:Id.Left_DoubleQuote length:1 col:48 line:...0x18ba)
                      parts: [
                        (Token
                          id: Id.Lit_Chars
                          length: 3
                          col: 49
                          line: ...0x18ba
                        )
                        (BracedVarSub
                          left: (Token id:Id.Left_DollarBrace length:2 col:52 line:...0x18ba)
                          token: (Token id:Id.VSub_Name length:1 col:54 line:...0x18ba)
                          var_name: x
                          suffix_op: 
                            (suffix_op.Unary
                              op: (Token id:Id.VTest_ColonHyphen length:2 col:55 line:...0x18ba)
                              arg_word: 
                                (CompoundWord
                                  parts: [(Token id:Id.Lit_Chars length:7 col:57 line:...0x18ba)]
                                )
                            )
                          right: (Token id:Id.Right_DollarBrace length:1 col:64 line:...0x18ba)
                        )
                      ]
                      right: (Token id:Id.Right_DoubleQuote length:1 col:65 line:...0x18ba)
                    )
                  ]
                )
              ]
              is_last_cmd: F
            )
          right: 
            (Token
              id: Id.Eof_RParen
              length: 1
              col: 0
              line: (SourceLine line_num:38 content:")\n" src:...0x1c45)
            )
        )
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: (SourceLine line_num:40 content:"show $cmd_sub\n" src:...0x1c45)
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x178e])
        (CompoundWord
          parts: [(SimpleVarSub tok:(Token id:Id.VSub_DollarName length:8 col:5 line:...0x1792))]
        )
      ]
      is_last_cmd: F
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: 
            (SourceLine
              line_num: 42
              content: "show $['quoted ' ++ 'words ' ++ \"dq ${x:-default}\"]\n"
              src: ...0x1c45
            )
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x1746])
        (CompoundWord
          parts: [
            (word_part.ExprSub
              left: (Token id:Id.Left_DollarBracket length:2 col:5 line:...0x174a)
              child: 
                (expr.Binary
                  op: (Token id:Id.Arith_DPlus length:2 col:29 line:...0x174a)
                  left: 
                    (expr.Binary
                      op: (Token id:Id.Arith_DPlus length:2 col:17 line:...0x174a)
                      left: 
                        (SingleQuoted
                          left: (Token id:Id.Left_SingleQuote length:1 col:7 line:...0x174a)
                          sval: "quoted "
                          right: (Token id:Id.Right_SingleQuote length:1 col:15 line:...0x174a)
                        )
                      right: 
                        (SingleQuoted
                          left: (Token id:Id.Left_SingleQuote length:1 col:20 line:...0x174a)
                          sval: "words "
                          right: (Token id:Id.Right_SingleQuote length:1 col:27 line:...0x174a)
                        )
                    )
                  right: 
                    (DoubleQuoted
                      left: (Token id:Id.Left_DoubleQuote length:1 col:32 line:...0x174a)
                      parts: [
                        (Token
                          id: Id.Lit_Chars
                          length: 3
                          col: 33
                          line: ...0x174a
                        )
                        (BracedVarSub
                          left: (Token id:Id.Left_DollarBrace length:2 col:36 line:...0x174a)
                          token: (Token id:Id.VSub_Name length:1 col:38 line:...0x174a)
                          var_name: x
                          suffix_op: 
                            (suffix_op.Unary
                              op: (Token id:Id.VTest_ColonHyphen length:2 col:39 line:...0x174a)
                              arg_word: 
                                (CompoundWord
                                  parts: [(Token id:Id.Lit_Chars length:7 col:41 line:...0x174a)]
                                )
                            )
                          right: (Token id:Id.Right_DollarBrace length:1 col:48 line:...0x174a)
                        )
                      ]
                      right: (Token id:Id.Right_DoubleQuote length:1 col:49 line:...0x174a)
                    )
                )
              right: (Token id:Id.Op_RBracket length:1 col:50 line:...0x174a)
            )
          ]
        )
      ]
      is_last_cmd: F
    )
  ]
)
---
(command.CommandList
  children: [
    (command.ShAssignment
      left: 
        (Token
          id: Id.Lit_VarLike
          length: 11
          col: 0
          line: 
            (SourceLine
              line_num: 1
              content: "global_var=global\n"
              src: (source.MainFile path:ysh/testdata/no-dynamic-scope.osh)
            )
        )
      pairs: [
        (AssignPair
          left: ...0x13d6
          lhs: (sh_lhs.Name left:...0x13d6 name:global_var)
          op: assign_op.Equal
          rhs: (CompoundWord parts:[(Token id:Id.Lit_Chars length:6 col:11 line:...0x13de)])
        )
      ]
    )
    (command.ShFunction
      name_tok: 
        (Token
          id: Id.Lit_Chars
          length: 1
          col: 0
          line: (SourceLine line_num:3 content:"g() {\n" src:...0x1c45)
        )
      name: g
      body: 
        (BraceGroup
          left: (Token id:Id.Lit_LBrace length:1 col:4 line:...0x1386)
          children: [
            (command.Simple
              blame_tok: 
                (Token
                  id: Id.Lit_Chars
                  length: 5
                  col: 2
                  line: (SourceLine line_num:4 content:"  local g_var=f\n" src:...0x1c45)
                )
              more_env: []
              words: [
                (CompoundWord parts:[...0x133a])
                (CompoundWord
                  parts: [
                    (Token id:Id.Lit_VarLike length:6 col:8 line:...0x1342)
                    (Token id:Id.Lit_Chars length:1 col:14 line:...0x1342)
                  ]
                )
              ]
              is_last_cmd: F
            )
            (command.Simple
              blame_tok: 
                (Token
                  id: Id.Lit_Chars
                  length: 4
                  col: 2
                  line: (SourceLine line_num:5 content:"  echo $g_var\n" src:...0x1c45)
                )
              more_env: []
              words: [
                (CompoundWord parts:[...0x12f2])
                (CompoundWord
                  parts: [
                    (SimpleVarSub
                      tok: (Token id:Id.VSub_DollarName length:6 col:7 line:...0x12fa)
                    )
                  ]
                )
              ]
              is_last_cmd: F
            )
            (command.Simple
              blame_tok: 
                (Token
                  id: Id.Lit_Chars
                  length: 4
                  col: 2
                  line: (SourceLine line_num:6 content:"  echo $f_var\n" src:...0x1c45)
                )
              more_env: []
              words: [
                (CompoundWord parts:[...0x12ae])
                (CompoundWord
                  parts: [
                    (SimpleVarSub
                      tok: (Token id:Id.VSub_DollarName length:6 col:7 line:...0x12b6)
                    )
                  ]
                )
              ]
              is_last_cmd: F
            )
            (command.VarDecl
              keyword: 
                (Token
                  id: Id.KW_Var
                  length: 3
                  col: 2
                  line: (SourceLine line_num:8 content:"  var oil_var = global_var\n" src:...0x1c45)
                )
              lhs: [
                (NameType
                  left: (Token id:Id.Expr_Name length:7 col:6 line:...0x126e)
                  name: oil_var
                )
              ]
              rhs: 
                (expr.Var
                  left: (Token id:Id.Expr_Name length:10 col:16 line:...0x126e)
                  name: global_var
                )
            )
            (command.Simple
              blame_tok: 
                (Token
                  id: Id.Lit_Chars
                  length: 4
                  col: 2
                  line: (SourceLine line_num:9 content:"  echo $oil_var\n" src:...0x1c45)
                )
              more_env: []
              words: [
                (CompoundWord parts:[...0x11ba])
                (CompoundWord
                  parts: [
                    (SimpleVarSub
                      tok: (Token id:Id.VSub_DollarName length:8 col:7 line:...0x11c2)
                    )
                  ]
                )
              ]
              is_last_cmd: F
            )
          ]
          right: 
            (Token
              id: Id.Lit_RBrace
              length: 1
              col: 0
              line: (SourceLine line_num:10 content:"}\n" src:...0x1c45)
            )
        )
    )
    (command.ShFunction
      name_tok: 
        (Token
          id: Id.Lit_Chars
          length: 1
          col: 0
          line: (SourceLine line_num:12 content:"f() {\n" src:...0x1c45)
        )
      name: f
      body: 
        (BraceGroup
          left: (Token id:Id.Lit_LBrace length:1 col:4 line:...0x1162)
          children: [
            (command.Simple
              blame_tok: 
                (Token
                  id: Id.Lit_Chars
                  length: 5
                  col: 2
                  line: (SourceLine line_num:13 content:"  local f_var=f\n" src:...0x1c45)
                )
              more_env: []
              words: [
                (CompoundWord parts:[...0x1122])
                (CompoundWord
                  parts: [
                    (Token id:Id.Lit_VarLike length:6 col:8 line:...0x112a)
                    (Token id:Id.Lit_Chars length:1 col:14 line:...0x112a)
                  ]
                )
              ]
              is_last_cmd: F
            )
            (command.Simple
              blame_tok: 
                (Token
                  id: Id.Lit_Chars
                  length: 4
                  col: 2
                  line: (SourceLine line_num:14 content:"  echo $f_var\n" src:...0x1c45)
                )
              more_env: []
              words: [
                (CompoundWord parts:[...0x10da])
                (CompoundWord
                  parts: [
                    (SimpleVarSub
                      tok: (Token id:Id.VSub_DollarName length:6 col:7 line:...0x10e2)
                    )
                  ]
                )
              ]
              is_last_cmd: F
            )
            (command.Simple
              blame_tok: 
                (Token
                  id: Id.Lit_Chars
                  length: 1
                  col: 2
                  line: (SourceLine line_num:15 content:"  g\n" src:...0x1c45)
                )
              more_env: []
              words: [(CompoundWord parts:[...0x109a])]
              is_last_cmd: F
            )
          ]
          right: 
            (Token
              id: Id.Lit_RBrace
              length: 1
              col: 0
              line: (SourceLine line_num:16 content:"}\n" src:...0x1c45)
            )
        )
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 1
          col: 0
          line: (SourceLine line_num:18 content:"f\n" src:...0x1c45)
        )
      more_env: []
      words: [(CompoundWord parts:[...0x104a])]
      is_last_cmd: F
    )
  ]
)
---
(command.CommandList
  children: [
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: 
            (SourceLine
              line_num: 2
              content: "echo 'This is a shell script with OSH extensions!'\n"
              src: (source.MainFile path:ysh/testdata/hello.osh)
            )
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x13ce])
        (CompoundWord
          parts: [
            (SingleQuoted
              left: (Token id:Id.Left_SingleQuote length:1 col:5 line:...0x13d2)
              sval: "This is a shell script with OSH extensions!"
              right: (Token id:Id.Right_SingleQuote length:1 col:49 line:...0x13d2)
            )
          ]
        )
      ]
      is_last_cmd: F
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: (SourceLine line_num:3 content:"echo\n" src:...0x1c45)
        )
      more_env: []
      words: [(CompoundWord parts:[...0x1372])]
      is_last_cmd: F
    )
    (command.VarDecl
      keyword: 
        (Token
          id: Id.KW_Var
          length: 3
          col: 0
          line: (SourceLine line_num:5 content:"var x = 1 + 2*3\n" src:...0x1c45)
        )
      lhs: [(NameType left:(Token id:Id.Expr_Name length:1 col:4 line:...0x1336) name:x)]
      rhs: 
        (expr.Binary
          op: (Token id:Id.Arith_Plus length:1 col:10 line:...0x1336)
          left: 
            (expr.Const
              c: (Token id:Id.Expr_DecInt length:1 col:8 line:...0x1336)
              val: (value.Int i:1)
            )
          right: 
            (expr.Binary
              op: (Token id:Id.Arith_Star length:1 col:13 line:...0x1336)
              left: 
                (expr.Const
                  c: (Token id:Id.Expr_DecInt length:1 col:12 line:...0x1336)
                  val: (value.Int i:2)
                )
              right: 
                (expr.Const
                  c: (Token id:Id.Expr_DecInt length:1 col:14 line:...0x1336)
                  val: (value.Int i:3)
                )
            )
        )
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: (SourceLine line_num:7 content:"echo \"x: $x\"\n" src:...0x1c45)
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x124e])
        (CompoundWord
          parts: [
            (DoubleQuoted
              left: (Token id:Id.Left_DoubleQuote length:1 col:5 line:...0x1252)
              parts: [
                (Token id:Id.Lit_Chars length:3 col:6 line:...0x1252)
                (SimpleVarSub
                  tok: (Token id:Id.VSub_DollarName length:2 col:9 line:...0x1252)
                )
              ]
              right: (Token id:Id.Right_DoubleQuote length:1 col:11 line:...0x1252)
            )
          ]
        )
      ]
      is_last_cmd: F
    )
    (command.Mutation
      keyword: 
        (Token
          id: Id.KW_SetVar
          length: 6
          col: 0
          line: (SourceLine line_num:10 content:"setvar x += 1   \n" src:...0x1c45)
        )
      lhs: [(Token id:Id.Expr_Name length:1 col:7 line:...0x11e2 tval:x)]
      op: (Token id:Id.Arith_PlusEqual length:2 col:9 line:...0x11e2)
      rhs: (expr.Const c:(Token id:Id.Expr_DecInt length:1 col:12 line:...0x11e2) val:(value.Int i:1))
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: (SourceLine line_num:12 content:"echo \"x: $x\"\n" src:...0x1c45)
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x1112])
        (CompoundWord
          parts: [
            (DoubleQuoted
              left: (Token id:Id.Left_DoubleQuote length:1 col:5 line:...0x1116)
              parts: [
                (Token id:Id.Lit_Chars length:3 col:6 line:...0x1116)
                (SimpleVarSub
                  tok: (Token id:Id.VSub_DollarName length:2 col:9 line:...0x1116)
                )
              ]
              right: (Token id:Id.Right_DoubleQuote length:1 col:11 line:...0x1116)
            )
          ]
        )
      ]
      is_last_cmd: F
    )
    (command.VarDecl
      keyword: 
        (Token
          id: Id.KW_Var
          length: 3
          col: 0
          line: (SourceLine line_num:14 content:"var mylist = [1, 2, 3]\n" src:...0x1c45)
        )
      lhs: [(NameType left:(Token id:Id.Expr_Name length:6 col:4 line:...0x10b6) name:mylist)]
      rhs: 
        (expr.List
          left: (Token id:Id.Op_LBracket length:1 col:13 line:...0x10b6)
          elts: [
            (expr.Const
              c: (Token id:Id.Expr_DecInt length:1 col:14 line:...0x10b6)
              val: (value.Int i:1)
            )
            (expr.Const
              c: (Token id:Id.Expr_DecInt length:1 col:17 line:...0x10b6)
              val: (value.Int i:2)
            )
            (expr.Const
              c: (Token id:Id.Expr_DecInt length:1 col:20 line:...0x10b6)
              val: (value.Int i:3)
            )
          ]
          ctx: expr_context.Store
        )
    )
    (command.VarDecl
      keyword: 
        (Token
          id: Id.KW_Var
          length: 3
          col: 0
          line: (SourceLine line_num:16 content:"var y = mylist[1] * 10\n" src:...0x1c45)
        )
      lhs: [(NameType left:(Token id:Id.Expr_Name length:1 col:4 line:...0x19d6) name:y)]
      rhs: 
        (expr.Binary
          op: (Token id:Id.Arith_Star length:1 col:18 line:...0x19d6)
          left: 
            (Subscript
              left: (Token id:Id.Op_LBracket length:1 col:14 line:...0x19d6)
              obj: (expr.Var left:(Token id:Id.Expr_Name length:6 col:8 line:...0x19d6) name:mylist)
              index: 
                (expr.Const
                  c: (Token id:Id.Expr_DecInt length:1 col:15 line:...0x19d6)
                  val: (value.Int i:1)
                )
            )
          right: 
            (expr.Const
              c: (Token id:Id.Expr_DecInt length:2 col:20 line:...0x19d6)
              val: (value.Int i:10)
            )
        )
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: (SourceLine line_num:18 content:"echo \"y: $y\"\n" src:...0x1c45)
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x18ca])
        (CompoundWord
          parts: [
            (DoubleQuoted
              left: (Token id:Id.Left_DoubleQuote length:1 col:5 line:...0x18ce)
              parts: [
                (Token id:Id.Lit_Chars length:3 col:6 line:...0x18ce)
                (SimpleVarSub
                  tok: (Token id:Id.VSub_DollarName length:2 col:9 line:...0x18ce)
                )
              ]
              right: (Token id:Id.Right_DoubleQuote length:1 col:11 line:...0x18ce)
            )
          ]
        )
      ]
      is_last_cmd: F
    )
    (command.VarDecl
      keyword: 
        (Token
          id: Id.KW_Var
          length: 3
          col: 0
          line: (SourceLine line_num:20 content:"var list2 = mylist ++ [4, 5]\n" src:...0x1c45)
        )
      lhs: [(NameType left:(Token id:Id.Expr_Name length:5 col:4 line:...0x186e) name:list2)]
      rhs: 
        (expr.Binary
          op: (Token id:Id.Arith_DPlus length:2 col:19 line:...0x186e)
          left: (expr.Var left:(Token id:Id.Expr_Name length:6 col:12 line:...0x186e) name:mylist)
          right: 
            (expr.List
              left: (Token id:Id.Op_LBracket length:1 col:22 line:...0x186e)
              elts: [
                (expr.Const
                  c: (Token id:Id.Expr_DecInt length:1 col:23 line:...0x186e)
                  val: (value.Int i:4)
                )
                (expr.Const
                  c: (Token id:Id.Expr_DecInt length:1 col:26 line:...0x186e)
                  val: (value.Int i:5)
                )
              ]
              ctx: expr_context.Store
            )
        )
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 2
          col: 0
          line: (SourceLine line_num:26 content:"pp cell list2\n" src:...0x1c45)
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x16ca])
        (CompoundWord parts:[(Token id:Id.Lit_Chars length:4 col:3 line:...0x16ce)])
        (CompoundWord parts:[(Token id:Id.Lit_Chars length:5 col:8 line:...0x16ce)])
      ]
      is_last_cmd: F
    )
    (command.ShAssignment
      left: 
        (Token
          id: Id.Lit_VarLike
          length: 5
          col: 0
          line: 
            (SourceLine
              line_num: 28
              content: "str1='shell string'  # traditinoal shell-style assignment\n"
              src: ...0x1c45
            )
        )
      pairs: [
        (AssignPair
          left: ...0x1676
          lhs: (sh_lhs.Name left:...0x1676 name:str1)
          op: assign_op.Equal
          rhs: 
            (CompoundWord
              parts: [
                (SingleQuoted
                  left: (Token id:Id.Left_SingleQuote length:1 col:5 line:...0x167a)
                  sval: "shell string"
                  right: (Token id:Id.Right_SingleQuote length:1 col:18 line:...0x167a)
                )
              ]
            )
        )
      ]
    )
    (command.VarDecl
      keyword: 
        (Token
          id: Id.KW_Var
          length: 3
          col: 0
          line: (SourceLine line_num:31 content:"var str2 = \"Oil string\"\n" src:...0x1c45)
        )
      lhs: [(NameType left:(Token id:Id.Expr_Name length:4 col:4 line:...0x15f2) name:str2)]
      rhs: 
        (DoubleQuoted
          left: (Token id:Id.Left_DoubleQuote length:1 col:11 line:...0x15f2)
          parts: [(Token id:Id.Lit_Chars length:10 col:12 line:...0x15f2)]
          right: (Token id:Id.Right_DoubleQuote length:1 col:22 line:...0x15f2)
        )
    )
    (command.VarDecl
      keyword: 
        (Token
          id: Id.KW_Var
          length: 3
          col: 0
          line: (SourceLine line_num:33 content:"var str3 = str1 ++ str2\n" src:...0x1c45)
        )
      lhs: [(NameType left:(Token id:Id.Expr_Name length:4 col:4 line:...0x1fd6) name:str3)]
      rhs: 
        (expr.Binary
          op: (Token id:Id.Arith_DPlus length:2 col:16 line:...0x1fd6)
          left: (expr.Var left:(Token id:Id.Expr_Name length:4 col:11 line:...0x1fd6) name:str1)
          right: (expr.Var left:(Token id:Id.Expr_Name length:4 col:19 line:...0x1fd6) name:str2)
        )
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: (SourceLine line_num:35 content:"echo \"str3 = $str3\"\n" src:...0x1c45)
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x1f06])
        (CompoundWord
          parts: [
            (DoubleQuoted
              left: (Token id:Id.Left_DoubleQuote length:1 col:5 line:...0x1f0a)
              parts: [
                (Token id:Id.Lit_Chars length:7 col:6 line:...0x1f0a)
                (SimpleVarSub
                  tok: (Token id:Id.VSub_DollarName length:5 col:13 line:...0x1f0a)
                )
              ]
              right: (Token id:Id.Right_DoubleQuote length:1 col:18 line:...0x1f0a)
            )
          ]
        )
      ]
      is_last_cmd: F
    )
  ]
)
---
(command.CommandList
  children: [
    (command.ShFunction
      name_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: 
            (SourceLine
              line_num: 8
              content: "argv() { spec/bin/argv.py \"$@\"; }\n"
              src: (source.MainFile path:ysh/testdata/array-rewrite-1.sh)
            )
        )
      name: argv
      body: 
        (BraceGroup
          left: (Token id:Id.Lit_LBrace length:1 col:7 line:...0x1366)
          children: [
            (command.Sentence
              child: 
                (command.Simple
                  blame_tok: (Token id:Id.Lit_Chars length:4 col:9 line:...0x1366)
                  more_env: []
                  words: [
                    (CompoundWord
                      parts: [
                        ...0x1326
                        (Token
                          id: Id.Lit_Slash
                          length: 1
                          col: 13
                          line: ...0x1366
                        )
                        (Token
                          id: Id.Lit_Chars
                          length: 3
                          col: 14
                          line: ...0x1366
                        )
                        (Token
                          id: Id.Lit_Slash
                          length: 1
                          col: 17
                          line: ...0x1366
                        )
                        (Token
                          id: Id.Lit_Chars
                          length: 7
                          col: 18
                          line: ...0x1366
                        )
                      ]
                    )
                    (CompoundWord
                      parts: [
                        (DoubleQuoted
                          left: (Token id:Id.Left_DoubleQuote length:1 col:26 line:...0x1366)
                          parts: [
                            (SimpleVarSub
                              tok: (Token id:Id.VSub_At length:2 col:27 line:...0x1366)
                            )
                          ]
                          right: (Token id:Id.Right_DoubleQuote length:1 col:29 line:...0x1366)
                        )
                      ]
                    )
                  ]
                  is_last_cmd: F
                )
              terminator: (Token id:Id.Op_Semi length:1 col:30 line:...0x1366)
            )
          ]
          right: (Token id:Id.Lit_RBrace length:1 col:32 line:...0x1366)
        )
    )
    (command.ShAssignment
      left: 
        (Token
          id: Id.Lit_VarLike
          length: 6
          col: 0
          line: (SourceLine line_num:14 content:"regex=(old1 old2)\n" src:...0x1c45)
        )
      pairs: [
        (AssignPair
          left: ...0x1252
          lhs: (sh_lhs.Name left:...0x1252 name:regex)
          op: assign_op.Equal
          rhs: 
            (CompoundWord
              parts: [
                (ShArrayLiteral
                  left: (Token id:Id.Op_LParen length:1 col:6 line:...0x1256)
                  words: [
                    (CompoundWord
                      parts: [(Token id:Id.Lit_Chars length:4 col:7 line:...0x1256)]
                    )
                    (CompoundWord
                      parts: [(Token id:Id.Lit_Chars length:4 col:12 line:...0x1256)]
                    )
                  ]
                  right: (Token id:Id.Right_ShArrayLiteral length:1 col:16 line:...0x1256)
                )
              ]
            )
        )
      ]
    )
    (command.ShAssignment
      left: 
        (Token
          id: Id.Lit_VarLike
          length: 6
          col: 0
          line: (SourceLine line_num:15 content:"flags=()\n" src:...0x1c45)
        )
      pairs: [
        (AssignPair
          left: ...0x11e6
          lhs: (sh_lhs.Name left:...0x11e6 name:flags)
          op: assign_op.Equal
          rhs: 
            (CompoundWord
              parts: [
                (ShArrayLiteral
                  left: (Token id:Id.Op_LParen length:1 col:6 line:...0x11ea)
                  words: []
                  right: (Token id:Id.Right_ShArrayLiteral length:1 col:7 line:...0x11ea)
                )
              ]
            )
        )
      ]
    )
    (command.ForEach
      keyword: 
        (Token
          id: Id.KW_For
          length: 3
          col: 0
          line: (SourceLine line_num:17 content:"for r in \"${regex[@]}\"; do\n" src:...0x1c45)
        )
      iter_names: [r]
      iterable: 
        (for_iter.Words
          words: [
            (CompoundWord
              parts: [
                (DoubleQuoted
                  left: (Token id:Id.Left_DoubleQuote length:1 col:9 line:...0x1196)
                  parts: [
                    (BracedVarSub
                      left: (Token id:Id.Left_DollarBrace length:2 col:10 line:...0x1196)
                      token: (Token id:Id.VSub_Name length:5 col:12 line:...0x1196)
                      var_name: regex
                      bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                      right: (Token id:Id.Right_DollarBrace length:1 col:20 line:...0x1196)
                    )
                  ]
                  right: (Token id:Id.Right_DoubleQuote length:1 col:21 line:...0x1196)
                )
              ]
            )
          ]
        )
      semi_tok: (Token id:Id.Op_Semi length:1 col:22 line:...0x1196)
      body: 
        (command.DoGroup
          left: (Token id:Id.KW_Do length:2 col:24 line:...0x1196)
          children: [
            (command.ShAssignment
              left: 
                (Token
                  id: Id.Lit_ArrayLhsOpen
                  length: 6
                  col: 2
                  line: 
                    (SourceLine
                      line_num: 18
                      content: "  flags[${#flags[@]}]=\"--regex=$r\"\n"
                      src: ...0x1c45
                    )
                )
              pairs: [
                (AssignPair
                  left: ...0x1106
                  lhs: 
                    (sh_lhs.IndexedName
                      left: ...0x1106
                      name: flags
                      index: 
                        (CompoundWord
                          parts: [
                            (BracedVarSub
                              left: 
                                (Token
                                  id: Id.Left_DollarBrace
                                  length: 2
                                  col: 0
                                  line: 
                                    (SourceLine
                                      line_num: 1
                                      content: "${#flags[@]}"
                                      src: 
                                        (source.Reparsed
                                          what: "array LHS"
                                          left_token: ...0x1106
                                          right_token: 
                                            (Token
                                              id: Id.Lit_ArrayLhsClose
                                              length: 2
                                              col: 20
                                              line: ...0x110e
                                            )
                                        )
                                    )
                                )
                              token: (Token id:Id.VSub_Name length:5 col:3 line:...0x108e)
                              var_name: flags
                              prefix_op: (Token id:Id.VSub_Pound length:1 col:2 line:...0x108e)
                              bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                              right: (Token id:Id.Right_DollarBrace length:1 col:11 line:...0x108e)
                            )
                          ]
                        )
                    )
                  op: assign_op.Equal
                  rhs: 
                    (CompoundWord
                      parts: [
                        (DoubleQuoted
                          left: (Token id:Id.Left_DoubleQuote length:1 col:22 line:...0x110e)
                          parts: [
                            (Token
                              id: Id.Lit_Chars
                              length: 8
                              col: 23
                              line: ...0x110e
                            )
                            (SimpleVarSub
                              tok: (Token id:Id.VSub_DollarName length:2 col:31 line:...0x110e)
                            )
                          ]
                          right: (Token id:Id.Right_DoubleQuote length:1 col:33 line:...0x110e)
                        )
                      ]
                    )
                )
              ]
            )
          ]
          right: 
            (Token
              id: Id.KW_Done
              length: 4
              col: 0
              line: (SourceLine line_num:19 content:"done\n" src:...0x1c45)
            )
        )
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: (SourceLine line_num:21 content:"argv \"${flags[@]}\"\n" src:...0x1c45)
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x1022])
        (CompoundWord
          parts: [
            (DoubleQuoted
              left: (Token id:Id.Left_DoubleQuote length:1 col:5 line:...0x1026)
              parts: [
                (BracedVarSub
                  left: (Token id:Id.Left_DollarBrace length:2 col:6 line:...0x1026)
                  token: (Token id:Id.VSub_Name length:5 col:8 line:...0x1026)
                  var_name: flags
                  bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                  right: (Token id:Id.Right_DollarBrace length:1 col:16 line:...0x1026)
                )
              ]
              right: (Token id:Id.Right_DoubleQuote length:1 col:17 line:...0x1026)
            )
          ]
        )
      ]
      is_last_cmd: F
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 5
          col: 0
          line: (SourceLine line_num:34 content:"shopt -s simple_word_eval parse_at\n" src:...0x1c45)
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x19b2])
        (CompoundWord parts:[(Token id:Id.Lit_Chars length:2 col:6 line:...0x19b6)])
        (CompoundWord parts:[(Token id:Id.Lit_Chars length:16 col:9 line:...0x19b6)])
        (CompoundWord parts:[(Token id:Id.Lit_Chars length:8 col:26 line:...0x19b6)])
      ]
      is_last_cmd: F
    )
    (command.VarDecl
      keyword: 
        (Token
          id: Id.KW_Var
          length: 3
          col: 0
          line: (SourceLine line_num:36 content:"var regex2 = %(new1 new2)\n" src:...0x1c45)
        )
      lhs: [(NameType left:(Token id:Id.Expr_Name length:6 col:4 line:...0x1952) name:regex2)]
      rhs: 
        (ShArrayLiteral
          left: (Token id:Id.Left_PercentParen length:2 col:13 line:...0x1952)
          words: [
            (CompoundWord parts:[(Token id:Id.Lit_Chars length:4 col:15 line:...0x1952)])
            (CompoundWord parts:[(Token id:Id.Lit_Chars length:4 col:20 line:...0x1952)])
          ]
          right: (Token id:Id.Right_ShArrayLiteral length:1 col:24 line:...0x1952)
        )
    )
    (command.VarDecl
      keyword: 
        (Token
          id: Id.KW_Var
          length: 3
          col: 0
          line: (SourceLine line_num:37 content:"var flags2 = %()\n" src:...0x1c45)
        )
      lhs: [(NameType left:(Token id:Id.Expr_Name length:6 col:4 line:...0x187e) name:flags2)]
      rhs: 
        (ShArrayLiteral
          left: (Token id:Id.Left_PercentParen length:2 col:13 line:...0x187e)
          words: []
          right: (Token id:Id.Right_ShArrayLiteral length:1 col:15 line:...0x187e)
        )
    )
    (command.ForEach
      keyword: 
        (Token
          id: Id.KW_For
          length: 3
          col: 0
          line: (SourceLine line_num:39 content:"for r in @regex2; do\n" src:...0x1c45)
        )
      iter_names: [r]
      iterable: 
        (for_iter.Words
          words: [(CompoundWord parts:[(Token id:Id.Lit_Splice length:7 col:9 line:...0x17c2)])]
        )
      semi_tok: (Token id:Id.Op_Semi length:1 col:16 line:...0x17c2)
      body: 
        (command.DoGroup
          left: (Token id:Id.KW_Do length:2 col:18 line:...0x17c2)
          children: [
            (command.Simple
              blame_tok: 
                (Token
                  id: Id.Lit_Chars
                  length: 6
                  col: 2
                  line: 
                    (SourceLine
                      line_num: 40
                      content: "  append \"--regex=$r\" (flags2)\n"
                      src: ...0x1c45
                    )
                )
              more_env: []
              words: [
                (CompoundWord parts:[...0x1752])
                (CompoundWord
                  parts: [
                    (DoubleQuoted
                      left: (Token id:Id.Left_DoubleQuote length:1 col:9 line:...0x175a)
                      parts: [
                        (Token
                          id: Id.Lit_Chars
                          length: 8
                          col: 10
                          line: ...0x175a
                        )
                        (SimpleVarSub
                          tok: (Token id:Id.VSub_DollarName length:2 col:18 line:...0x175a)
                        )
                      ]
                      right: (Token id:Id.Right_DoubleQuote length:1 col:20 line:...0x175a)
                    )
                  ]
                )
              ]
              typed_args: 
                (ArgList
                  left: (Token id:Id.Op_LParen length:1 col:22 line:...0x175a)
                  pos_args: [
                    (expr.Var
                      left: (Token id:Id.Expr_Name length:6 col:23 line:...0x175a)
                      name: flags2
                    )
                  ]
                  named_args: []
                  right: (Token id:Id.Op_RParen length:1 col:29 line:...0x175a)
                )
              is_last_cmd: F
            )
          ]
          right: 
            (Token
              id: Id.KW_Done
              length: 4
              col: 0
              line: (SourceLine line_num:41 content:"done\n" src:...0x1c45)
            )
        )
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: (SourceLine line_num:43 content:"argv @flags2\n" src:...0x1c45)
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x166e])
        (CompoundWord parts:[(Token id:Id.Lit_Splice length:7 col:5 line:...0x1672)])
      ]
      is_last_cmd: F
    )
  ]
)
---
(command.CommandList
  children: [
    (command.ShFunction
      name_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: 
            (SourceLine
              line_num: 8
              content: "argv() { spec/bin/argv.py \"$@\"; }\n"
              src: (source.MainFile path:ysh/testdata/array-rewrite-2.sh)
            )
        )
      name: argv
      body: 
        (BraceGroup
          left: (Token id:Id.Lit_LBrace length:1 col:7 line:...0x136a)
          children: [
            (command.Sentence
              child: 
                (command.Simple
                  blame_tok: (Token id:Id.Lit_Chars length:4 col:9 line:...0x136a)
                  more_env: []
                  words: [
                    (CompoundWord
                      parts: [
                        ...0x132a
                        (Token
                          id: Id.Lit_Slash
                          length: 1
                          col: 13
                          line: ...0x136a
                        )
                        (Token
                          id: Id.Lit_Chars
                          length: 3
                          col: 14
                          line: ...0x136a
                        )
                        (Token
                          id: Id.Lit_Slash
                          length: 1
                          col: 17
                          line: ...0x136a
                        )
                        (Token
                          id: Id.Lit_Chars
                          length: 7
                          col: 18
                          line: ...0x136a
                        )
                      ]
                    )
                    (CompoundWord
                      parts: [
                        (DoubleQuoted
                          left: (Token id:Id.Left_DoubleQuote length:1 col:26 line:...0x136a)
                          parts: [
                            (SimpleVarSub
                              tok: (Token id:Id.VSub_At length:2 col:27 line:...0x136a)
                            )
                          ]
                          right: (Token id:Id.Right_DoubleQuote length:1 col:29 line:...0x136a)
                        )
                      ]
                    )
                  ]
                  is_last_cmd: F
                )
              terminator: (Token id:Id.Op_Semi length:1 col:30 line:...0x136a)
            )
          ]
          right: (Token id:Id.Lit_RBrace length:1 col:32 line:...0x136a)
        )
    )
    (command.ShAssignment
      left: 
        (Token
          id: Id.Lit_VarLike
          length: 16
          col: 0
          line: (SourceLine line_num:15 content:"CONFIG_HAVE_FOO=yes\n" src:...0x1c45)
        )
      pairs: [
        (AssignPair
          left: ...0x1246
          lhs: (sh_lhs.Name left:...0x1246 name:CONFIG_HAVE_FOO)
          op: assign_op.Equal
          rhs: (CompoundWord parts:[(Token id:Id.Lit_Chars length:3 col:16 line:...0x124a)])
        )
      ]
    )
    (command.ShAssignment
      left: 
        (Token
          id: Id.Lit_VarLike
          length: 5
          col: 0
          line: (SourceLine line_num:16 content:"path='/etc/path with spaces'\n" src:...0x1c45)
        )
      pairs: [
        (AssignPair
          left: ...0x11fa
          lhs: (sh_lhs.Name left:...0x11fa name:path)
          op: assign_op.Equal
          rhs: 
            (CompoundWord
              parts: [
                (SingleQuoted
                  left: (Token id:Id.Left_SingleQuote length:1 col:5 line:...0x11fe)
                  sval: "/etc/path with spaces"
                  right: (Token id:Id.Right_SingleQuote length:1 col:27 line:...0x11fe)
                )
              ]
            )
        )
      ]
    )
    (command.ShAssignment
      left: 
        (Token
          id: Id.Lit_VarLike
          length: 6
          col: 0
          line: (SourceLine line_num:17 content:"flags=''\n" src:...0x1c45)
        )
      pairs: [
        (AssignPair
          left: ...0x119a
          lhs: (sh_lhs.Name left:...0x119a name:flags)
          op: assign_op.Equal
          rhs: 
            (CompoundWord
              parts: [
                (SingleQuoted
                  left: (Token id:Id.Left_SingleQuote length:1 col:6 line:...0x119e)
                  sval: ""
                  right: (Token id:Id.Right_SingleQuote length:1 col:7 line:...0x119e)
                )
              ]
            )
        )
      ]
    )
    (command.If
      if_kw: 
        (Token
          id: Id.KW_If
          length: 2
          col: 0
          line: 
            (SourceLine
              line_num: 20
              content: "if [ -n \"${CONFIG_HAVE_FOO}\" ]; then\n"
              src: ...0x1c45
            )
        )
      arms: [
        (IfArm
          keyword: ...0x1142
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Simple
                      blame_tok: (Token id:Id.Lit_LBracket length:1 col:3 line:...0x1146)
                      more_env: []
                      words: [
                        (CompoundWord parts:[...0x112e])
                        (CompoundWord
                          parts: [(Token id:Id.Lit_Chars length:2 col:5 line:...0x1146)]
                        )
                        (CompoundWord
                          parts: [
                            (DoubleQuoted
                              left: (Token id:Id.Left_DoubleQuote length:1 col:8 line:...0x1146)
                              parts: [
                                (BracedVarSub
                                  left: (Token id:Id.Left_DollarBrace length:2 col:9 line:...0x1146)
                                  token: (Token id:Id.VSub_Name length:15 col:11 line:...0x1146)
                                  var_name: CONFIG_HAVE_FOO
                                  right: 
                                    (Token
                                      id: Id.Right_DollarBrace
                                      length: 1
                                      col: 26
                                      line: ...0x1146
                                    )
                                )
                              ]
                              right: (Token id:Id.Right_DoubleQuote length:1 col:27 line:...0x1146)
                            )
                          ]
                        )
                        (CompoundWord
                          parts: [(Token id:Id.Lit_RBracket length:1 col:29 line:...0x1146)]
                        )
                      ]
                      is_last_cmd: F
                    )
                  terminator: (Token id:Id.Op_Semi length:1 col:30 line:...0x1146)
                )
              ]
            )
          then_kw: (Token id:Id.KW_Then length:4 col:32 line:...0x1146)
          action: [
            (command.ShAssignment
              left: 
                (Token
                  id: Id.Lit_VarLike
                  length: 6
                  col: 2
                  line: 
                    (SourceLine
                      line_num: 21
                      content: "  flags=\"${flags} --foo=$path\"\n"
                      src: ...0x1c45
                    )
                )
              pairs: [
                (AssignPair
                  left: ...0x109e
                  lhs: (sh_lhs.Name left:...0x109e name:flags)
                  op: assign_op.Equal
                  rhs: 
                    (CompoundWord
                      parts: [
                        (DoubleQuoted
                          left: (Token id:Id.Left_DoubleQuote length:1 col:8 line:...0x10a6)
                          parts: [
                            (BracedVarSub
                              left: (Token id:Id.Left_DollarBrace length:2 col:9 line:...0x10a6)
                              token: (Token id:Id.VSub_Name length:5 col:11 line:...0x10a6)
                              var_name: flags
                              right: (Token id:Id.Right_DollarBrace length:1 col:16 line:...0x10a6)
                            )
                            (Token
                              id: Id.Lit_Chars
                              length: 7
                              col: 17
                              line: ...0x10a6
                            )
                            (SimpleVarSub
                              tok: (Token id:Id.VSub_DollarName length:5 col:24 line:...0x10a6)
                            )
                          ]
                          right: (Token id:Id.Right_DoubleQuote length:1 col:29 line:...0x10a6)
                        )
                      ]
                    )
                )
              ]
            )
          ]
          then_tok: ...0x10be
        )
      ]
      else_action: []
      fi_kw: 
        (Token
          id: Id.KW_Fi
          length: 2
          col: 0
          line: (SourceLine line_num:22 content:"fi\n" src:...0x1c45)
        )
    )
    (command.If
      if_kw: 
        (Token
          id: Id.KW_If
          length: 2
          col: 0
          line: 
            (SourceLine
              line_num: 24
              content: "if [ -n \"${CONFIG_HAVE_BAR}\" ]; then\n"
              src: ...0x1c45
            )
        )
      arms: [
        (IfArm
          keyword: ...0x101e
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Simple
                      blame_tok: (Token id:Id.Lit_LBracket length:1 col:3 line:...0x1022)
                      more_env: []
                      words: [
                        (CompoundWord parts:[...0x100a])
                        (CompoundWord
                          parts: [(Token id:Id.Lit_Chars length:2 col:5 line:...0x1022)]
                        )
                        (CompoundWord
                          parts: [
                            (DoubleQuoted
                              left: (Token id:Id.Left_DoubleQuote length:1 col:8 line:...0x1022)
                              parts: [
                                (BracedVarSub
                                  left: (Token id:Id.Left_DollarBrace length:2 col:9 line:...0x1022)
                                  token: (Token id:Id.VSub_Name length:15 col:11 line:...0x1022)
                                  var_name: CONFIG_HAVE_BAR
                                  right: 
                                    (Token
                                      id: Id.Right_DollarBrace
                                      length: 1
                                      col: 26
                                      line: ...0x1022
                                    )
                                )
                              ]
                              right: (Token id:Id.Right_DoubleQuote length:1 col:27 line:...0x1022)
                            )
                          ]
                        )
                        (CompoundWord
                          parts: [(Token id:Id.Lit_RBracket length:1 col:29 line:...0x1022)]
                        )
                      ]
                      is_last_cmd: F
                    )
                  terminator: (Token id:Id.Op_Semi length:1 col:30 line:...0x1022)
                )
              ]
            )
          then_kw: (Token id:Id.KW_Then length:4 col:32 line:...0x1022)
          action: [
            (command.ShAssignment
              left: 
                (Token
                  id: Id.Lit_VarLike
                  length: 6
                  col: 2
                  line: (SourceLine line_num:25 content:"  flags=\"${flags} --bar\"\n" src:...0x1c45)
                )
              pairs: [
                (AssignPair
                  left: ...0x1a22
                  lhs: (sh_lhs.Name left:...0x1a22 name:flags)
                  op: assign_op.Equal
                  rhs: 
                    (CompoundWord
                      parts: [
                        (DoubleQuoted
                          left: (Token id:Id.Left_DoubleQuote length:1 col:8 line:...0x1a2a)
                          parts: [
                            (BracedVarSub
                              left: (Token id:Id.Left_DollarBrace length:2 col:9 line:...0x1a2a)
                              token: (Token id:Id.VSub_Name length:5 col:11 line:...0x1a2a)
                              var_name: flags
                              right: (Token id:Id.Right_DollarBrace length:1 col:16 line:...0x1a2a)
                            )
                            (Token
                              id: Id.Lit_Chars
                              length: 6
                              col: 17
                              line: ...0x1a2a
                            )
                          ]
                          right: (Token id:Id.Right_DoubleQuote length:1 col:23 line:...0x1a2a)
                        )
                      ]
                    )
                )
              ]
            )
          ]
          then_tok: ...0x1a42
        )
      ]
      else_action: []
      fi_kw: 
        (Token
          id: Id.KW_Fi
          length: 2
          col: 0
          line: (SourceLine line_num:26 content:"fi\n" src:...0x1c45)
        )
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: 
            (SourceLine
              line_num: 28
              content: "argv ${flags}  # unquoted splitting\n"
              src: ...0x1c45
            )
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x19a6])
        (CompoundWord
          parts: [
            (BracedVarSub
              left: (Token id:Id.Left_DollarBrace length:2 col:5 line:...0x19aa)
              token: (Token id:Id.VSub_Name length:5 col:7 line:...0x19aa)
              var_name: flags
              right: (Token id:Id.Right_DollarBrace length:1 col:12 line:...0x19aa)
            )
          ]
        )
      ]
      is_last_cmd: F
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 3
          col: 0
          line: (SourceLine line_num:40 content:"set -o errexit\n" src:...0x1c45)
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x18ae])
        (CompoundWord parts:[(Token id:Id.Lit_Chars length:2 col:4 line:...0x18b2)])
        (CompoundWord parts:[(Token id:Id.Lit_Chars length:7 col:7 line:...0x18b2)])
      ]
      is_last_cmd: F
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 5
          col: 0
          line: (SourceLine line_num:41 content:"shopt -s parse_at simple_word_eval\n" src:...0x1c45)
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x1862])
        (CompoundWord parts:[(Token id:Id.Lit_Chars length:2 col:6 line:...0x1866)])
        (CompoundWord parts:[(Token id:Id.Lit_Chars length:8 col:9 line:...0x1866)])
        (CompoundWord parts:[(Token id:Id.Lit_Chars length:16 col:18 line:...0x1866)])
      ]
      is_last_cmd: F
    )
    (command.Mutation
      keyword: 
        (Token
          id: Id.KW_SetVar
          length: 6
          col: 0
          line: 
            (SourceLine
              line_num: 43
              content: "setvar CONFIG_HAVE_FOO = \"yes\"  # TODO: change to single quotes\n"
              src: ...0x1c45
            )
        )
      lhs: [(Token id:Id.Expr_Name length:15 col:7 line:...0x1806 tval:CONFIG_HAVE_FOO)]
      op: (Token id:Id.Arith_Equal length:1 col:23 line:...0x1806)
      rhs: 
        (DoubleQuoted
          left: (Token id:Id.Left_DoubleQuote length:1 col:25 line:...0x1806)
          parts: [(Token id:Id.Lit_Chars length:3 col:26 line:...0x1806)]
          right: (Token id:Id.Right_DoubleQuote length:1 col:29 line:...0x1806)
        )
    )
    (command.Mutation
      keyword: 
        (Token
          id: Id.KW_SetVar
          length: 6
          col: 0
          line: 
            (SourceLine
              line_num: 44
              content: "setvar path = \"/etc/path with spaces\"\n"
              src: ...0x1c45
            )
        )
      lhs: [(Token id:Id.Expr_Name length:4 col:7 line:...0x1722 tval:path)]
      op: (Token id:Id.Arith_Equal length:1 col:12 line:...0x1722)
      rhs: 
        (DoubleQuoted
          left: (Token id:Id.Left_DoubleQuote length:1 col:14 line:...0x1722)
          parts: [(Token id:Id.Lit_Chars length:21 col:15 line:...0x1722)]
          right: (Token id:Id.Right_DoubleQuote length:1 col:36 line:...0x1722)
        )
    )
    (command.Mutation
      keyword: 
        (Token
          id: Id.KW_SetVar
          length: 6
          col: 0
          line: (SourceLine line_num:45 content:"setvar flags = %()\n" src:...0x1c45)
        )
      lhs: [(Token id:Id.Expr_Name length:5 col:7 line:...0x164a tval:flags)]
      op: (Token id:Id.Arith_Equal length:1 col:13 line:...0x164a)
      rhs: 
        (ShArrayLiteral
          left: (Token id:Id.Left_PercentParen length:2 col:15 line:...0x164a)
          words: []
          right: (Token id:Id.Right_ShArrayLiteral length:1 col:17 line:...0x164a)
        )
    )
    (command.If
      if_kw: 
        (Token
          id: Id.KW_If
          length: 2
          col: 0
          line: (SourceLine line_num:47 content:"if test -n $CONFIG_HAVE_FOO; then\n" src:...0x1c45)
        )
      arms: [
        (IfArm
          keyword: ...0x1572
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Simple
                      blame_tok: (Token id:Id.Lit_Chars length:4 col:3 line:...0x1576)
                      more_env: []
                      words: [
                        (CompoundWord parts:[...0x155e])
                        (CompoundWord
                          parts: [(Token id:Id.Lit_Chars length:2 col:8 line:...0x1576)]
                        )
                        (CompoundWord
                          parts: [
                            (SimpleVarSub
                              tok: (Token id:Id.VSub_DollarName length:16 col:11 line:...0x1576)
                            )
                          ]
                        )
                      ]
                      is_last_cmd: F
                    )
                  terminator: (Token id:Id.Op_Semi length:1 col:27 line:...0x1576)
                )
              ]
            )
          then_kw: (Token id:Id.KW_Then length:4 col:29 line:...0x1576)
          action: [
            (command.Simple
              blame_tok: 
                (Token
                  id: Id.Lit_Chars
                  length: 6
                  col: 2
                  line: 
                    (SourceLine
                      line_num: 48
                      content: "  append -- --foo=$path (flags)\n"
                      src: ...0x1c45
                    )
                )
              more_env: []
              words: [
                (CompoundWord parts:[...0x1fa2])
                (CompoundWord
                  parts: [(Token id:Id.Lit_Chars length:2 col:9 line:...0x1faa)]
                )
                (CompoundWord
                  parts: [
                    (Token id:Id.Lit_Chars length:5 col:12 line:...0x1faa)
                    (Token id:Id.Lit_Equals length:1 col:17 line:...0x1faa)
                    (SimpleVarSub
                      tok: (Token id:Id.VSub_DollarName length:5 col:18 line:...0x1faa)
                    )
                  ]
                )
              ]
              typed_args: 
                (ArgList
                  left: (Token id:Id.Op_LParen length:1 col:24 line:...0x1faa)
                  pos_args: [
                    (expr.Var
                      left: (Token id:Id.Expr_Name length:5 col:25 line:...0x1faa)
                      name: flags
                    )
                  ]
                  named_args: []
                  right: (Token id:Id.Op_RParen length:1 col:30 line:...0x1faa)
                )
              is_last_cmd: F
            )
          ]
          then_tok: ...0x1fbe
        )
      ]
      else_action: []
      fi_kw: 
        (Token
          id: Id.KW_Fi
          length: 2
          col: 0
          line: (SourceLine line_num:49 content:"fi\n" src:...0x1c45)
        )
    )
    (command.If
      if_kw: 
        (Token
          id: Id.KW_If
          length: 2
          col: 0
          line: (SourceLine line_num:51 content:"if test -n $CONFIG_HAVE_BAR; then\n" src:...0x1c45)
        )
      arms: [
        (IfArm
          keyword: ...0x1eba
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Simple
                      blame_tok: (Token id:Id.Lit_Chars length:4 col:3 line:...0x1ebe)
                      more_env: []
                      words: [
                        (CompoundWord parts:[...0x1ea6])
                        (CompoundWord
                          parts: [(Token id:Id.Lit_Chars length:2 col:8 line:...0x1ebe)]
                        )
                        (CompoundWord
                          parts: [
                            (SimpleVarSub
                              tok: (Token id:Id.VSub_DollarName length:16 col:11 line:...0x1ebe)
                            )
                          ]
                        )
                      ]
                      is_last_cmd: F
                    )
                  terminator: (Token id:Id.Op_Semi length:1 col:27 line:...0x1ebe)
                )
              ]
            )
          then_kw: (Token id:Id.KW_Then length:4 col:29 line:...0x1ebe)
          action: [
            (command.Simple
              blame_tok: 
                (Token
                  id: Id.Lit_Chars
                  length: 6
                  col: 2
                  line: (SourceLine line_num:52 content:"  append -- --bar (flags)\n" src:...0x1c45)
                )
              more_env: []
              words: [
                (CompoundWord parts:[...0x1e3e])
                (CompoundWord
                  parts: [(Token id:Id.Lit_Chars length:2 col:9 line:...0x1e46)]
                )
                (CompoundWord
                  parts: [(Token id:Id.Lit_Chars length:5 col:12 line:...0x1e46)]
                )
              ]
              typed_args: 
                (ArgList
                  left: (Token id:Id.Op_LParen length:1 col:18 line:...0x1e46)
                  pos_args: [
                    (expr.Var
                      left: (Token id:Id.Expr_Name length:5 col:19 line:...0x1e46)
                      name: flags
                    )
                  ]
                  named_args: []
                  right: (Token id:Id.Op_RParen length:1 col:24 line:...0x1e46)
                )
              is_last_cmd: F
            )
          ]
          then_tok: ...0x1e5e
        )
      ]
      else_action: []
      fi_kw: 
        (Token
          id: Id.KW_Fi
          length: 2
          col: 0
          line: (SourceLine line_num:53 content:"fi\n" src:...0x1c45)
        )
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: (SourceLine line_num:55 content:"argv @flags\n" src:...0x1c45)
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x1d5e])
        (CompoundWord parts:[(Token id:Id.Lit_Splice length:6 col:5 line:...0x1d62)])
      ]
      is_last_cmd: F
    )
  ]
)
---
(command.CommandList
  children: [
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 5
          col: 0
          line: 
            (SourceLine
              line_num: 2
              content: "shopt -s oil-parse-at static-word-eval\n"
              src: (source.MainFile path:ysh/testdata/array-splice-demo.osh)
            )
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x13d2])
        (CompoundWord parts:[(Token id:Id.Lit_Chars length:2 col:6 line:...0x13d6)])
        (CompoundWord parts:[(Token id:Id.Lit_Chars length:12 col:9 line:...0x13d6)])
        (CompoundWord parts:[(Token id:Id.Lit_Chars length:16 col:22 line:...0x13d6)])
      ]
      is_last_cmd: F
    )
    (command.ShAssignment
      left: 
        (Token
          id: Id.Lit_VarLike
          length: 9
          col: 0
          line: (SourceLine line_num:4 content:"myglobal=global\n" src:...0x1c45)
        )
      pairs: [
        (AssignPair
          left: ...0x136a
          lhs: (sh_lhs.Name left:...0x136a name:myglobal)
          op: assign_op.Equal
          rhs: (CompoundWord parts:[(Token id:Id.Lit_Chars length:6 col:9 line:...0x136e)])
        )
      ]
    )
    (command.VarDecl
      keyword: 
        (Token
          id: Id.KW_Var
          length: 3
          col: 0
          line: 
            (SourceLine
              line_num: 6
              content: "var myarray = :| $myglobal $'line\\n' ${z:-default} |\n"
              src: ...0x1c45
            )
        )
      lhs: [(NameType left:(Token id:Id.Expr_Name length:7 col:4 line:...0x131e) name:myarray)]
      rhs: 
        (ShArrayLiteral
          left: (Token id:Id.Left_ColonPipe length:2 col:14 line:...0x131e)
          words: [
            (CompoundWord
              parts: [(SimpleVarSub tok:(Token id:Id.VSub_DollarName length:9 col:17 line:...0x131e))]
            )
            (CompoundWord
              parts: [
                (SingleQuoted
                  left: (Token id:Id.Left_DollarSingleQuote length:2 col:27 line:...0x131e)
                  sval: "line\n"
                  right: (Token id:Id.Right_SingleQuote length:1 col:35 line:...0x131e)
                )
              ]
            )
            (CompoundWord
              parts: [
                (BracedVarSub
                  left: (Token id:Id.Left_DollarBrace length:2 col:37 line:...0x131e)
                  token: (Token id:Id.VSub_Name length:1 col:39 line:...0x131e)
                  var_name: z
                  suffix_op: 
                    (suffix_op.Unary
                      op: (Token id:Id.VTest_ColonHyphen length:2 col:40 line:...0x131e)
                      arg_word: 
                        (CompoundWord
                          parts: [(Token id:Id.Lit_Chars length:7 col:42 line:...0x131e)]
                        )
                    )
                  right: (Token id:Id.Right_DollarBrace length:1 col:49 line:...0x131e)
                )
              ]
            )
          ]
          right: (Token id:Id.Op_Pipe length:1 col:51 line:...0x131e)
        )
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: (SourceLine line_num:7 content:"spec/bin/argv.py @myarray\n" src:...0x1c45)
        )
      more_env: []
      words: [
        (CompoundWord
          parts: [
            ...0x1202
            (Token id:Id.Lit_Slash length:1 col:4 line:...0x1206)
            (Token id:Id.Lit_Chars length:3 col:5 line:...0x1206)
            (Token id:Id.Lit_Slash length:1 col:8 line:...0x1206)
            (Token id:Id.Lit_Chars length:7 col:9 line:...0x1206)
          ]
        )
        (CompoundWord parts:[(Token id:Id.Lit_Splice length:8 col:17 line:...0x1206)])
      ]
      is_last_cmd: F
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: (SourceLine line_num:8 content:"echo len=$[len(myarray)]\n" src:...0x1c45)
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x11a2])
        (CompoundWord
          parts: [
            (Token id:Id.Lit_VarLike length:4 col:5 line:...0x11a6)
            (word_part.ExprSub
              left: (Token id:Id.Left_DollarBracket length:2 col:9 line:...0x11a6)
              child: 
                (expr.FuncCall
                  func: 
                    (expr.Var
                      left: (Token id:Id.Expr_Name length:3 col:11 line:...0x11a6)
                      name: len
                    )
                  args: 
                    (ArgList
                      left: (Token id:Id.Op_LParen length:1 col:14 line:...0x11a6)
                      pos_args: [
                        (expr.Var
                          left: (Token id:Id.Expr_Name length:7 col:15 line:...0x11a6)
                          name: myarray
                        )
                      ]
                      named_args: []
                      right: (Token id:Id.Op_RParen length:1 col:22 line:...0x11a6)
                    )
                )
              right: (Token id:Id.Op_RBracket length:1 col:23 line:...0x11a6)
            )
          ]
        )
      ]
      is_last_cmd: F
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: (SourceLine line_num:9 content:"echo\n" src:...0x1c45)
        )
      more_env: []
      words: [(CompoundWord parts:[...0x10a2])]
      is_last_cmd: F
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 6
          col: 0
          line: 
            (SourceLine
              line_num: 11
              content: "append _ '1 2' ${myglobal:-default} (myarray)\n"
              src: ...0x1c45
            )
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x1066])
        (CompoundWord parts:[(Token id:Id.Lit_Chars length:1 col:7 line:...0x106a)])
        (CompoundWord
          parts: [
            (SingleQuoted
              left: (Token id:Id.Left_SingleQuote length:1 col:9 line:...0x106a)
              sval: "1 2"
              right: (Token id:Id.Right_SingleQuote length:1 col:13 line:...0x106a)
            )
          ]
        )
        (CompoundWord
          parts: [
            (BracedVarSub
              left: (Token id:Id.Left_DollarBrace length:2 col:15 line:...0x106a)
              token: (Token id:Id.VSub_Name length:8 col:17 line:...0x106a)
              var_name: myglobal
              suffix_op: 
                (suffix_op.Unary
                  op: (Token id:Id.VTest_ColonHyphen length:2 col:25 line:...0x106a)
                  arg_word: 
                    (CompoundWord
                      parts: [(Token id:Id.Lit_Chars length:7 col:27 line:...0x106a)]
                    )
                )
              right: (Token id:Id.Right_DollarBrace length:1 col:34 line:...0x106a)
            )
          ]
        )
      ]
      typed_args: 
        (ArgList
          left: (Token id:Id.Op_LParen length:1 col:36 line:...0x106a)
          pos_args: [
            (expr.Var
              left: (Token id:Id.Expr_Name length:7 col:37 line:...0x106a)
              name: myarray
            )
          ]
          named_args: []
          right: (Token id:Id.Op_RParen length:1 col:44 line:...0x106a)
        )
      is_last_cmd: F
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: (SourceLine line_num:12 content:"spec/bin/argv.py @myarray\n" src:...0x1c45)
        )
      more_env: []
      words: [
        (CompoundWord
          parts: [
            ...0x1a16
            (Token id:Id.Lit_Slash length:1 col:4 line:...0x1a1a)
            (Token id:Id.Lit_Chars length:3 col:5 line:...0x1a1a)
            (Token id:Id.Lit_Slash length:1 col:8 line:...0x1a1a)
            (Token id:Id.Lit_Chars length:7 col:9 line:...0x1a1a)
          ]
        )
        (CompoundWord parts:[(Token id:Id.Lit_Splice length:8 col:17 line:...0x1a1a)])
      ]
      is_last_cmd: F
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: (SourceLine line_num:13 content:"echo len=$[len(myarray)]\n" src:...0x1c45)
        )
      more_env: []
      words: [
        (CompoundWord parts:[...0x19b6])
        (CompoundWord
          parts: [
            (Token id:Id.Lit_VarLike length:4 col:5 line:...0x19ba)
            (word_part.ExprSub
              left: (Token id:Id.Left_DollarBracket length:2 col:9 line:...0x19ba)
              child: 
                (expr.FuncCall
                  func: 
                    (expr.Var
                      left: (Token id:Id.Expr_Name length:3 col:11 line:...0x19ba)
                      name: len
                    )
                  args: 
                    (ArgList
                      left: (Token id:Id.Op_LParen length:1 col:14 line:...0x19ba)
                      pos_args: [
                        (expr.Var
                          left: (Token id:Id.Expr_Name length:7 col:15 line:...0x19ba)
                          name: myarray
                        )
                      ]
                      named_args: []
                      right: (Token id:Id.Op_RParen length:1 col:22 line:...0x19ba)
                    )
                )
              right: (Token id:Id.Op_RBracket length:1 col:23 line:...0x19ba)
            )
          ]
        )
      ]
      is_last_cmd: F
    )
    (command.Simple
      blame_tok: 
        (Token
          id: Id.Lit_Chars
          length: 4
          col: 0
          line: (SourceLine line_num:14 content:"echo\n" src:...0x1c45)
        )
      more_env: []
      words: [(CompoundWord parts:[...0x18ba])]
      is_last_cmd: F
    )
    (command.ForEach
      keyword: 
        (Token
          id: Id.KW_For
          length: 3
          col: 0
          line: (SourceLine line_num:16 content:"for item in (myarray) {\n" src:...0x1c45)
        )
      iter_names: [item]
      iterable: 
        (for_iter.YshExpr
          e: (expr.Var left:(Token id:Id.Expr_Name length:7 col:13 line:...0x187e) name:myarray)
          blame: (Token id:Id.KW_In length:2 col:9 line:...0x187e)
        )
      body: 
        (BraceGroup
          left: (Token id:Id.Lit_LBrace length:1 col:22 line:...0x187e)
          children: [
            (command.Simple
              blame_tok: 
                (Token
                  id: Id.Lit_Chars
                  length: 4
                  col: 2
                  line: (SourceLine line_num:17 content:"  echo \"  $item\"\n" src:...0x1c45)
                )
              more_env: []
              words: [
                (CompoundWord parts:[...0x17ce])
                (CompoundWord
                  parts: [
                    (DoubleQuoted
                      left: (Token id:Id.Left_DoubleQuote length:1 col:7 line:...0x17d6)
                      parts: [
                        (Token id:Id.Lit_Chars length:2 col:8 line:...0x17d6)
                        (SimpleVarSub
                          tok: (Token id:Id.VSub_DollarName length:5 col:10 line:...0x17d6)
                        )
                      ]
                      right: (Token id:Id.Right_DoubleQuote length:1 col:15 line:...0x17d6)
                    )
                  ]
                )
              ]
              is_last_cmd: F
            )
          ]
          right: 
            (Token
              id: Id.Lit_RBrace
              length: 1
              col: 0
              line: (SourceLine line_num:18 content:"}\n" src:...0x1c45)
            )
        )
    )
  ]
)