public SymbolToken symbolValue() {
   if (!(_curr instanceof IonSymbol)) {
     throw new IllegalStateException();
   }
   if (_curr.isNullValue()) return null;
   return ((IonSymbol) _curr).symbolValue();
 }
 public boolean isNullValue() {
   if (_curr instanceof IonNull) return true;
   if (_curr == null) {
     throw new IllegalStateException("must call next() before isNullValue()");
   }
   return _curr.isNullValue();
 }
 public final SymbolToken[] getTypeAnnotationSymbols() {
   if (_curr == null) {
     throw new IllegalStateException();
   }
   // TODO should this localize the symbols?
   return _curr.getTypeAnnotationSymbols(_symbolTableAccessor);
 }
  public SymbolTable getSymbolTable() {
    SymbolTable symboltable = null;

    if (_curr != null) {
      symboltable = _curr.getSymbolTable();
    } else if (_parent != null) {
      symboltable = _parent.getSymbolTable();
    }

    return symboltable;
  }
 public String valueToString() {
   return (_curr == null) ? null : _curr.toString();
 }
 public final SymbolToken getFieldNameSymbol() {
   if (_curr == null || (_hoisted && _top == 0)) return null;
   return _curr.getFieldNameSymbol(_symbolTableAccessor);
 }
 public String getFieldName() {
   return (_curr == null || (_hoisted && _top == 0)) ? null : _curr.getFieldName();
 }
 public final String[] getTypeAnnotations() {
   if (_curr == null) {
     throw new IllegalStateException();
   }
   return _curr.getTypeAnnotations();
 }
 public IonType getType() {
   return (_curr == null) ? null : _curr.getType();
 }