# HG changeset patch # User Matthew Wild # Date 1337693479 -3600 # Node ID 05ea6c1ae393a4c1fb0c51a6ae978f387339e743 # Parent d885ca14362d9df3f090c6679f99e8c46c7bd017 util.multitable: Some fixes for iter()... always match against query, and pass value after path results diff -r d885ca14362d -r 05ea6c1ae393 util/multitable.lua --- a/util/multitable.lua Sat May 19 21:57:40 2012 +0100 +++ b/util/multitable.lua Tue May 22 14:31:19 2012 +0100 @@ -144,18 +144,19 @@ keys[depth] = key; end local value = stack[depth][key]; - if depth == maxdepth then -- Result - local result = {}; -- Collect keys forming path to result - for i = 1, depth do - result[i] = keys[i]; + if query[depth] == nil or key == query[depth] then + if depth == maxdepth then -- Result + local result = {}; -- Collect keys forming path to result + for i = 1, depth do + result[i] = keys[i]; + end + result[depth+1] = value; + return unpack(result, 1, depth+1); + elseif type(value) == "table" then + t_insert(stack, value); -- Descend end - return unpack(result, 1, depth); - else - if (query[depth] == nil or key == query[depth]) and type(value) == "table" then -- Descend - t_insert(stack, value); - end - return it(self); end + return it(self); end; return it, self; end