Skip to content

Reentrant library#31

Open
TheCount wants to merge 47 commits into
vnmakarov:masterfrom
TheCount:feature-reentrant-core
Open

Reentrant library#31
TheCount wants to merge 47 commits into
vnmakarov:masterfrom
TheCount:feature-reentrant-core

Conversation

@TheCount

Copy link
Copy Markdown

This PR should make the YAEP library mostly reentrant without changing the public API. I haven't fixed the following three things:

  • Some of the callbacks the user is supposed to provide cannot be passed a user-provided pointer: syntax_error, parse_alloc, and parse_free. The other callbacks can receive such a pointer somewhat awkwardly, via struct _yaep_reentrant_hack. Changing this would require changing the public API.
  • The function read_rule has static local variables. But this function is only used for tests, so it should be OK.
  • The globals all_searches and all_collisions remain. In single-threaded usage, they'll work as intended. In multi-threaded usage, concurrent access is technically undefined behavior, though practically, the worst that can happen is that their value is trashed. Since these variables are used for debugging purposes only, they should not affect the behavior of the library per se.

This PR supersedes #21.

TheCount added 30 commits March 1, 2022 22:04
hashtab.cpp: do not use yaep_free() on memory obtained with operator
new().
As a test, eliminate the static global variable anode_cost.

Required for vnmakarov#12.
Eliminate all global variables not needed in sread_terminal() or
sread_rule().

Required for vnmakarov#12.
Eliminate remaining global variables used by sread_terminal() and
sread_rule() by passing parser data via reentrancy hack.

Required for vnmakarov#12.
Make sgramm.y compatible with older bison versions.
Hide debug variables n_parse_term_nodes, n_parse_abstract_nodes, and
n_parse_alt_nodes when NO_YAEP_DEBUG_PRINT is defined.
Avoids warnings in C and errors in C++.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant