code: @Override
      public AtomicValue evaluate() {
  
          boolean isInstanceOf;
  
          if (mInputExpr.hasNext()) {
              if (mSequenceType.isEmptySequence()) {
                  isInstanceOf = false;
              } else {
  
                  isInstanceOf = mSequenceType.getFilter().filter();
                  switch (mSequenceType.getWildcard()) {
  
                  case '*':
                  case '+':
                      // This seams to break the pipeline, but because the
                      // intermediate
                      // result are no longer used, it might be not that bad
                      while (mInputExpr.hasNext() && isInstanceOf) {
                          isInstanceOf = isInstanceOf && mSequenceType.getFilter().filter();
                      }
                      break;
                  default: // no wildcard, or '?'
                      // only one result item is allowed
                      isInstanceOf = isInstanceOf && !mInputExpr.hasNext();
                  }
              }
  
          } else { // empty sequence
              isInstanceOf =
                  mSequenceType.isEmptySequence()
                      || (mSequenceType.hasWildcard() && (mSequenceType.getWildcard() == '?' || mSequenceType
                          .getWildcard() == '*'));
          }
  
          // create result item and move transaction to it.
          AtomicValue val =
              new AtomicValue(TypedValue.getBytes(Boolean.toString(isInstanceOf)), NamePageHash
                  .generateHashForString("xs:boolean"));
          final int mItemKey = getItemList().addItem(val);
          moveTo(mItemKey);
          return val;
  
      }
docs: {@inheritDoc}