Thomas Pelletier
5c66c78bc5
Remove date regexp ( #447 )
...
* Remove date regexp
Hand-roll the date matching logic to avoid trying to match a regexp on
every integer.
```
benchmark old ns/op new ns/op delta
BenchmarkUnmarshalToml-8 293449 272134 -7.26%
benchmark old allocs new allocs delta
BenchmarkUnmarshalToml-8 2746 2650 -3.50%
benchmark old bytes new bytes delta
BenchmarkUnmarshalToml-8 133604 127548 -4.53%
```
* Remove fuzzit
The company has been acquired by GitLab and shutting down.
2020-10-11 15:31:33 -04:00
Allen
f9ba08244d
Do not allow T-prefix on local dates ( #446 )
...
Fixes #442
2020-10-09 10:55:11 -04:00
Cameron Moore
a7448fe8de
Fix date lexer to only support 4-digit year ( #443 )
...
Fixes #441
2020-09-12 18:04:04 -04:00
Cameron Moore
5c94d86029
Use strings.Builder in lexer ( #438 )
...
Replace all string building operations in the lexer with
strings.Builder. Doing so shows significant performance improvements.
BurntSushi still has a slight edge in CPU performance, but there's still
much work to do on memory performance.
name old time/op new time/op delta
ParseToml-2 311µs ± 0% 273µs ± 3% -12.29% (p=0.008 n=5+5)
UnmarshalToml-2 386µs ± 4% 349µs ± 3% -9.63% (p=0.008 n=5+5)
UnmarshalBurntSushiToml-2 368µs ± 8% 341µs ± 2% ~ (p=0.056 n=5+5)
name old alloc/op new alloc/op delta
ParseToml-2 132kB ± 0% 118kB ± 0% -11.07% (p=0.008 n=5+5)
UnmarshalToml-2 147kB ± 0% 133kB ± 0% -9.92% (p=0.008 n=5+5)
UnmarshalBurntSushiToml-2 82.6kB ± 0% 82.6kB ± 0% ~ (p=1.000 n=5+5)
name old allocs/op new allocs/op delta
ParseToml-2 3.19k ± 0% 1.91k ± 0% -40.19% (p=0.008 n=5+5)
UnmarshalToml-2 4.03k ± 0% 2.75k ± 0% -31.83% (p=0.008 n=5+5)
UnmarshalBurntSushiToml-2 1.73k ± 0% 1.73k ± 0% ~ (all equal)
Out of curiosity, I benchmarked the results of updating each function
along the way to see how each change effected the overall performance:
name \ time/op master lexKey lexLitStringAsString lexStringAsString
ParseToml-2 311µs ± 0% 299µs ± 1% 290µs ± 3% 273µs ± 3%
UnmarshalToml-2 386µs ± 4% 381µs ± 2% 364µs ± 2% 349µs ± 3%
UnmarshalBurntSushiToml-2 368µs ± 8% 341µs ± 2% 345µs ± 5% 341µs ± 2%
name \ alloc/op master lexKey lexLitStringAsString lexStringAsString
ParseToml-2 132kB ± 0% 132kB ± 0% 125kB ± 0% 118kB ± 0%
UnmarshalToml-2 147kB ± 0% 146kB ± 0% 140kB ± 0% 133kB ± 0%
UnmarshalBurntSushiToml-2 82.6kB ± 0% 82.6kB ± 0% 82.6kB ± 0% 82.6kB ± 0%
name \ allocs/op master lexKey lexLitStringAsString lexStringAsString
ParseToml-2 3.19k ± 0% 2.86k ± 0% 2.49k ± 0% 1.91k ± 0%
UnmarshalToml-2 4.03k ± 0% 3.70k ± 0% 3.33k ± 0% 2.75k ± 0%
UnmarshalBurntSushiToml-2 1.73k ± 0% 1.73k ± 0% 1.73k ± 0% 1.73k ± 0%
Benchmarks were run from the benchmark/ directory using:
go test -bench=.*Toml -benchmem -count=5 ./...
2020-09-12 12:01:32 -04:00
x-hgg-x
9ba7363552
Allow spaces when using dotted keys in assignment ( #402 )
...
Fixes #401
2020-05-07 08:11:29 -04:00
x-hgg-x
f1ba6388fb
Fix inline table loading errors ( #381 )
...
Fixes #379 #380
2020-05-04 13:13:55 -04:00
Allen
e9e8265313
Add support for tab in basic string value and quoted key ( #364 )
2020-04-24 21:41:25 -04:00
Allen
e872682c78
Fix unmarshal error with tab in multi-line basic string ( #355 )
...
Fixes #354
2020-04-15 08:46:56 -04:00
Allen
3503483c73
Fix unexpected token type in inline table ( #334 )
...
Fixes #321
2020-03-10 13:39:48 -04:00
Thomas Pelletier
8a362ad712
Short-date support ( #298 )
2019-10-25 13:21:44 -04:00
Jonathan Lloyd
bef0f57967
Fix key parsing in line tables ( #311 )
...
A bug was reported that indicated that inline tables did not fully support bare keys:
$ echo 'foo = { -bar => "buz"}' | ./tomljson
(1, 9): unexpected token type in inline table: Error
$ echo 'foo = { "whatever" = "buz"}' | ./tomljson
(1, 10): unexpected token type in inline table: String
echo 'foo = { _no = "buz"}' | ./tomljson
(1, 9): unexpected token type in inline table: Error
This change makes a couple of tweaks to to allow for all key variants in inline tables
Fixes : #282
2019-10-20 20:36:14 -04:00
Marcin Białoń
095a905e04
Allow space to separate date and time ( #300 )
...
Fixes #231
2019-09-19 10:45:53 -07:00
Thomas Pelletier
e1803f96f6
Support dotted-keys ( #260 )
...
Implement dotted keys as sequence of bare and quoted keys. Introduced in
TOML 0.5.0.
Fixes #230
2019-03-04 22:35:03 -08:00
Jelte Fennema
778c285afa
Add support for special float values (inf and nan) ( #210 )
2018-01-18 14:10:55 -08:00
Kazuyoshi Kato
4874e8477b
Fix parsing of single quoted keys ( #201 )
...
Patch #193 doesn't work correctly because that must be handled by the
lexer, and `parseKey()` must not handle escape sequences.
Ref #61
2018-01-18 13:52:12 -08:00
Thomas Pelletier
861c4734ac
Support for hex, oct, and bin integers ( #205 )
...
Add support for non-decimal integers. At the time of writing, this is an
unreleased backward-compatible feature of TOML:
```
Non-negative integer values may also be expressed in hexadecimal, octal, or
binary. In these formats, leading zeros are allowed (after the prefix). Hex
values are case insensitive. Underscores are allowed between digits (but
not between the prefix and the value).
# hexadecimal with prefix `0x`
hex1 = 0xDEADBEEF
hex2 = 0xdeadbeef
hex3 = 0xdead_beef
# octal with prefix `0o`
oct1 = 0o01234567
oct2 = 0o755 # useful for Unix file permissions
# binary with prefix `0b`
bin1 = 0b11010110
```
Fixes #204
2017-12-22 12:24:26 +01:00
Thomas Pelletier
69d355db53
Lex performance improvement ( #176 )
...
* Use []token instead of chan token
name old time/op new time/op delta
ParseToml-8 1.18ms ± 0% 0.91ms ± 0% -22.98%
UnmarshalToml-8 1.29ms ± 0% 0.95ms ± 0% -25.96%
name old alloc/op new alloc/op delta
ParseToml-8 429kB ± 0% 444kB ± 0% +3.49%
UnmarshalToml-8 451kB ± 0% 466kB ± 0% +3.32%
name old allocs/op new allocs/op delta
ParseToml-8 14.1k ± 0% 13.7k ± 0% -2.31%
UnmarshalToml-8 15.1k ± 0% 14.7k ± 0% -2.16%
* Lex on []byte instead of io.Reader
name old time/op new time/op delta
ParseToml-8 1.18ms ± 0% 0.29ms ± 0% -75.18%
UnmarshalToml-8 1.27ms ± 0% 0.38ms ± 0% -70.38%
name old alloc/op new alloc/op delta
ParseToml-8 429kB ± 0% 135kB ± 0% -68.53%
UnmarshalToml-8 451kB ± 0% 157kB ± 0% -65.22%
name old allocs/op new allocs/op delta
ParseToml-8 14.1k ± 0% 3.2k ± 0% -77.20%
UnmarshalToml-8 15.1k ± 0% 4.2k ± 0% -72.00%
2017-06-27 18:26:37 -07:00
Albert Nigmatzianov
26ae43fdee
Use bytes.Buffer for tomlLexer.buffer ( #166 )
...
* Use bytes.Buffer for tomlLexer.buffer
* Add BenchmarkLexer
Fix #165
name old time/op new time/op delta
Lexer-4 343µs ± 1% 331µs ± 1% -3.56% (p=0.000 n=20+19)
name old alloc/op new alloc/op delta
Lexer-4 55.8kB ± 0% 50.8kB ± 0% -8.86% (p=0.000 n=20+20)
name old allocs/op new allocs/op delta
Lexer-4 2.01k ± 0% 1.84k ± 0% -8.46% (p=0.000 n=20+20)
2017-05-30 10:27:36 -07:00
Thomas Pelletier
d0ec4317d3
Fix compatibility with latest go-buffruneio ( #131 )
2017-02-27 14:18:12 -08:00
Thomas Pelletier
439fbba1f8
Make lexComment jump back to the previous state ( #122 )
...
When a comment appears in an rvalue, the lexer needs to jump back to
lexRValue, not to lexVoid.
Fixes #120 .
2016-12-29 19:51:04 +01:00
Thomas Pelletier
ce7be745f0
Rename group to table ( #115 )
...
* Rename Group to Table Fixes #45
* Change fmt.Errorf to errors.new for simple strings
2016-12-03 12:32:16 +01:00
Cameron Moore
d05a14897c
Fix typo in comment ( #94 )
2016-08-23 09:46:25 +02:00
Thomas Pelletier
64ff1ea4d5
Don't hang when reading an invalid rvalue ( #77 )
...
Fixes #76
2016-06-30 16:21:25 +02:00
Thomas Pelletier
1a8565204c
Fix multiline strings ( #62 )
2016-04-21 17:47:41 +02:00
Cameron Moore
92c565e02b
Use literal string for regexp pattern
2016-04-18 17:14:18 -05:00
Cameron Moore
6e26017b00
Clean up lint ( #56 )
...
The only real change in this commit is that MaxInt is made private.
Everything else should be gofmt'ing, docs and cleanup of lint.
2016-04-18 16:58:23 +02:00
Thomas Pelletier
2df083520a
Fix support for CRLF line ending
2016-02-19 14:12:13 +01:00
Thomas Pelletier
f963bc320f
Generic input
...
Fixes #47
2016-01-31 16:54:40 +01:00
Thomas Pelletier
6d743bb19f
Improve error checking on number parsing
2015-12-01 14:38:33 +01:00
Thomas Pelletier
dd4c4ffc2b
Implement inline tables
2015-09-09 16:56:18 +01:00
Thomas Pelletier
f58048cec0
Merge pull request #39 from pelletier/pelletier/integers_underscores
...
Accept underscores in integers
2015-07-17 16:54:19 -07:00
Thomas Pelletier
8e75093380
Accept underscores in integers
2015-07-16 22:07:16 -07:00
Thomas Pelletier
cf5ad6a245
Fixes #27 : Reject full 00 - 1F unicode range
2015-07-16 21:54:10 -07:00
Thomas Pelletier
41a8959f14
Reject new lines in keys
2015-07-14 20:07:43 -07:00
Thomas Pelletier
16a681db2a
Allow numbers in keys parsing
2015-07-14 19:56:28 -07:00
Thomas Pelletier
222e90a7d3
Parse long unicode
2015-05-21 18:52:26 -07:00
eanderton
1f3d0e03c3
Changes to support #29 - Support multi-line literal strings
...
* Added error output to test_program.go
* Added multi-line literal string support to lexer
* Added multi-line string supprt to lexer
* Added unit-test for new string support
* Modified test.sh to take an optional parameter to run an individual BurntSushi test suite.
* Fixed formatting
2015-02-26 18:03:30 -05:00
Thomas Pelletier
a56707c85f
Fixes #28 : Support of literal strings
2014-12-06 15:23:37 +01:00
Thomas Pelletier
4b47f52cb0
Fixes #31 : Use RFC 3339 for datetimes
2014-12-06 15:00:24 +01:00
Thomas Pelletier
2f2f28631b
Fixes #32 : Ensure keys are correctly parsed
2014-12-06 14:16:42 +01:00
Thomas Pelletier
543444f747
Fixes #30 : Implement exp notation in floats
2014-12-06 13:56:27 +01:00
eanderton
081f3db916
Final Toml-Path Solution
...
* Refactored type names and file names to mesh with existing TOML library more closely
* Added QueryResult structure that provides values and position data
* Added Query() method to TomlTree type
* Tests, tests, and more tests
* Fixed bug where positions returned from some tables were invalid
* Added test case for bug patch
The bugfix was an interesting case. Position information wasn't being
set in cases where createPath was called. So table names like [foo.bar]
would result in table 'foo' having no position.
2014-09-12 22:32:15 -04:00
Thomas Pelletier
fb5423fba2
Fixes #22 : Fixes style issues
2014-08-29 18:24:51 +02:00
eanderton
7c63fff960
Added Position Support to TomlTree
...
TomlDocument provides an optional TOML processing path where position
informaiton is stored alongside a TomlTree.
* Added Position struct
* Revised TomlTree to contain position data
* Added tomlValue to bind positions to values
* Revised parser to emit position data
* Revised token to use new Position struct
* Added tests for new functionality
* Bugfixed table array duplicate key handling
* Applied gofmt to all code
2014-08-26 21:00:41 -04:00
Thomas Pelletier
65684e6bb0
Fixes #20 : Creation of subgroup in table arrays
2014-08-14 10:12:39 +02:00
Thomas Pelletier
bf549a2194
Run gofmt
2014-08-07 12:52:42 +02:00
eanderton
7d9a3c25bd
Revised error reporting
2014-08-06 07:34:01 -04:00
eanderton
dd04a2f3cd
Added line/col support to lexer
2014-08-06 07:13:15 -04:00
eanderton
5dd3b53635
Fixed formatting
2014-07-08 22:02:42 -04:00
eanderton
262211488d
Fixed path handling and key group array name lexing for test compliance
2014-07-08 22:00:46 -04:00