int putSymbol ( String symbolName ) { if ( isReadOnly ) { throw new ReadOnlyValueException ( SymbolTable . class ) ; } if ( mySymbolsCount == mySymbolNames . length ) { int newlen = mySymbolsCount * 2 ; if ( newlen < DEFAULT_CAPACITY ) { newlen = DEFAULT_CAPACITY ; } String [ ] temp = new String [ newlen ] ; System . arraycopy ( mySymbolNames , 0 , temp , 0 , mySymbolsCount ) ; mySymbolNames = temp ; } int sid = - 1 ; if ( symbolName != null ) { sid = mySymbolsCount + myFirstLocalSid ; assert sid == getMaxId ( ) + 1 ; putToMapIfNotThere ( mySymbolsMap , symbolName , sid ) ; } mySymbolNames [ mySymbolsCount ] = symbolName ; mySymbolsCount ++ ; return sid ; }
NOT SYNCHRONIZED! Call within constructor or from synch d method .