public void UnpackCaps(IP6 into) { List<VarDeque> posr = new List<VarDeque>(); Dictionary<string,VarDeque> namr = new Dictionary<string,VarDeque>(); CapInfo it = captures; while (it != null) { foreach (string name in it.names) { int nami; VarDeque t; if (int.TryParse(name, out nami) && nami >= 0) { while(posr.Count <= nami) posr.Add(new VarDeque()); t = posr[nami]; } else { if (!namr.TryGetValue(name, out t)) namr[name] = t = new VarDeque(); } t.Unshift(it.cap); } it = it.prev; } VarHash nam = new VarHash(); Variable[] pos = new Variable[posr.Count]; foreach (KeyValuePair<string, VarDeque> kv in namr) nam[kv.Key] = FixupList(kv.Value); for (int i = 0; i < pos.Length; i++) pos[i] = FixupList(posr[i]); into.SetSlot("positionals", pos); into.SetSlot("named", nam); }