Commit Graph

305 Commits

Author SHA1 Message Date
Emery Hemingway acdfd3c560 Permit fromPreserve for subsets of dictionaries 2023-06-11 21:35:28 +01:00
Emery Hemingway c087294b23 schema: sort dictionary fields by key
Size of the value is a compelling alternative but cannot be
inferred at code generation time.
2023-06-11 21:35:28 +01:00
Emery Hemingway fa5441bd01 Cannonicalize values at toPreserve 2023-06-11 21:35:28 +01:00
Emery Hemingway a7a90097a8 Add sort and cannonicalize 2023-06-11 21:33:41 +01:00
Emery Hemingway 96879da08c schema: do not deref atomic types 2023-06-07 11:59:50 +01:00
Emery Hemingway 0e3824fc5d schema: import std/sets when neccessary 2023-06-07 11:00:24 +01:00
Emery Hemingway 0f697349cc Add isInteger and isString procs for testing against values 2023-05-30 13:11:33 +01:00
Emery Hemingway c500e99b95 Fix some decoder defects 2023-05-20 13:53:21 +01:00
Emery Hemingway 03876850e5 schema: use Preserve[E] for records without literal labels 2023-05-17 09:12:08 +01:00
Emery Hemingway b3f40347e8 Regenerate schema module 2023-05-16 23:06:52 +01:00
Emery Hemingway 7718227662 Add step proc for symbols 2023-05-14 22:57:12 +01:00
Emery Hemingway eeef9860cf schema: don't override $ proc for Preserves[E] types 2023-05-14 22:55:27 +01:00
Emery Hemingway b7406cd6f7 Add preserves/datehooks for handling dates and times 2023-05-12 09:38:01 +01:00
Emery Hemingway b9d8275624 schema: emit "tuple[]" for literal object fields 2023-05-04 10:55:09 +01:00
Emery Hemingway cd2dde6d71 preserves_schema_nim: use field0,1,..N for anonymous fields 2023-05-03 16:03:43 +01:00
Emery Hemingway 67b470078c Revert "preserves_schema_nim: declare literal fields as void"
This reverts commit 30c330cecf.
2023-04-30 09:57:45 +01:00
Emery Hemingway 305edff213 Make toPreserve warning more explicit 2023-04-28 23:59:47 +01:00
Emery Hemingway 30c330cecf preserves_schema_nim: declare literal fields as void 2023-04-28 23:58:48 +01:00
Emery Hemingway 335d1b61cc Move jsonhooks check to runnableExamples 2023-04-10 17:51:14 -05:00
Emery Hemingway 30dbed4aa9 Allow for an unlimited DecodeBuffer size 2023-04-03 17:04:12 -05:00
Emery Hemingway ea7225e3b5 Add toDictionary procedure 2023-04-03 17:03:56 -05:00
Emery Hemingway 1a0cb2be5c Cleanup preserves_schema_nim 2023-04-01 12:33:28 -05:00
Emery Hemingway 466a8d3af4 Add initSequenceOfCap proc 2023-03-29 17:33:39 -05:00
Emery Hemingway 71b6d4c017 Rework the initX[E]() procs to initX(E = void) 2023-03-29 17:32:54 -05:00
Emery Hemingway 5d3f7b94a3 Add isRecord(…) with arity descriminator 2023-03-29 16:47:54 -05:00
Emery Hemingway 786342c39b Cannot print a void value 2023-03-29 16:47:47 -05:00
Emery Hemingway b38b85a8f1 Catch IOError at Preserves decoder 2023-03-22 11:21:46 -05:00
Emery Hemingway 8ff65486ff preserves_schema_nim: use "E" as a default emebedding ident 2023-03-01 20:58:17 -06:00
Emery Hemingway 6b965c5c0e Only catch ValueError during decode 2023-03-01 20:58:17 -06:00
Emery Hemingway dab8f11b9b Serialize dummy text for embeds 2023-03-01 20:58:17 -06:00
Emery Hemingway 075627709f preserves_schema_nim: recursively search dicts for embedding 2023-03-01 20:58:17 -06:00
Emery Hemingway a130079162 preserves_schema_nim: code formatting 2023-03-01 12:50:33 -06:00
Emery Hemingway 3a6dfc0349 preserves_schema_nim: be more careful about type parameters 2023-03-01 12:49:21 -06:00
Emery Hemingway 10682883a4 preserves_schema_nim: detect schema self references
Do not add a schema module as an import to itself when a
definition refers to a type with a qualified module name that is
the same as the schema the definition occurs in.
2023-03-01 12:49:21 -06:00
Emery Hemingway 70655a959b preserves_schema_nim: emit Perserve type for And composites 2023-03-01 12:49:18 -06:00
Emery Hemingway 66a653a775 Fix expand of embedded Preserves 2022-12-13 22:05:05 -06:00
Emery Hemingway adec7fd7ad Rewrite tupfiles 2022-12-11 19:21:17 -06:00
Emery Hemingway d5909e4df0 Schema: a collection of breaking changes
- Process all modules in a bundle simultanously so that it can be
   determined if imported types are recursive or take a parameter
- Different rules for deciding when an object must be a ref
- Use Preserve[void] if there is no EmbededTypeName defined
- Put embeddeded types directly into other types without a
  Preserve[E] container
2022-12-10 13:32:36 -06:00
Emery Hemingway cc0703c343 Fix symbol escaping during conversion to text 2022-12-08 01:00:38 -06:00
Emery Hemingway 3dd112879d Enable tracing for non-POSIX platforms 2022-12-08 01:00:38 -06:00
Emery Hemingway 587c5274f8 Fix preserving of embedded type 2022-12-08 01:00:38 -06:00
Emery Hemingway 806c4118fc Trivially convert from Preserve[void] to Preserve[E] 2022-12-08 01:00:34 -06:00
Emery Hemingway 92834a8968 Add expand, contract for embedded conversions 2022-12-08 00:59:54 -06:00
Emery Hemingway c9268b2a5d Cannot embed a void value 2022-12-08 00:59:54 -06:00
Emery Hemingway c04fc181c8 private/macros: keep walking through bracket expressions 2022-12-08 00:59:53 -06:00
Emery Hemingway 7eea68edb4 Add warning when preserving fails 2022-12-06 22:30:28 -06:00
Emery Hemingway 60c5f03637 Add preservesEmbedded pragma 2022-12-06 22:30:28 -06:00
Emery Hemingway d3132391bd Fix Symbol usage in the spry module 2022-12-05 16:10:49 -06:00
Emery Hemingway f9bed998f1 Fix schemaparse for <rec …> records 2022-12-05 16:09:04 -06:00
Emery Hemingway 6d5acf324b schemac: tool for processing schemas 2022-12-05 16:04:52 -06:00
Emery Hemingway ded072c76c More Tupfiles 2022-12-05 15:56:31 -06:00
Emery Hemingway ee2d379a65 Add Tupfiles for testing modules 2022-12-02 22:17:53 -06:00
Emery Hemingway 65195a5eb7 schemas: improve "include" parsing 2022-11-20 14:14:22 -06:00
Emery Hemingway e1ab43578a Schema: parse annotations 2022-11-20 14:13:44 -06:00
Emery Hemingway 99a1cd4d15 Symbol escaping 2022-11-06 11:04:16 -06:00
Emery Hemingway 9f8321a748 Textualize the zero length symbol as || 2022-11-06 11:03:53 -06:00
Emery Hemingway 2d2df1f918 Parse past annotations 2022-11-02 13:58:37 -05:00
Emery Hemingway 4e795cb92a Another getOrDefault 2022-10-30 21:09:17 -05:00
Emery Hemingway 489d6b31d5 Fix string escaping 2022-10-30 18:43:11 -05:00
Emery Hemingway 201cb7c68e Check for zero-length binary streams 2022-10-30 17:26:55 -05:00
Emery Hemingway 154ffb6cd8 Validate that set elements are unique during parse 2022-10-30 17:26:55 -05:00
Emery Hemingway d0af002b4a Validate that dict keys are unique during parse 2022-10-30 17:26:55 -05:00
Emery Hemingway 270e13b27b Custom unescaping of byte-strings 2022-10-30 17:26:55 -05:00
Emery Hemingway 11661d453c Replace concat with writeText
Write to a stream rather than concatentate a string.
2022-10-30 17:26:55 -05:00
Emery Hemingway 7e72c2a515 Parser: fix escaping in #"…" 2022-10-30 17:10:26 -05:00
Emery Hemingway 4ee41a7fce Parser: allow whitespace in hex and base64 2022-10-30 17:10:26 -05:00
Emery Hemingway b4756b13ae isRecord: add variant with a label 2022-10-27 15:29:45 -05:00
Emery Hemingway 7125eadd49 Use step rather than [] for dictionaries 2022-10-25 17:42:04 -05:00
Emery Hemingway 5c72729f23 xmlhooks: parse attributes
Parse attribute values to booleans and numbers. This isn't best
practices for handling XML (if there is such a thing) but it
reduces the internal representation and allows typed pattern
matching without further processing.
2022-10-25 12:18:31 -05:00
Emery Hemingway 62480318cc BufferedDecoder: feed by pointer 2022-10-23 23:39:37 -05:00
Emery Hemingway 5fe041fa45 New BufferedDecoder object 2022-10-22 18:40:24 -05:00
Emery Hemingway 85e67603ed Rewrite xmlhooks to match xml-infoset.prs 2022-10-20 14:19:24 -05:00
Emery Hemingway f92cb4d8ba Found a problem with C++ 2022-10-18 17:31:20 -05:00
Emery Hemingway 918d4d3e2e Fix encoding and decoding of embedded values 2022-10-16 15:32:09 -05:00
Emery Hemingway 5b6f673951 Convert Preserves sets to JSON arrays
A one way conversion but still useful.
2022-10-13 23:08:53 -05:00
Emery Hemingway 54ec2d439a Allocate new TableRefs when necessary 2022-10-13 23:05:37 -05:00
Emery Hemingway a97f1e8554 Fix schema includes 2022-09-04 13:15:52 -05:00
Emery Hemingway 8c0af37694 Use set[T] rather than HashSet[T] for enum sets 2022-08-30 11:45:22 -05:00
Emery Hemingway 895a8695d2 Use BiggestInt in generated code 2022-07-09 08:08:11 -05:00
Emery Hemingway cc0472da3d Add apply procedure 2022-06-25 16:19:42 -05:00
Emery Hemingway abb39e02a5 I'm using that, sometimes 2022-06-12 23:05:35 -05:00
Emery Hemingway 5043d8595a Set type conversions 2022-05-18 13:57:40 -05:00
Emery Hemingway aaf5e7ce39 Remove old imports of parse module 2022-04-25 11:53:17 -05:00
Emery Hemingway ddc26f0c71 Add pragma accessors
This library requires a forked macros module, so export accessors
that would prevent a downstream library from having the same
problems with std/macros.
2022-04-25 11:33:37 -05:00
Emery Hemingway f32e783e0b Unembed during fromPreserve 2022-04-22 00:28:36 -05:00
Emery Hemingway a3c55238f5 Generate `data` fields for anonymous patterns 2022-03-19 09:13:23 -05:00
Emery Hemingway e8d1bf2c57 Refactor mapEmbeds 2022-03-18 18:57:37 -05:00
Emery Hemingway 1dcad539f4 Move preserves/parse module into preserves
Some macros in preserves call `parsePreserves` so include that
proc implicitly.
2022-03-18 11:26:52 -05:00
Emery Hemingway 5408cb859a Add `step` func as a no-effects substitue for `[]` proc
ehmry/xdg_open_ng#2
2022-03-18 10:08:39 -05:00
Emery Hemingway a6b31247cf Fix indentation bug 2022-03-14 14:28:37 -05:00
Emery Hemingway 5f746706b6 Add forked macros module
This one has a more premissive version of "hasCustomPragma".
2022-03-10 23:41:14 -06:00
Emery Hemingway 633cb0a3c4 Tweak fromPreserve for floats and objects 2022-03-10 23:41:14 -06:00
Emery Hemingway 8b52e3baf9 Index into compound types by Preserve keys 2022-03-10 23:41:13 -06:00
Emery Hemingway db06066e17 Trace to stderr, not stdout
This would interfer with stdio communications.
2022-03-08 15:22:49 -06:00
Emery Hemingway 3924e48deb Distinct Symbol strings
More type buracracy makes schema conversion less lossy.
2022-02-20 09:23:49 -06:00
Emery Hemingway 486443a098 Remove submodule 2022-02-19 10:33:16 -06:00
Emery Hemingway 6c4cfa0885 Fix fromPreserve for distinct types
This is an example of why bypassing the type system with "when"
is dangerous.
2022-02-11 15:36:30 -06:00
Emery Hemingway ba4d567791 Careful with those variable length tuples 2021-12-24 00:38:02 +01:00
Emery Hemingway e25e06efba Don't convert Table[string,string] to {symbol:string...:...}
Should not assume that table keys can be treated at symbols. This
also makes the resulting dictionary convertable to JSON.
2021-12-22 23:49:06 +01:00
Emery Hemingway 84b28ec55a XML: use tuples rather than records for elements 2021-12-22 22:27:18 +01:00
Emery Hemingway a466930e6e Hack to unescape \n 2021-12-11 18:32:37 +00:00
Emery Hemingway 7d8c3b29c2 XML conversion 2021-12-06 23:57:47 +00:00
Emery Hemingway 200e0a0080 Do not leak null characters into the #"" encoding 2021-12-05 21:30:54 +00:00
Emery Hemingway 061898c3c2 Escaping fix in parser 2021-12-04 12:02:15 +00:00
Emery Hemingway 8a85ff5d52 Make enums generated for alt-types pure 2021-12-04 11:44:18 +00:00
Emery Hemingway 21052681b6 schemaparse: fix parsing of atoms to Preserves 2021-11-17 14:21:15 +00:00
Emery Hemingway 7cc0b050f4 Remove support for integers wider than 64 bits
I believe this was an unecessary compilication and it can be
restored later if necesary.
2021-11-12 12:25:28 +01:00
Emery Hemingway e88c238a74 Schema text parsing 2021-11-11 21:57:04 +01:00
Emery Hemingway 6039a729c8 Do not intersperse commas in sequences 2021-11-07 17:30:42 +01:00
Emery Hemingway 1dc7991761 Schemas: use int rather than BiggestInt
Produce ints for integers in schemas. If int is too small then
the generated code can be hand-edited.
2021-11-03 19:18:07 +01:00
Emery Hemingway ef4278062a Encode short byte-strings as hex text 2021-11-03 19:17:33 +01:00
Emery Hemingway c74f5c2c63 Spry: binary encoding and decoding 2021-11-03 19:17:04 +01:00
Emery Hemingway a8373e37c6 Add Spry VM module
http://sprylang.se/
2021-11-01 10:35:14 +01:00
Emery Hemingway 29d7352a23 Assert upreservable pragma at runtime
This makes the compiler less pedantic.
2021-10-25 21:36:57 +02:00
Emery Hemingway d1be46de49 Equality across different embedded types 2021-10-25 21:36:57 +02:00
Emery Hemingway 0387cbc7eb Update documentation 2021-10-25 21:36:57 +02:00
Emery Hemingway ae5f4b78ac Adjust stringification 2021-10-25 21:36:45 +02:00
Emery Hemingway bc9568d6bd Add unembed routine 2021-10-25 21:36:45 +02:00
Emery Hemingway a03a188bc2 fromPreserve: fix conversion of literals in tuples 2021-10-25 21:36:45 +02:00
Emery Hemingway cbf27a0ee0 schema: fix missing literals in tuples 2021-10-25 21:36:45 +02:00
Emery Hemingway ba45f80087 schema: embedded type required for toPreserve inside `$` 2021-10-25 21:36:45 +02:00
Emery Hemingway cca512c9df mapEmbeds for Preserve[void] to Preserve[E] 2021-10-25 21:36:45 +02:00
Emery Hemingway b6275a241b Schema: do not overload `$` or encode for Preserve types 2021-10-20 13:59:48 +02:00
Emery Hemingway 5250707f0e Schema: make all Preserves embeddable 2021-10-18 12:12:33 +02:00
Emery Hemingway 171502f1d2 Schemas: seperate procs for unembeddables 2021-10-18 12:12:33 +02:00
Emery Hemingway 54c28c90ce Mark a preserves template as used 2021-10-18 12:12:33 +02:00
Emery Hemingway 30a9d55aac Fix schema import, normalize version 2021-10-17 14:22:41 +02:00
Emery Hemingway 99201de724 Schemas: use canonical meta-schema 2021-10-17 13:26:05 +02:00
Emery Hemingway 220577c8a0 New pragmas for toPreserve and fromPreserve 2021-10-17 11:38:45 +02:00
Emery Hemingway 2dd63903f0 Remove records module
Redundant with toPreserve and fromPreserve.
2021-09-25 13:57:58 +02:00
Emery Hemingway 42a9b26458 Embeddable Preserves
Make Preserve a generic type that can embed a native Nim type.
Generate generic implementations from schemas and discard
embeddedType.
2021-09-25 13:47:05 +02:00
Emery Hemingway 75c176ddb6 New constructors for record and sequence 2021-09-23 14:29:31 +02:00
Emery Hemingway cd5dd7dd03 Add [] operator for dictionaries 2021-09-23 14:29:16 +02:00
Emery Hemingway 9f2921d0ca Add is* checks 2021-09-23 13:32:04 +02:00
Emery Hemingway e7af40ce2f Export the variant members 2021-09-23 13:31:10 +02:00
Emery Hemingway 2451b441ad Use dedicated types for record alternates 2021-09-22 14:30:50 +02:00
Emery Hemingway ea50b05bad Some types implicitly handled by toPreserve 2021-09-21 09:38:37 +02:00
Emery Hemingway 6b7a23fecf Compiler compatibility tweaks 2021-09-21 09:30:40 +02:00
Emery Hemingway dae5dd9751 Fix toPreserveHook for Table[A, B]
The toPreserveHook for tables was not compiling, which would fall
back to the behavior for preserving objects, which would not work
for tables.
2021-09-21 08:00:33 +02:00
Emery Hemingway 7edc05a35d Refactor preserves_schema_nim 2021-09-21 08:00:33 +02:00
Emery Hemingway efd5cf62df Optimize allocation of sequences from toPreserve 2021-09-21 08:00:33 +02:00
Emery Hemingway fc53b47ec6 Add megaType procs 2021-09-21 08:00:33 +02:00
Emery Hemingway c407179540 Remove dead code 2021-09-21 08:00:33 +02:00
Emery Hemingway 098f067ffb Quote schema comments 2021-09-21 08:00:33 +02:00
Emery Hemingway efbf9af7ba TableRef 2021-09-21 08:00:33 +02:00
Emery Hemingway a7acd971d2 Fix symbol printing in schemas 2021-09-21 08:00:33 +02:00
Emery Hemingway df53ff0d41 Fix printing of schema symbols 2021-09-21 08:00:33 +02:00
Emery Hemingway 23d34d1468 Emit a discard for empty case…of branch fields 2021-09-21 08:00:33 +02:00
Emery Hemingway 00bb9de55f Less identifier mangling 2021-09-21 08:00:33 +02:00
Emery Hemingway 41675a2daf Generate procs for constants 2021-09-21 08:00:33 +02:00