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 ; } }
Symbol Table Management