anchor.diff:      return new leg.Script(uri, sourceFile);
     }
   
  -  translateDartUri(Uri uri, tree.Node node) {
  +  Uri translateUri(Uri uri, tree.Node node) {
  +    switch (uri.scheme) {
  +      case 'dart': return translateDartUri(uri, node);
  +      case 'package': return translatePackageUri(uri, node);
  +      default: return uri;
  +    }
  +  }
  +
  +  Uri translateDartUri(Uri uri, tree.Node node) {
       String path = DART2JS_LIBRARY_MAP[uri.path];
       if (path === null || uri.path.startsWith('_')) {
         reportError(node, 'library not found ${uri}');
  
positive.code:   }
  
    leg.Script readScript(Uri uri, [tree.Node node]) {
      if (uri.scheme == 'dart') {
        uri = translateDartUri(uri, node);
      } else if (uri.scheme == 'package') {
        uri = translatePackageUri(uri, node);
      }
      String text = "";
      try {
        // TODO(ahe): We expect the future to be complete and call value
        // directly. In effect, we don't support truly asynchronous API.
        text = provider(uri).value;
      } catch (var exception) {
        if (node !== null) {
          cancel("$exception", node: node);
  
negative.code:     if (span === null) {
        handler(null, null, null, message, fatal);
      } else {
        handler(translateUri(span.uri, null), span.begin, span.end,
                message, fatal);
      }
    }
  
  