parseinstrs: Fold trie layers with only one child
This commit is contained in:
@@ -427,12 +427,16 @@ class Trie:
|
|||||||
entry = self.trie[num]
|
entry = self.trie[num]
|
||||||
for i, elem in enumerate(entry):
|
for i, elem in enumerate(entry):
|
||||||
if elem and not elem[0].is_instr and elem[1] in synonyms:
|
if elem and not elem[0].is_instr and elem[1] in synonyms:
|
||||||
entry[i] = elem[0], synonyms[elem[1]]
|
entry[i] = synonyms[elem[1]]
|
||||||
|
|
||||||
# And deduplicate all entries of this kind
|
|
||||||
unique_entry = tuple(entry)
|
unique_entry = tuple(entry)
|
||||||
if unique_entry in entries:
|
if len(set(unique_entry)) == 1:
|
||||||
synonyms[num] = entries[unique_entry]
|
# Omit kind if all entries point to the same child
|
||||||
|
synonyms[num] = entry[0]
|
||||||
|
self.trie[num] = None
|
||||||
|
elif unique_entry in entries:
|
||||||
|
# Deduplicate entries of this kind
|
||||||
|
synonyms[num] = kind, entries[unique_entry]
|
||||||
self.trie[num] = None
|
self.trie[num] = None
|
||||||
else:
|
else:
|
||||||
entries[unique_entry] = num
|
entries[unique_entry] = num
|
||||||
|
|||||||
Reference in New Issue
Block a user