From 075627709f123290c571c705514f2bb20841074a Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Wed, 1 Mar 2023 11:12:47 -0600 Subject: [PATCH] preserves_schema_nim: recursively search dicts for embedding --- preserves.nimble | 2 +- src/preserves/preserves_schema_nim.nim | 7 +++++-- src/preserves/schema.nim | 6 +++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/preserves.nimble b/preserves.nimble index b73825d..3ff9aa5 100644 --- a/preserves.nimble +++ b/preserves.nimble @@ -1,6 +1,6 @@ # Package -version = "20230228" +version = "20230301" 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 96e2b07..2fd23c1 100644 --- a/src/preserves/preserves_schema_nim.nim +++ b/src/preserves/preserves_schema_nim.nim @@ -211,7 +211,8 @@ proc attrs(loc: Location; cp: CompoundPattern; seen: RefSet): Attributes = for p in cp.tupleprefix.fixed: result = result + attrs(loc, p, seen) of CompoundPatternKind.dict: - discard + for nsp in cp.dict.entries.values: + result = result + attrs(loc, nsp, seen) proc attrs(loc: Location; pat: Pattern; seen: RefSet): Attributes = case pat.orKind @@ -914,6 +915,7 @@ when isMainModule: for inputPath in inputs: var bundle: Bundle if dirExists inputPath: + new bundle for filePath in walkDirRec(inputPath, relative = true): var (dirPath, fileName, fileExt) = splitFile(filePath) if fileExt == ".prs": @@ -934,9 +936,10 @@ when isMainModule: if fromPreserve(schema, pr): bundle.modules[@[Symbol fileName]] = schema else: + new bundle var scm = parsePreservesSchema(readFile(inputPath), dirPath) bundle.modules[@[Symbol fileName]] = scm - if bundle.modules.len == 0: + if bundle.isNil or bundle.modules.len == 0: quit "Failed to recognize " & inputPath else: writeModules(bundle) diff --git a/src/preserves/schema.nim b/src/preserves/schema.nim index 5fcd971..69dd44d 100644 --- a/src/preserves/schema.nim +++ b/src/preserves/schema.nim @@ -7,7 +7,7 @@ type `name`*: Symbol ModulePath* = seq[Symbol] - Bundle* {.preservesRecord: "bundle".} = object + Bundle* {.preservesRecord: "bundle".} = ref object `modules`*: Modules CompoundPatternKind* {.pure.} = enum @@ -162,12 +162,12 @@ type `variantLabel`*: string `pattern`*: Pattern - SchemaData* {.preservesDictionary.} = object + SchemaData* {.preservesDictionary.} = ref object `version`* {.preservesLiteral: "1".}: bool `embeddedType`*: EmbeddedTypeName `definitions`*: Definitions - Schema* {.preservesRecord: "schema".} = object + Schema* {.preservesRecord: "schema".} = ref object `data`*: SchemaData PatternKind* {.pure.} = enum