From 8c0af37694a63ed008488fa42b58a2d144da890b Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Sat, 9 Jul 2022 08:08:52 -0500 Subject: [PATCH] Use set[T] rather than HashSet[T] for enum sets --- preserves.nimble | 2 +- src/preserves/preserves_schema_nim.nim | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/preserves.nimble b/preserves.nimble index 067fcdf..0259620 100644 --- a/preserves.nimble +++ b/preserves.nimble @@ -1,6 +1,6 @@ # Package -version = "99999999" +version = "20220709" author = "Emery Hemingway" description = "data model and serialization format" license = "Unlicense" diff --git a/src/preserves/preserves_schema_nim.nim b/src/preserves/preserves_schema_nim.nim index 635e707..67542b2 100644 --- a/src/preserves/preserves_schema_nim.nim +++ b/src/preserves/preserves_schema_nim.nim @@ -266,6 +266,12 @@ proc isSymbolEnum(scm: Schema; def: Definition): bool = result = isSymbolEnum(scm, def.or) else: discard +proc isSymbolEnum(scm: Schema; sp: SimplePattern): bool = + # HashSet + if sp.orKind == SimplepatternKind.`Ref` and sp.ref.module.len == 0: + result = isSymbolEnum(scm, deref(scm, sp.ref)) + else: discard + proc isAny(scm: Schema; def: Definition): bool = if def.orKind == DefinitionKind.Pattern: if def.pattern.orKind == PatternKind.SimplePattern: @@ -295,7 +301,11 @@ proc typeIdent(scm: Schema; sp: SimplePattern): TypeSpec = result.node = nn(nkBracketExpr, ident"seq", result.node) of SimplepatternKind.`setof`: result = typeIdent(scm, sp.setof.pattern) - result.node = nn(nkBracketExpr, ident"HashSet", result.node) + result.node = + if isSymbolEnum(scm, sp.setof.pattern): + nn(nkBracketExpr, ident"set", result.node) + else: + nn(nkBracketExpr, ident"HashSet", result.node) of SimplepatternKind.`dictof`: let key = typeIdent(scm, sp.dictof.key)