| Index: sdk/lib/_internal/compiler/implementation/js_emitter/old_emitter/metadata_emitter.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/old_emitter/metadata_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/old_emitter/metadata_emitter.dart
|
| deleted file mode 100644
|
| index de1838b625ae42a8a076619bd3d7c493f6f6d3d0..0000000000000000000000000000000000000000
|
| --- a/sdk/lib/_internal/compiler/implementation/js_emitter/old_emitter/metadata_emitter.dart
|
| +++ /dev/null
|
| @@ -1,137 +0,0 @@
|
| -// Copyright (c) 2013, 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.
|
| -
|
| -part of dart2js.js_emitter;
|
| -
|
| -class MetadataEmitter extends CodeEmitterHelper {
|
| - /// A list of JS expressions that represent metadata, parameter names and
|
| - /// type, and return types.
|
| - final List<String> globalMetadata = [];
|
| -
|
| - /// A map used to canonicalize the entries of globalMetadata.
|
| - final Map<String, int> globalMetadataMap = <String, int>{};
|
| -
|
| - bool mustEmitMetadataFor(Element element) {
|
| - return backend.mustRetainMetadata &&
|
| - backend.referencedFromMirrorSystem(element);
|
| - }
|
| -
|
| - /// The metadata function returns the metadata associated with
|
| - /// [element] in generated code. The metadata needs to be wrapped
|
| - /// in a function as it refers to constants that may not have been
|
| - /// constructed yet. For example, a class is allowed to be
|
| - /// annotated with itself. The metadata function is used by
|
| - /// mirrors_patch to implement DeclarationMirror.metadata.
|
| - jsAst.Fun buildMetadataFunction(Element element) {
|
| - if (!mustEmitMetadataFor(element)) return null;
|
| - return compiler.withCurrentElement(element, () {
|
| - var metadata = [];
|
| - Link link = element.metadata;
|
| - // TODO(ahe): Why is metadata sometimes null?
|
| - if (link != null) {
|
| - for (; !link.isEmpty; link = link.tail) {
|
| - MetadataAnnotation annotation = link.head;
|
| - ConstantExpression constant =
|
| - backend.constants.getConstantForMetadata(annotation);
|
| - if (constant == null) {
|
| - compiler.internalError(annotation, 'Annotation value is null.');
|
| - } else {
|
| - metadata.add(emitter.constantReference(constant.value));
|
| - }
|
| - }
|
| - }
|
| - if (metadata.isEmpty) return null;
|
| - return js('function() { return # }',
|
| - new jsAst.ArrayInitializer.from(metadata));
|
| - });
|
| - }
|
| -
|
| - List<int> reifyDefaultArguments(FunctionElement function) {
|
| - FunctionSignature signature = function.functionSignature;
|
| - if (signature.optionalParameterCount == 0) return const [];
|
| - List<int> defaultValues = <int>[];
|
| - for (ParameterElement element in signature.optionalParameters) {
|
| - ConstantExpression constant =
|
| - backend.constants.getConstantForVariable(element);
|
| - String stringRepresentation = (constant == null)
|
| - ? "null"
|
| - : jsAst.prettyPrint(
|
| - emitter.constantReference(constant.value), compiler).getText();
|
| - defaultValues.add(addGlobalMetadata(stringRepresentation));
|
| - }
|
| - return defaultValues;
|
| - }
|
| -
|
| - int reifyMetadata(MetadataAnnotation annotation) {
|
| - ConstantExpression constant =
|
| - backend.constants.getConstantForMetadata(annotation);
|
| - if (constant == null) {
|
| - compiler.internalError(annotation, 'Annotation value is null.');
|
| - return -1;
|
| - }
|
| - return addGlobalMetadata(
|
| - jsAst.prettyPrint(
|
| - emitter.constantReference(constant.value), compiler).getText());
|
| - }
|
| -
|
| - int reifyType(DartType type) {
|
| - jsAst.Expression representation =
|
| - backend.rti.getTypeRepresentation(
|
| - type,
|
| - (variable) {
|
| - return js.number(
|
| - emitter.typeVariableHandler.reifyTypeVariable(
|
| - variable.element));
|
| - },
|
| - (TypedefType typedef) {
|
| - return backend.isAccessibleByReflection(typedef.element);
|
| - });
|
| -
|
| - return addGlobalMetadata(
|
| - jsAst.prettyPrint(representation, compiler).getText());
|
| - }
|
| -
|
| - int reifyName(String name) {
|
| - return addGlobalMetadata('"$name"');
|
| - }
|
| -
|
| - int addGlobalMetadata(String string) {
|
| - return globalMetadataMap.putIfAbsent(string, () {
|
| - globalMetadata.add(string);
|
| - return globalMetadata.length - 1;
|
| - });
|
| - }
|
| -
|
| - void emitMetadata(CodeBuffer buffer) {
|
| - String metadataAccess = emitter.generateEmbeddedGlobalAccessString(
|
| - embeddedNames.METADATA);
|
| - buffer.write('$metadataAccess$_=$_[');
|
| - for (String metadata in globalMetadata) {
|
| - if (metadata is String) {
|
| - if (metadata != 'null') {
|
| - buffer.write(metadata);
|
| - }
|
| - } else {
|
| - throw 'Unexpected value in metadata: ${Error.safeToString(metadata)}';
|
| - }
|
| - buffer.write(',$n');
|
| - }
|
| - buffer.write('];$n');
|
| - }
|
| -
|
| - List<int> computeMetadata(FunctionElement element) {
|
| - return compiler.withCurrentElement(element, () {
|
| - if (!mustEmitMetadataFor(element)) return const <int>[];
|
| - List<int> metadata = <int>[];
|
| - Link link = element.metadata;
|
| - // TODO(ahe): Why is metadata sometimes null?
|
| - if (link != null) {
|
| - for (; !link.isEmpty; link = link.tail) {
|
| - metadata.add(reifyMetadata(link.head));
|
| - }
|
| - }
|
| - return metadata;
|
| - });
|
| - }
|
| -}
|
|
|