blob: 4006e777fe5b5d9bf175982db8460194786ed85e [file] [log] [blame]
// 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.
/// Facades for pieces of the js_emitter used from other parts of the compiler.
// TODO(48820): delete after the migration is complete.
library compiler.src.js_emitter.interfaces;
import '../constants/values.dart';
import '../deferred_load/output_unit.dart' show OutputUnit;
import '../elements/entities.dart';
import '../js/js.dart' as jsAst;
import 'metadata_collector.dart' show MetadataCollector;
import 'native_emitter.dart';
import 'startup_emitter/fragment_merger.dart';
abstract class CodeEmitterTask {
Set<ClassEntity> get neededClasses;
Set<ClassEntity> get neededClassTypes;
NativeEmitter get nativeEmitter;
Emitter get emitter;
MetadataCollector get metadataCollector;
}
abstract class ModularEmitter {
jsAst.Expression constructorAccess(ClassEntity e);
jsAst.Expression constantReference(ConstantValue constant);
jsAst.Expression isolateLazyInitializerAccess(covariant FieldEntity element);
jsAst.Expression prototypeAccess(ClassEntity e);
jsAst.Expression staticClosureAccess(covariant FunctionEntity element);
jsAst.Expression staticFieldAccess(FieldEntity element);
jsAst.Expression staticFunctionAccess(FunctionEntity element);
jsAst.Name typeVariableAccessNewRti(TypeVariableEntity element);
jsAst.Name typeAccessNewRti(ClassEntity element);
}
abstract class Emitter extends ModularEmitter {
Map<String, List<FinalizedFragment>> get finalizedFragmentsToLoad;
FragmentMerger get fragmentMerger;
int generatedSize(OutputUnit unit);
jsAst.Expression interceptorPrototypeAccess(ClassEntity e);
jsAst.Expression generateEmbeddedGlobalAccess(String global);
int compareConstants(ConstantValue a, ConstantValue b);
jsAst.Expression interceptorClassAccess(ClassEntity e);
bool isConstantInlinedOrAlreadyEmitted(ConstantValue constant);
}