code: private void open_local_symbol_table_copy()
      {
          assert(! symbol_table_being_collected());
  
          _symbol_table_value = _symtab_value_factory.newEmptyStruct();
  
          SymbolToken[] anns = _system_writer.getTypeAnnotationSymbols();
          _system_writer.clearAnnotations();
  
          _symbol_table_value.setTypeAnnotationSymbols(anns);
  
          _current_writer = new IonWriterSystemTree(activeSystemSymbolTable(),
                                                    _catalog,
                                                    _symbol_table_value,
                                                    null /* initialIvmHandling */);
      }
docs: <p>
  Diverts the data stream to a temporary tree writer which collects
  local symtab data into an IonStruct from which we'll later construct a
  {@link SymbolTable} instance.
  </p>
  <p>
  Once the value image of the symbol table is complete (which
  happens when the caller steps out of the containing struct)
  the diverted stream is abandonded and the symbol table gets constructed.
  </p>
  <p>
  If there was a makeSymbolTable(Reader) this copy might be,
  at least partially, avoided.
  </p>