petrbalvin
9874464213
perf(decode): resolve interfaces through cached type flags
...
The decoder asked every value whether it implements Unmarshaler or encoding.TextUnmarshaler by boxing it into an interface and asserting, which allocated on every scalar field. A per-type flag cache answers first and an interface value is built only where the assertion can succeed; interface destinations are still asked dynamically. A monomorphic hint in front of the cache keeps the hot walk off the sync.Map probe, and it re-points at published cache entries so a miss allocates nothing.
Representative document: 233 to 167 allocations; long document typed decode: 107 674 to 63 772 allocations, about 6.1 to about 3.8 ms.
2026-09-20 22:15:23 +02:00
petrbalvin
d00cbb983a
perf(parse): cut allocations and validate UTF-8 in the scan
...
Per-statement work no longer allocates where it does not need to: parseKeyPath returns the first key component directly, absolute paths and key buffers sit on the parser, the definition maps are created on first write, arrays presize, and a string without escapes is copied out in one piece instead of built byte by byte. Repeated keys share one string across array-of-tables elements through a parser-local intern table whose lookup works on the bytes, so a repeated key costs no allocation.
UTF-8 validity is no longer a whole-input pass before the parser runs: the scan validates where it meets a multi-byte sequence, and a SyntaxError now names the line the invalid byte sits on. TestParseRejectsInvalidUTF8 covers nine positions; docs/API.md describes the new reporting.
Long document: 67 664 to 31 765 allocations per parse, about 51 to about 106 MB/s; representative document: 157 to 104 allocations.
2026-09-20 22:15:10 +02:00
petrbalvin
72f8b21ac4
feat: parse into a Document that keeps order and comments
...
Test / test (push) Successful in 1m34s
Assisted-by: DeepSeek V4.1 Flash
2026-09-20 10:40:57 +02:00
petrbalvin
a6e3e3fe31
feat: add OffsetDateTime, nesting limits and uniform Marshaler dispatch
...
Test / test (push) Successful in 2m18s
Assisted-by: DeepSeek V4.1 Flash
2026-09-19 19:36:24 +02:00
petrbalvin
959eaba4b0
feat(encode): add the InlineTables option
...
Assisted-by: DeepSeek V4.1 Flash
2026-09-19 12:18:30 +02:00
petrbalvin
8f85bb68fa
feat(encode): write the TOML 1.1 output form
...
Assisted-by: DeepSeek V4.1 Flash
2026-09-19 12:18:18 +02:00
petrbalvin
bccaf087c8
feat(cmd): add the encoder mode to the toml-test adapter
...
Test / test (push) Successful in 1m33s
Assisted-by: DeepSeek V4.1 Flash
2026-09-19 11:38:19 +02:00
petrbalvin
815141440e
feat: honour TextMarshaler and TextUnmarshaler by default
...
Test / test (push) Successful in 1m35s
Assisted-by: DeepSeek V4.1 Flash
2026-09-19 02:41:09 +02:00
petrbalvin
9023784da3
fix(decode): decode into a defined string or bool type
...
Assisted-by: DeepSeek V4.1 Flash
2026-09-19 02:40:51 +02:00
petrbalvin
8f0eae6604
docs: drop the TOML 1.0 compatibility promise
...
Assisted-by: DeepSeek V4.1 Flash
2026-09-19 02:24:24 +02:00
petrbalvin
1c7329aeea
build: move the module path to /v2
...
Test / test (push) Successful in 1m32s
Assisted-by: GLM 5.3 Flash
2026-09-19 00:14:39 +02:00
petrbalvin
ad6c32d0c6
chore: prepare release v1.1.0
...
Test / test (push) Successful in 1m32s
Release / gates (push) Successful in 1m21s
Release / release (push) Successful in 52s
Assisted-by: GLM 5.3 Flash
2026-09-18 01:10:08 +02:00
petrbalvin
dfd5d240d2
docs(changelog): drop the stale toml-test run mode
...
Assisted-by: GLM 5.3 Flash
2026-09-18 00:20:31 +02:00
petrbalvin
d365729b37
style(changelog): order the development fixed entries by component
...
Test / test (push) Successful in 1m34s
Assisted-by: GLM 5.3
2026-09-17 23:12:24 +02:00
petrbalvin
53102d70e6
perf(number): skip the rebuild for tokens without underscores
...
Assisted-by: GLM 5.3
2026-09-17 23:12:00 +02:00
petrbalvin
f1a757ec5c
perf(parser): scan the input as bytes instead of runes
...
Assisted-by: GLM 5.3
2026-09-17 23:11:50 +02:00
petrbalvin
3c8ac859c0
fix(decode): report the smallest unknown field deterministically
...
Assisted-by: GLM 5.3
2026-09-17 23:11:38 +02:00
petrbalvin
4def1b3e8b
fix(encode): reject a nil MarshalTOML result
...
Assisted-by: GLM 5.3
2026-09-17 23:11:10 +02:00
petrbalvin
d5327568fb
fix(encode): keep a []any of tables in the value-array form
...
Assisted-by: GLM 5.3
2026-09-17 23:10:35 +02:00
petrbalvin
c485aab227
fix(decode): overflow-check uint and float32 destinations
...
Assisted-by: GLM 5.3
2026-09-17 23:10:24 +02:00
petrbalvin
30b28fe7fc
fix(encode): emit one key when two fields resolve to one name
...
Assisted-by: GLM 5.3
2026-09-17 23:08:42 +02:00
petrbalvin
aaea68efc9
perf(decode): cache struct schemas per type
...
Assisted-by: GLM 5.3
2026-09-17 23:08:14 +02:00
petrbalvin
a8d69d90d5
fix(decode): terminate the schema walk on a self-embedded pointer struct
...
Assisted-by: GLM 5.3
2026-09-17 23:07:53 +02:00
petrbalvin
bb238c98c3
fix(decode): let the later field win an equal-depth name clash
...
Assisted-by: GLM 5.3
2026-09-17 23:07:27 +02:00
petrbalvin
54c6032a9a
fix(encode): propagate invalid UTF-8 key errors from headers and inline tables
...
Assisted-by: GLM 5.3
2026-09-17 23:06:59 +02:00
petrbalvin
ec0d7a0023
fix(encode): fall back from the literal multiline form when unsafe
...
Assisted-by: GLM 5.3
2026-09-17 23:06:25 +02:00
petrbalvin
830f840f44
fix(parser): reset dotted-key and array records per array-of-tables element
...
Assisted-by: GLM 5.3
2026-09-17 23:05:06 +02:00
petrbalvin
696f117c22
fix(parser): reject an array-of-tables header extending a frozen inline table
...
Assisted-by: GLM 5.3
2026-09-17 23:04:49 +02:00
petrbalvin
d2fc31d260
feat: support TOML 1.1
...
Test / test (push) Successful in 1m32s
Assisted-by: GLM 5.3 Flash
2026-09-17 22:06:26 +02:00
petrbalvin
18f1cd51e9
build: upgrade the compliance suite to toml-test v2.2.0
...
Test / test (push) Successful in 1m42s
Assisted-by: GLM 5.3 Flash
2026-09-17 21:30:41 +02:00
petrbalvin
5a270d0879
feat: add the -validate mode to interpres-decode
...
Assisted-by: GLM 5.3 Flash
2026-09-17 21:23:29 +02:00
petrbalvin
3f41266710
feat: typed decode and encode errors with the key path
...
Assisted-by: GLM 5.3 Flash
2026-09-17 21:20:47 +02:00
petrbalvin
fc50e3c49a
fix: decode untagged embedded structs and maps inline
...
Test / test (push) Successful in 1m26s
Assisted-by: GLM 5.3 Flash
2026-09-17 20:05:50 +02:00
petrbalvin
93c36cf376
feat: honour the omitzero and omitempty tag options on encode
...
Assisted-by: GLM 5.3 Flash
2026-09-17 19:57:23 +02:00
petrbalvin
3ac0b1e301
fix: encode mixed arrays with inline table elements
...
Assisted-by: GLM 5.3 Flash
2026-09-17 19:49:50 +02:00
petrbalvin
744c0eb58f
chore: prepare release v1.0.0
...
Test / test (push) Successful in 1m27s
Release / gates (push) Successful in 1m19s
Release / release (push) Successful in 44s
Assisted-by: GLM 5.3 Flash
2026-08-20 08:30:00 +02:00
petrbalvin
d12da6181d
docs: document set and changelog
...
Assisted-by: GLM 5.3 Flash
2026-08-19 18:44:00 +02:00