From b6275a241b73019c4e452e7cf6370a7de17bd7af Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Wed, 20 Oct 2021 13:59:48 +0200 Subject: [PATCH] Schema: do not overload `$` or encode for Preserve types --- src/preserves/preserves_schema_nim.nim | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/preserves/preserves_schema_nim.nim b/src/preserves/preserves_schema_nim.nim index 3c78692..66c554b 100644 --- a/src/preserves/preserves_schema_nim.nim +++ b/src/preserves/preserves_schema_nim.nim @@ -197,7 +197,7 @@ proc isEmbeddable(scm: Schema; orDef: DefinitionOr; seen: RefSet): bool = isEmbeddable(scm, na.pattern, seen) isEmbeddable(orDef.data.pattern0) or isEmbeddable(orDef.data.pattern1) or - any(orDef.data.patternN, isEmbeddable) + sequtils.any(orDef.data.patternN, isEmbeddable) proc isEmbeddable(scm: Schema; def: Definition; seen: RefSet): bool = case def.orKind @@ -266,6 +266,16 @@ proc isSymbolEnum(scm: Schema; def: Definition): bool = result = isSymbolEnum(scm, def.or) else: discard +proc isAny(scm: Schema; def: Definition): bool = + if def.orKind == DefinitionKind.Pattern: + if def.pattern.orKind == PatternKind.SimplePattern: + case def.pattern.simplePattern.orKind + of SimplePatternKind.Ref: + result = isAny(scm, deref(scm, def.pattern.simplePattern.`ref`)) + of SimplePatternKind.any: + result = true + else: discard + proc typeIdent(atom: AtomKind): PNode = case atom of AtomKind.`Boolean`: ident"bool" @@ -705,7 +715,7 @@ proc renderNimModule*(scm: Schema): string = var name = name name[0] = name[0].toUpperAscii var defIdent = parameterize(ident(name), isEmbeddable(scm, def)) - if not isSymbolEnum(scm, def): + if not isSymbolEnum(scm, def) and not isAny(scm, def): if isEmbeddable(scm, def): mergeType(embeddableType, defIdent) else: