anchor.diff:    if (exception == null) return null;
     if (JS('bool', 'typeof # !== "object"', exception)) return null;
     if (JS('bool', r'"stack" in #', exception)) {
  -    return new _StackTrace(JS("var", r"#.stack", exception));
  +    return new _StackTrace(exception);
     } else {
       return null;
     }
   }
   
   class _StackTrace implements StackTrace {
  -  var _stack;
  -  _StackTrace(this._stack);
  -  String toString() => _stack != null ? _stack : '';
  -}
  -
  +  var _exception;
  +  String _trace;
  +  _StackTrace(this._exception);
  +
  +  String toString() {
  +    if (_trace != null) return _trace;
  +    String trace = JS("String|Null", r"#.stack", _exception);
  +    return _trace = (trace == null) ? '' : trace;
  +  }
  +}
   
   /**
    * Called by generated code to build a map literal. [keyValuePairs] is
  
positive.code:  */
  wrapException(ex) {
    if (ex == null) ex = new NullThrownError();
    var wrapper = new DartError(ex);
  
    if (JS('bool', '!!Error.captureStackTrace')) {
      // Use V8 API for recording a "fast" stack trace (this installs a
      // "stack" property getter on [wrapper]).
      JS('void', r'Error.captureStackTrace(#, #)',
         wrapper, RAW_DART_FUNCTION_REF(wrapException));
    } else {
      // Otherwise, produce a stack trace and record it in the wrapper.
      // This is a slower way to create a stack trace which works on
      // some browsers, but may simply evaluate to null.
      String stackTrace = JS('', 'new Error().stack');
      JS('void', '#.stack = #', wrapper, stackTrace);
    }
    return wrapper;
  }
  
  /**
  
negative.code:  */
  throwExpression(ex) {
    JS('void', 'throw #', wrapException(ex));
  }
  
  makeLiteralListConst(list) {
  