Commit graph

203 commits

Author SHA1 Message Date
Ethiraric
e4ae1d0546 Update to v0.6. 2024-03-15 20:14:26 +01:00
Ethiraric
765f2bb672 Replace VecDeque with ArrayDeque.
This removes all allocations in the `Scanner` code. The downside is that
the buffer is now stored in the `Scanner` structure, making it 48 bytes
larger. This however makes the code much more performant.
2024-02-13 23:10:32 +01:00
Ethiraric
8a80e547c6 Fix some clippy lints. 2024-02-13 23:10:17 +01:00
Ethiraric
671a498bf4 Minor improvements. 2024-01-31 22:02:53 +01:00
Ethiraric
99fb05c937 Improve scan_plain_scalar readability.
Take whitespace checking out of the innermost loop for performance.
2024-01-25 03:06:18 +01:00
Ethiraric
f535e505a7 Avoid a trip to self.buffer.
`self.buffer` is a `VecDeque<char>`, meaning that characters are stored
on 4B. When reading as we used to do, this means that every 1 byte
character we read was turned into 4 bytes, which was turned into 1 byte
in `String::extend`.

Instead of going through `self.buffer`, use a local `String` to store
the characters before pushing them to `string`.
2024-01-24 23:02:02 +01:00
Ethiraric
cfbf287b3d Buffer block scalar lines.
Instead of doing a loop that goes:
  * fetch from input stream
  * push char into string

Make a loop that fetches characters while they're not a breakz and
_then_ extend the string. This avoids a bunch of reallocations.
2024-01-24 21:45:18 +01:00
Ethiraric
26ef839cd3 Split skip into more specific variants.
This function is a hotpath and sometimes removing the conditional jump
to detect line breaks saves a bunch of instructions.
2024-01-24 20:20:52 +01:00
Ethiraric
6babe8de60 Doing this leads to worse performance. 2024-01-24 19:42:18 +01:00
Ethiraric
aaa9288842 Pre-load chars in skip_block_scalar_indent. 2024-01-24 19:31:45 +01:00
Ethiraric
2cebf0af1d Help the compiler inline read_break. 2024-01-24 17:14:52 +01:00
Ethiraric
5789169ceb Remove debug prints code from release builds.
If building release mode, remove debug code. Now, the `debug_print!`
macro resolves to nothing in release build.

In debug build, don't check the environment for each print. This has a
huge overhead. The environment is only checked once and next checks are
made against a simple boolean value.
2024-01-24 02:22:02 +01:00
Ethiraric
b4f66c457a Move char is_xxx fn to their own file. 2024-01-24 01:02:20 +01:00
Ethiraric
eed3433841 Update licence, readme, doc. 2024-02-08 07:12:14 +01:00
Ethiraric
68c7afcb4c Fix null nodes with tags in flow constructs. 2024-01-23 00:19:04 +01:00
Ethiraric
7f7919748a Fix tag scanning. 2024-01-23 00:19:04 +01:00
Ethiraric
76b3773ffd Fix indent in block scalars. 2024-01-23 00:19:04 +01:00
Ethiraric
9f4b1480df Fix dquote indentation. 2024-01-23 00:19:04 +01:00
Ethiraric
2e94a4217b Fix dquote string escape sequences. 2024-01-23 00:19:04 +01:00
Ethiraric
7145ee8282 Fix tests related to anchor/alias indentation.
I have no idea what I'm doing.
2024-01-23 00:19:04 +01:00
Ethiraric
9281e35bbb Fix flow adjacent value with complex key. 2024-01-23 00:19:04 +01:00
Ethiraric
5dbd6f9a55 Fix use of dashes in flow contexts. 2024-01-23 00:19:04 +01:00
Ethiraric
628549085c Fix block scalar / eof interactions. 2024-01-23 00:19:04 +01:00
Ethiraric
c0caeb84e9 Fix block scalars and document end interaction. 2024-01-23 00:19:04 +01:00
Ethiraric
ff28b55d22 Fix duplicate version directive. 2024-01-23 00:19:04 +01:00
Ethiraric
7b744d092e Fixes towards implicit document end. 2024-01-23 00:19:04 +01:00
Ethiraric
f27a7c25a8 Fixes towards spaces before comments. 2024-01-23 00:19:04 +01:00
Ethiraric
0b58be1458 Fix possible misindent in block scalar. 2024-01-23 00:19:04 +01:00
Ethiraric
0a1aebaf3c Fix towards multiple documents in a single stream. 2024-01-23 00:19:04 +01:00
Ethiraric
1606523193 Fix towards invalid trailing characters. 2024-01-23 00:19:04 +01:00
Ethiraric
4118cfab7c Split fetch_flow_scalar. 2024-01-23 00:19:04 +01:00
Ethiraric
f0ae6473aa Fix towards flow mapping and colons. 2024-01-23 00:19:04 +01:00
Ethiraric
4c1376a2b0 Finally grasped how SimpleKey works.
This is a huge commit that cannot easily be broken down as it contains
fixes for the next ignored test in the suite which, one fixed, broke
tests that used to pass and were only then fixed.

There is also a substantial amount of comments that were added,
especially around `SimpleKey`. Minor improvements around the code were
added and I did not bother making a separate commit for them.

Overall, that commit fixes 7 tests from the matrix that were related to
the handling of simple keys.
2024-01-23 00:19:04 +01:00
Ethiraric
79046225e7 Minor improvement to debug prints. 2024-01-23 00:19:04 +01:00
Ethiraric
e9bcc8a28b Fix anchor names' character set. 2024-01-23 00:19:04 +01:00
Ethiraric
6308bbe98f Fix empty documents tests. 2024-01-23 00:19:04 +01:00
Ethiraric
e7f29450ca Fix empty keys in implicit mappings. 2024-01-23 00:19:04 +01:00
Ethiraric
7006620027 Add comments to TokenType and Scanner. 2024-01-23 00:19:04 +01:00
Ethiraric
be6a05916f Add debugging helpers. 2024-01-23 00:19:04 +01:00
Ethiraric
2e5605ddc2 More fixes towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
6e8af26435 More fixes towards invalid tabs? 2024-01-23 00:19:04 +01:00
Ethiraric
06b03f5cf5 More fixes towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
5437f5d9cb More fixes towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
49bfa590a6 More fixes towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
125c0a411a Fix towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
458d22ef80 Fix indent when - & entry have \n in-between. 2024-01-23 00:19:04 +01:00
Ethiraric
a80091795b More fixes towards invalid tabs. 2024-01-23 00:19:04 +01:00
Ethiraric
88833f8a06 Fix DK95-00, I guess. 2024-01-23 00:19:04 +01:00
Ethiraric
e683932e7a Rework block scalar indent skipping. 2024-01-23 00:19:04 +01:00
Ethiraric
abac504295 Minor improvements. 2024-01-23 00:19:04 +01:00