(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:out)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_Number '$1'))}
          spids: [3]
        )
      ]
    )
    (C {(shift)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:in)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_At '$@'))}
          spids: [10]
        )
      ]
    )
    (command.Pipeline
      children: [
        (command.ForEach
          iter_name: i
          iter_words: [{($ Id.VSub_DollarName '$in')}]
          do_arg_iter: F
          body: 
            (command.DoGroup
              children: [
                (C {(eval)} {($ Id.VSub_DollarName '$CPP')} {($ Id.VSub_DollarName '$LINUXINCLUDE')} 
                  {(-dD)} {(-imacros)} {(DQ ($ Id.VSub_DollarName '$i'))} {(-x)} {(c)} {(/dev/null)}
                )
              ]
            )
        )
        (C {(awk)} 
          {
            (SQ 
              (Token
                id: Id.Lit_Chars
                val: '$1 == "#define" && $2 ~ /__HYPERVISOR_[a-z][a-z_0-9]*/ { v[$3] = $2 }\n'
                span_id: 56
              ) 
              (Token
                id: Id.Lit_Chars
                val: '\tEND {   print "/* auto-generated by scripts/xen-hypercall.sh */"\n'
                span_id: 57
              ) (Token id:Id.Lit_Chars val:'\t\tfor (i in v) if (!(v[i] in v))\n' span_id:58) 
              (Token
                id: Id.Lit_Chars
                val: '\t\t\tprint "HYPERCALL("substr(v[i], 14)")"}'
                span_id: 59
              )
            )
          }
        )
        (command.Simple
          words: [{(sort)} {(-u)}]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'>' span_id:68)
              fd: -1
              arg_word: {($ Id.VSub_DollarName '$out')}
            )
          ]
        )
      ]
      negated: F
    )
  ]
)