(command.CommandList
  children: [
    (command.Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(lhs_expr.LhsName name:out) op:Equal rhs:{(DQ ($ VSub_Number '$1'))})]
    )
    (C {(shift)})
    (command.Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(lhs_expr.LhsName name:in) op:Equal rhs:{(DQ ($ VSub_At '$@'))})]
    )
    (command.Pipeline
      children: [
        (command.ForEach
          iter_name: i
          iter_words: [{($ VSub_DollarName '$in')}]
          do_arg_iter: F
          body: 
            (command.DoGroup
              children: [
                (C {(eval)} {($ VSub_DollarName '$CPP')} {($ VSub_DollarName '$LINUXINCLUDE')} {(-dD)} 
                  {(-imacros)} {(DQ ($ VSub_DollarName '$i'))} {(-x)} {(c)} {(/dev/null)}
                )
              ]
            )
        )
        (C {(awk)} 
          {
            (SQ <'$1 == "#define" && $2 ~ /__HYPERVISOR_[a-z][a-z_0-9]*/ { v[$3] = $2 }\n'> 
              <'\tEND {   print "/* auto-generated by scripts/xen-hypercall.sh */"\n'> <'\t\tfor (i in v) if (!(v[i] in v))\n'> <'\t\t\tprint "HYPERCALL("substr(v[i], 14)")"}'>
            )
          }
        )
        (command.SimpleCommand
          words: [{(sort)} {(-u)}]
          redirects: [
            (redir.Redir
              op: <Redir_Great '>'>
              fd: 16777215
              arg_word: {($ VSub_DollarName '$out')}
            )
          ]
        )
      ]
      negated: F
    )
  ]
)