schema: sort dictionary fields by key

Size of the value is a compelling alternative but cannot be
inferred at code generation time.
This commit is contained in:
Emery Hemingway 2023-06-11 21:34:16 +01:00
parent fa5441bd01
commit c087294b23
2 changed files with 10 additions and 1 deletions

View File

@ -597,7 +597,13 @@ proc addFields(recList: PNode; loc: Location; known: var TypeTable; pat: Pattern
reclist
proc addFields(recList: PNode; loc: Location; known: var TypeTable; entries: DictionaryEntries; parentName: string): PNode {.discardable.} =
var sortedEntries =
initOrderedTable[Preserve[void], NamedSimplePattern](entries.len)
for key, val in entries.pairs:
sortedEntries[key] = val
sort(sortedEntries) do (x, y: (Preserve[void], NamedSimplePattern)) -> int:
cmp(x[0], y[0])
for key, val in sortedEntries.pairs:
doAssert(key.isSymbol)
let label = string key.symbol
addField(recList, loc, known, val.pattern, label)

View File

@ -4,7 +4,10 @@
# this module is included in ../../preserves.nim
import std/[parseutils, unicode]
from std/sequtils import insert
when isMainModule:
from std/sequtils import insert
from std/strutils import Whitespace, parseFloat, parseHexStr, parseInt, tokenize
import npeg
import ../pegs