Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reentrant library #31

Open
wants to merge 47 commits into
base: master
Choose a base branch
from

Conversation

TheCount
Copy link

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