aboutsummaryrefslogtreecommitdiff
path: root/plugins/syntax/r_syntax_plugin.mlpack
diff options
context:
space:
mode:
authorJason Gross2018-07-14 06:25:22 -0400
committerJason Gross2018-08-31 20:05:54 -0400
commitfa0f378c91286d9127777a06b1dc557f695c22ae (patch)
tree6271d2def35136c4ba285bf62679c595ff9faac1 /plugins/syntax/r_syntax_plugin.mlpack
parentd4bfa3df0910ff3e69d4b162d2f8d68775ec69aa (diff)
Fix numeral notation for a rebase on top of master
Some of this code is cargo-culted or kludged to work. As I understand it, the situation is as follows: There are two sorts of use-cases that need to be supported: 1. A plugin registers an OCaml function as a numeral interpreter. In this case, the function registration must be synchronized with the document state, but the functions should not be marshelled / stored in the .vo. 2. A vernacular registers a Gallina function as a numeral interpreter. In this case, the registration must be synchronized, and the function should be marshelled / stored in the .vo. In case (1), we can compare functions by pointer equality, and we should be able to rely on globally unique keys, even across backtracking. In case (2), we cannot compare functions by pointer equality (because they must be regenerated on unmarshelling when `Require`ing a .vo file), and we also cannot rely on any sort of unique key being both unique and persistent across files. The solution we use here is that we ask clients to provide "unique" keys, and that clients tell us whether or not to overwrite existing registered functions, i.e., to tell us whether or not we should expect interpreter functions to be globally unique under pointer equality. For plugins, a simple string suffices, as long as the string does not clash between different plugins. In the case of vernacular-registered functions, use marshell a description of all of the data used to generate the function, and use that string as a unique key which is expected to persist across files. Because we cannot rely on function-pointer uniqueness here, we tell the interpretation-registration to allow overwriting. ---- Some of this code is response to comments on the PR ---- Some code is to fix an issue that bignums revealed: Both Int31 and bignums registered numeral notations in int31_scope. We now prepend a globally unique identifier when registering numeral notations from OCaml plugins. This is permissible because we don't store the uid information for such notations in .vo files (assuming I'm understanding the code correctly).
Diffstat (limited to 'plugins/syntax/r_syntax_plugin.mlpack')
0 files changed, 0 insertions, 0 deletions