anchor.diff:      try {
         item();
         return false;
  -    } catch (final e) {
  -      return _matcher == null || _matcher.matches(e);
  +    } catch (final e, final s) {
  +      if (_matcher == null ||_matcher.matches(e, matchState)) {
  +        return true;
  +      } else {
  +        matchState.state = {
  +            'exception' :e,
  +            'stack': s
  +        };
  +        return false;
  +      }
       }
     }
   
  
positive.code:     }
    }
  
    Description describeMismatch(item, Description mismatchDescription) {
      if (_matcher == null) {
        return mismatchDescription.add(' no exception');
      } else {
        return mismatchDescription.
            add(' no exception or exception does not match ').
            addDescriptionOf(_matcher);
      }
    }
  }
  
negative.code: class _Throws extends BaseMatcher {
    final Matcher _matcher;
  
    const _Throws([Matcher matcher]) :
      this._matcher = matcher;
  
    bool matches(item, MatchState matchState) {
      if (item is Future) {
        // Queue up an asynchronous expectation that validates when the future
        // completes.
  