code: public static WriteableSymbolTable symbolTableEffectiveCopy(SymbolTable syms) {
      if (syms instanceof ImmutableSymbolTable) {
        return new UnionSymbolTable(syms);
      }
      if (syms instanceof UnionSymbolTable) {
        return UnionSymbolTable.copyFrom((UnionSymbolTable) syms);
      }
      if (syms instanceof FrozenSymbolTable) {
        return (FrozenSymbolTable) syms;
      }
      // maybe consider the size and if its "big" return a union of the mutable version?
      return new MutableSymbolTable(syms);
    }
docs: Returns an "effective" copy of the given symbol table which might be a unioned symbol
  table that is just a mutable filter on top of a backing table which is treated as
  immutable
  NOTE a frozen symbol table indicates that you do NOT want writes to be allowed
  @param syms
  @return