private void Slice(string loc, string expr, object value, string path)
{
var list = value as IList;
if (list == null)
return;
int length = list.Count;
string[] parts = loc.Split(Colon);
int start = ParseInt(parts[0]);
int end = ParseInt(parts[1], list.Count);
int step = parts.Length > 2 ? ParseInt(parts[2], 1) : 1;
start = (start < 0) ? Math.Max(0, start + length) : Math.Min(length, start);
end = (end < 0) ? Math.Max(0, end + length) : Math.Min(length, end);
for (int i = start; i < end; i += step)
Trace(i + ";" + expr, value, path);
}