Method code for $trie._add()

[Turn on line numbering]
arg trie, key, @values;
var n, word;

// This still ain't working. Current problem: values get mingled
if (trie[1]) {
    if (key == trie[1][1])
        return trie.replace(1, [key, @values]);
    word = trie[1][1];
    if (word) {
        if (!(n = word[1] in trie[2]))
            trie = [@trie.replace(2, trie[2] + word[1]), ._add([0, ""], word.subrange(2), @trie[1].subrange(2))];
        else
            trie = trie.replace(n + 2, ._add(trie[n + 2], word.subrange(2), @trie[1].subrange(2), @values));
        trie = trie.replace(1, 0);
    }
}
if (!trie[1] && trie.length() == 2 || !key)
    return trie.replace(1, [key, @values]);
if (!(n = key[1] in trie[2]))
    return [@trie.replace(2, trie[2] + key[1]), ._add([0, ""], key.subrange(2), @values)];
return trie.replace(n + 2, ._add(trie[n + 2], key.subrange(2), @values));

// Miroslav Silovic
// Created 10-May-1995 as a part of ColdCore, see: @help Credit

Tlon