docs: private void startLocalSymbolTableIfNeeded(final boolean writeIVM) throws IOException
      {
          if (symbolState == SymbolState.SYSTEM_SYMBOLS)
          {
              if (writeIVM)
              {
                  symbols.writeIonVersionMarker();
              }
              symbols.addTypeAnnotationSymbol(systemSymbol(ION_SYMBOL_TABLE_SID));
              symbols.stepIn(STRUCT);
              {
                  if (imports.parents.size() > 0)
                  {
                      symbols.setFieldNameSymbol(systemSymbol(IMPORTS_SID));
                      symbols.stepIn(LIST);
                      for (final SymbolTable st : imports.parents)
                      {
                          symbols.stepIn(STRUCT);
                          {
                              symbols.setFieldNameSymbol(systemSymbol(NAME_SID));
                              symbols.writeString(st.getName());
                              symbols.setFieldNameSymbol(systemSymbol(VERSION_SID));
                              symbols.writeInt(st.getVersion());
                              symbols.setFieldNameSymbol(systemSymbol(MAX_ID_SID));
                              symbols.writeInt(st.getMaxId());
                          }
                          symbols.stepOut();
                      }
                      symbols.stepOut();
                  }
              }
              // XXX no step out
              symbolState = SymbolState.LOCAL_SYMBOLS_WITH_IMPORTS_ONLY;
          }
      }