def option_parser(hash)
result = []
chdir = hash.delete(:chdir)
if chdir
result[0] = [Dir, :chdir, chdir]
end
result += hash.map {|k, v|
case k
when :in, :out, :err
if right = redirection_ast(v, k)
[[REDIRECTION_MAPPING[k], :reopen, right]]
else
[[REDIRECTION_MAPPING[k], :close]]
end
when Array
raise NotImplementedError if k.size > 2
left1, left2 = *k.map {|i| REDIRECTION_MAPPING[i] }
if right = redirection_ast(v)
[
[left1, :reopen, right],
[left2, :reopen, left1],
]
else
[
[left1, :close],
[left2, :close],
]
end
end
}.flatten(1)
result
end