Symbol creation interface, possibly better moved somewhere else.
It'd be nice if we had virtual classes, but since we
don't: these methods insulate the direct instantiation of the symbols
(which may be overridden, e.g. in SynchronizedSymbols) from the
enforcement of preconditions and choice of symbol constructor based
on flags, which are (or should be) final so they can be reasoned about
without lots of surprises.
Symbol creation interface, possibly better moved somewhere else. It'd be nice if we had virtual classes, but since we don't: these methods insulate the direct instantiation of the symbols (which may be overridden, e.g. in SynchronizedSymbols) from the enforcement of preconditions and choice of symbol constructor based on flags, which are (or should be) final so they can be reasoned about without lots of surprises.