Machinery for hygienic macros.
Inspired by Matthew Flatt et al., “Macros That Work Together: Compile-Time Bindings, Partial Expansion, and Definition Contexts,” Journal of Functional Programming 22, no. 2 (March 1, 2012): 181–216, https://doi.org/10.1017/S0956796812000093.
SyntaxContextrepresents a chain of pairs
(ExpnId, Transparency)named “marks”.
HashStableContextis configured with the ‘default’
HashingControls. We should always have bailed out before getting to here with a non-default mode. With this check in place, we can avoid the need to maintain separate versions of
ExpnDatahashes for each permutation of
disambiguatorfield of the corresponding
ExpnDatasuch that the
ExpnDatadoes not collide with any other