anchor.diff:              dartpad_main[prop].main();
             }
       }});
  -''';
  +''');
       }
  -
  -    return '$postMessagePrint\n$exceptionHandler\n$requireConfig\n'
  -            '$javaScript\n$postfix'
  -        .trim();
  +    return completeScript.toString();
     }
   
     @override
  
positive.code: }
  // Unload previous version.
  require.undef('dartpad_main');
  ''';
  
      /// The javascript exception handling for Dartpad catches both errors
      /// directly raised by main() (in which case we might have useful Dart
      /// exception information we don't want to discard), as well as errors
      /// generated by other means, like assertion errors when starting up
      /// asynchronous functions.
      ///
      /// To avoid duplicating error messages on the DartPad console, we signal to
      /// window.onerror that we've already sent a dartMainRunner message by
      /// flipping _thrownDartMainRunner to true.  Some platforms don't populate
      /// error so avoid using it if it is null.
      ///
      /// This seems to produce both the stack traces we expect in inspector
      /// and the right error messages on the console.
      const exceptionHandler = '''
  var _thrownDartMainRunner = false;
  
  window.onerror = function(message, url, lineNumber, colno, error) {
  
negative.code:     String html,
      String css,
      String javaScript, {
      @required String modulesBaseUrl,
    }) {
      return _send('execute', {
        'html': html,
  