// Copyright (c) 2012, 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 js_backend;

import 'dart:async' show Future;
import 'dart:collection' show LinkedHashMap, Queue;

import '../closure.dart';
import '../../compiler.dart' as api;
import '../elements/elements.dart';
import '../elements/modelx.dart' show FunctionElementX;
import '../js_emitter/js_emitter.dart' show Emitter, CodeEmitterTask, ClassBuilder;

// TODO(ahe): There seems to be a bug in the VM, so we have to hide "js".
import '../dart2jslib.dart' hide Selector, TypedSelector, js;
import '../dart_types.dart';
import '../js/js.dart' as jsAst;
import '../js/js.dart' show js; // TODO(ahe): VM bug, see above.
import '../native_handler.dart' as native;
import '../source_file.dart';
import '../source_map_builder.dart';
import '../ssa/ssa.dart' hide js; // TODO(ahe): VM bug, see above.
import '../tree/tree.dart';
import '../types/types.dart';
import '../universe/universe.dart' hide js; // TODO(ahe): VM bug, see above.
import '../util/characters.dart';
import '../util/util.dart';
import '../util/uri_extras.dart' show relativize;

part 'backend.dart';
part 'constant_emitter.dart';
part 'constant_system_javascript.dart';
part 'minify_namer.dart';
part 'namer.dart';
part 'native_emitter.dart';
part 'runtime_types.dart';
