anchor.diff:        // do not have enough stack space.
         rethrow;
       } catch (ex, s) {
  +      String message = 'The compiler crashed: ${tryToString(ex)}.';
         try {
  -        unhandledExceptionOnElement(element, s);
  +        unhandledExceptionOnElement(element, s, message);
         } catch (doubleFault) {
           // Ignoring exceptions in exception handling.
         }
  -      throw new CompilerCancelledException('The compiler crashed.');
  +      throw new CompilerCancelledException('The compiler crashed');
       } finally {
         _currentElement = old;
       }
  
positive.code:           reportDiagnostic(new SourceSpan(uri, 0, 0),
                             MessageKind.COMPILER_CRASHED.error().toString(),
                             api.Diagnostic.CRASH);
            pleaseReportCrash(getAttachedStackTrace(error));
          }
        } catch (doubleFault) {
          // Ignoring exceptions in exception handling.
  
negative.code:    * [element].  Can be nested.
     */
    withCurrentElement(Element element, f()) {
      String tryToString(object) {
        try {
          return object.toString();
        } catch (_) {
          return '<exception in toString()>';
        }
      }
  
      Element old = currentElement;
      _currentElement = element;
      try {
        return f();
      } on SpannableAssertionFailure catch (ex, s) {
        if (!hasCrashed) {
          String message = (ex.message != null) ? tryToString(ex.message)
                                                : tryToString(ex);
          SourceSpan span = spanFromSpannable(ex.node);
          reportError(ex.node, MessageKind.GENERIC, {'text': message});
          pleaseReportCrash(s, 'The compiler crashed: $message.');
        }
        hasCrashed = true;
        throw new CompilerCancelledException('The compiler crashed.');
  