Max Brunsfeld
36c2b685b9
Always invalidate old chunk of text when parsing after an edit
2017-10-04 15:09:46 -07:00
Max Brunsfeld
9f24118b17
Include trees' dynamic precedence in debug graphs
2017-10-04 10:41:20 -07:00
Max Brunsfeld
b0fdc33f73
Remove 'extra' and 'structural' booleans from symbol metadata
2017-09-14 12:07:46 -07:00
Max Brunsfeld
91456d7a17
Avoid duplicate error state entries for tokens that are both internal & external
2017-09-14 10:54:13 -07:00
Max Brunsfeld
2721f72c41
Represent MAX_COST_DIFFERENCE as unsigned
2017-09-13 16:49:18 -07:00
Max Brunsfeld
c1cf8e02a7
Merge pull request #101 from tree-sitter/merge-more-lex-states
...
Reduce the number of states in the generated lexer function
2017-09-13 16:46:58 -07:00
Max Brunsfeld
d291af9a31
Refactor error comparisons
...
* Deal with mergeability outside of error comparison function
* Make `better_version_exists` function pure (don't halt other versions
as a side effect).
* Tweak error comparison logic
Signed-off-by: Rick Winfrey <rewinfrey@github.com>
2017-09-13 16:38:15 -07:00
Max Brunsfeld
71595ffde6
Only allow one stack link with a given type containing errors
2017-09-13 10:05:31 -07:00
Max Brunsfeld
07fb3ab0e6
Abort recoveries before popping if better versions already exist
2017-09-13 09:56:51 -07:00
Max Brunsfeld
47669e6015
Avoid halting the only non-halted entry in recover
2017-09-12 16:20:06 -07:00
Max Brunsfeld
ee2906ac2e
Don't merge stack versions that are halted
2017-09-12 16:19:28 -07:00
Max Brunsfeld
819235bac3
Limit the number of stack nodes that are included in a summary
2017-09-12 12:00:00 -07:00
Max Brunsfeld
99d048e016
Simplify error recovery; eliminate recovery states
...
The previous approach to error recovery relied on special error-recovery
states in the parse table. For each token T, there was an error recovery
state in which the parser looked for *any* token that could follow T.
Unfortunately, sometimes the set of tokens that could follow T contained
conflicts. For example, in JS, the token '}' can be followed by the
open-ended 'template_chars' token, but also by ordinary tokens like
'identifier'. So with the old algorithm, when recovering from an
unexpected '}' token, the lexer had no way to distinguish identifiers
from template_chars.
This commit drops the error recovery states. Instead, when we encounter
an unexpected token T, we recover from the error by finding a previous
state S in the stack in which T would be valid, popping all of the nodes
after S, and wrapping them in an error.
This way, the lexer is always invoked in a normal parse state, in which
it is looking for a non-conflicting set of tokens. Eliminating the error
recovery states also shrinks the lex state machine significantly.
Signed-off-by: Rick Winfrey <rewinfrey@github.com>
2017-09-11 15:22:52 -07:00
Max Brunsfeld
4c9c05806a
Merge compatible starting token states before constructing lex table
2017-09-05 13:21:53 -07:00
Max Brunsfeld
ac9d260734
Clean up parser fields
2017-08-31 12:50:10 -07:00
Max Brunsfeld
4a0587061e
Consolidate logic for deciding on a lookahead node
2017-08-31 12:19:37 -07:00
Max Brunsfeld
41074cbf2d
🎨
2017-08-30 16:48:15 -07:00
Max Brunsfeld
fdc6ee445b
Remove parser__push helper function
2017-08-30 16:41:07 -07:00
Max Brunsfeld
1b1276bdbf
Simplify parser__condense_stack function
2017-08-30 16:36:02 -07:00
Max Brunsfeld
96a630e5df
Clean up check for leaf node reusability
2017-08-30 16:19:51 -07:00
Max Brunsfeld
8bdab7335e
Remove unnecessary reusability check after breaking down lookahead
2017-08-30 16:19:11 -07:00
Max Brunsfeld
bef536a7d0
Discard fragile reusable nodes earlier
2017-08-30 16:17:10 -07:00
Max Brunsfeld
5cbd50c7d7
Remember how far ahead the lexer looked on failed calls
...
This needs to be included in the 'bytes_scanned' property of the token
that is ultimately produced.
2017-08-29 15:04:22 -07:00
Max Brunsfeld
f3977ec213
Always call deserialize on external scanner before scanning
...
Remembering the last token that the external scanner produced is
not worth the complexity.
2017-08-29 14:41:55 -07:00
Max Brunsfeld
4d63e26e9e
Clean up logic for falling back to error mode after lexing fails
2017-08-25 16:57:09 -07:00
Max Brunsfeld
86d5737fc2
Escape quotes when printing symbols to dot graphs
2017-08-25 16:26:40 -07:00
Max Brunsfeld
9d649f3382
Remove depth-based error-recovery pruning criteria
...
This code was causing ambiguities to get resolved differently depending on
whether there was an unrelated error on the stack or not.
2017-08-09 09:53:41 -07:00
Max Brunsfeld
3d351eac09
Fix some C code that MSVC doesn't like
2017-08-08 10:47:59 -07:00
Max Brunsfeld
12623deb19
Avoid struct literal syntax in point functions
2017-08-08 10:42:21 -07:00
Max Brunsfeld
a2670a39dc
Avoid empty initializer list in global constant
2017-08-07 14:46:23 -07:00
Max Brunsfeld
89e250cd63
Avoid the name 'min' for a helper function
...
Windows automatically defines min or something.
2017-08-07 12:44:33 -07:00
Max Brunsfeld
f0e63adc84
Use __forceinline keyword instead of always_inline attribute on windows
2017-08-07 12:44:33 -07:00
Max Brunsfeld
b98669c7e6
Replace general array_reverse with ts_tree_array_reverse
2017-08-07 12:44:33 -07:00
Max Brunsfeld
f7bf460c87
Fix scan-build errors in get_changed_ranges
2017-08-07 10:35:06 -07:00
Max Brunsfeld
ed11ddbd38
Explicitly compare regions between subtrees in get_changed_ranges
2017-08-06 17:16:29 -07:00
Max Brunsfeld
f5aa633011
Reorder iterator methods in get_changed_ranges.c
2017-08-05 20:33:38 -07:00
Max Brunsfeld
94dc703bfc
Require that grammars' start rules be visible
2017-08-04 17:07:37 -07:00
Max Brunsfeld
1dca3a0b58
Simplify parse version reordering
2017-08-04 14:51:14 -07:00
Max Brunsfeld
85be0e7e75
Ensure that no backtracking occurs during tree-comparison
2017-08-04 14:50:50 -07:00
Max Brunsfeld
9260d8163c
Refactor and fix bugs in tree comparison algorithm
2017-08-04 14:03:41 -07:00
Max Brunsfeld
46ec0804f8
Move tree comparison function to a separate translation unit
2017-08-04 11:03:14 -07:00
Max Brunsfeld
09f4796f6b
Get tests passing w/ new alias API
2017-08-01 14:35:34 -07:00
Max Brunsfeld
cb5fe80348
Rename RENAME rule to ALIAS, allow it to create anonymous nodes
2017-07-31 16:41:11 -07:00
Max Brunsfeld
2437287e3e
Remove rename symbol when reusing a previously-renamed tree
2017-07-21 16:24:33 -07:00
Max Brunsfeld
cf445da253
Allow renaming hidden rules
2017-07-21 15:58:01 -07:00
Max Brunsfeld
1df41a9107
Avoid anonymous struct to silence gcc's override-init warning (again)
2017-07-21 10:17:54 -07:00
Max Brunsfeld
f33421c53e
Fix incorrect node renames in the presence of extra tokens
2017-07-18 21:24:34 -07:00
Max Brunsfeld
10d28d4b56
Merge pull request #92 from tree-sitter/utf16-oob
...
Add test for UTF16 out-of-bound read
2017-07-18 17:24:31 -07:00
Max Brunsfeld
afb499bf2e
Handle rename symbols in ts_language APIs
2017-07-18 12:01:52 -07:00
Max Brunsfeld
9a04231ab1
Remove length restriction in external scanner serialization API
2017-07-17 17:12:36 -07:00