diff --git a/src/syndicate/patterns.nim b/src/syndicate/patterns.nim index 44387fa..e06e0ec 100644 --- a/src/syndicate/patterns.nim +++ b/src/syndicate/patterns.nim @@ -74,7 +74,7 @@ proc `?`*[T](pr: Preserve[T]): Pattern = of pkSymbol: ?pr.symbol of pkRecord: ?DCompoundRec( - label: pr.label, + label: cast[Preserve[Ref]](pr.label), # TODO: don't cast like this fields: map[Preserve[T], Pattern](pr.fields, `?`)) of pkSequence: ?DCompoundArr(items: map(pr.sequence, `?`)) @@ -82,7 +82,7 @@ proc `?`*[T](pr: Preserve[T]): Pattern = ValueError, "cannot construct a pattern over a set literal") of pkDictionary: var dict = DCompoundDict() - for key, val in pr.pairs: dict.entries[key] = ?val + for key, val in pr.pairs: dict.entries[cast[Preserve[Ref]](key)] = ?val ?dict of pkEmbedded: raiseAssert "cannot construct a pattern over a embedded literal" @@ -467,7 +467,11 @@ func capture*(pat: Pattern; pr: Value): seq[Value] = if v.isNone: return @[] result.add(get v) + when isMainModule: let txt = readAll stdin if txt != "": - stdout.writeLine(? parsePreserves(txt, Ref)) + let + v = parsePreserves(txt) + pat = ?v + stdout.writeLine(pat)