// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

library dart2js.script;

import 'io/source_file.dart';

class Script {
  final SourceFile file;

  /**
   * The readable URI from which this script was loaded.
   *
   * See [LibraryLoader] for terminology on URIs.
   */
  final Uri readableUri;


  /**
   * The resource URI from which this script was loaded.
   *
   * See [LibraryLoader] for terminology on URIs.
   */
  final Uri resourceUri;

  /// This script was synthesized.
  final bool isSynthesized;

  Script(
      this.readableUri, this.resourceUri, this.file,
      {this.isSynthesized: false});

  String get text => (file == null) ? null : file.slowText();
  String get name => (file == null) ? null : file.filename;

  /// Creates a new [Script] with the same URIs, but new content ([file]).
  Script copyWithFile(SourceFile file) {
    return new Script(readableUri, resourceUri, file);
  }
}
