public void EvalUnique(RCRunner runner, RCClosure closure, RCBlock right) { // Preserve the names in the original order // Always use the last value for any given name RCBlock result = RCBlock.Empty; RCArray <string> names = new RCArray <string> (); for (int i = 0; i < right.Count; ++i) { RCBlock name = right.GetName(i); if (!names.Contains(name.Name)) { names.Write(name.Name); } } for (int i = 0; i < names.Count; ++i) { RCBlock name = right.GetName(names[i]); result = new RCBlock(result, name.Name, name.Evaluator, name.Value); } runner.Yield(closure, result); }