| Index: pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart
|
| diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart
|
| deleted file mode 100644
|
| index eeff7d55f5d24553711b3a65b839e9d5d0baf115..0000000000000000000000000000000000000000
|
| --- a/pkg/compiler/lib/src/js_emitter/old_emitter/container_builder.dart
|
| +++ /dev/null
|
| @@ -1,181 +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;
|
| -
|
| -/// This class should morph into something that makes it easy to build
|
| -/// JavaScript representations of libraries, class-sides, and instance-sides.
|
| -/// Initially, it is just a placeholder for code that is moved from
|
| -/// [CodeEmitterTask].
|
| -class ContainerBuilder extends CodeEmitterHelper {
|
| -
|
| - void addMemberMethod(DartMethod method, ClassBuilder builder) {
|
| - MethodElement member = method.element;
|
| - jsAst.Name name = method.name;
|
| - FunctionSignature parameters = member.functionSignature;
|
| - jsAst.Expression code = method.code;
|
| - bool needsStubs = method.parameterStubs.isNotEmpty;
|
| - bool canBeApplied = method.canBeApplied;
|
| - bool canBeReflected = method.canBeReflected;
|
| - bool canTearOff = method.needsTearOff;
|
| - jsAst.Name tearOffName = method.tearOffName;
|
| - bool isClosure = method is InstanceMethod && method.isClosure;
|
| - jsAst.Name superAlias = method is InstanceMethod ? method.aliasName : null;
|
| - bool hasSuperAlias = superAlias != null;
|
| - jsAst.Expression memberTypeExpression = method.functionType;
|
| -
|
| - bool needStructuredInfo =
|
| - canTearOff || canBeReflected || canBeApplied || hasSuperAlias;
|
| -
|
| - emitter.interceptorEmitter.recordMangledNameOfMemberMethod(member, name);
|
| -
|
| - if (!needStructuredInfo) {
|
| - compiler.dumpInfoTask.registerElementAst(member,
|
| - builder.addProperty(name, code));
|
| -
|
| - for (ParameterStubMethod stub in method.parameterStubs) {
|
| - assert(stub.callName == null);
|
| - jsAst.Property property = builder.addProperty(stub.name, stub.code);
|
| - compiler.dumpInfoTask.registerElementAst(member, property);
|
| - emitter.interceptorEmitter
|
| - .recordMangledNameOfMemberMethod(member, stub.name);
|
| - }
|
| - return;
|
| - }
|
| - emitter.needsStructuredMemberInfo = true;
|
| -
|
| - // This element is needed for reflection or needs additional stubs or has a
|
| - // super alias. So we need to retain additional information.
|
| -
|
| - // The information is stored in an array with this format:
|
| - //
|
| - // 1. The alias name for this function (optional).
|
| - // 2. The JS function for this member.
|
| - // 3. First stub.
|
| - // 4. Name of first stub.
|
| - // ...
|
| - // M. Call name of this member.
|
| - // M+1. Call name of first stub.
|
| - // ...
|
| - // N. Getter name for tearOff.
|
| - // N+1. (Required parameter count << 1) + (member.isAccessor ? 1 : 0).
|
| - // N+2. (Optional parameter count << 1) +
|
| - // (parameters.optionalParametersAreNamed ? 1 : 0).
|
| - // N+3. Index to function type in constant pool.
|
| - // N+4. First default argument.
|
| - // ...
|
| - // O. First parameter name (if needed for reflection or Function.apply).
|
| - // ...
|
| - // P. Unmangled name (if reflectable).
|
| - // P+1. First metadata (if reflectable).
|
| - // ...
|
| - // TODO(ahe): Consider one of the parameter counts can be replaced by the
|
| - // length property of the JavaScript function object.
|
| -
|
| - List<jsAst.Expression> expressions = <jsAst.Expression>[];
|
| -
|
| - // Create the optional aliasing entry if this method is called via super.
|
| - if (hasSuperAlias) {
|
| - expressions.add(js.quoteName(superAlias));
|
| - }
|
| -
|
| - expressions.add(code);
|
| -
|
| - bool onlyNeedsSuperAlias =
|
| - !(canTearOff || canBeReflected || canBeApplied || needsStubs);
|
| -
|
| - if (onlyNeedsSuperAlias) {
|
| - jsAst.ArrayInitializer arrayInit =
|
| - new jsAst.ArrayInitializer(expressions);
|
| - compiler.dumpInfoTask.registerElementAst(member,
|
| - builder.addProperty(name, arrayInit));
|
| - return;
|
| - }
|
| -
|
| - jsAst.Literal callSelectorString;
|
| - if (method.callName == null) {
|
| - callSelectorString = new jsAst.LiteralNull();
|
| - } else {
|
| - callSelectorString = js.quoteName(method.callName);
|
| - }
|
| -
|
| - // On [requiredParameterCount], the lower bit is set if this method can be
|
| - // called reflectively.
|
| - int requiredParameterCount = parameters.requiredParameterCount << 1;
|
| - if (member.isAccessor) requiredParameterCount++;
|
| -
|
| - int optionalParameterCount = parameters.optionalParameterCount << 1;
|
| - if (parameters.optionalParametersAreNamed) optionalParameterCount++;
|
| -
|
| - List tearOffInfo = [callSelectorString];
|
| -
|
| - for (ParameterStubMethod stub in method.parameterStubs) {
|
| - jsAst.Name invocationName = stub.name;
|
| - emitter.interceptorEmitter
|
| - .recordMangledNameOfMemberMethod(member, invocationName);
|
| -
|
| - expressions.add(stub.code);
|
| - if (member.isInstanceMember) {
|
| - expressions.add(js.quoteName(invocationName));
|
| - }
|
| - jsAst.Name callName = stub.callName;
|
| - jsAst.Literal callSelectorString =
|
| - (callName == null) ? new jsAst.LiteralNull() : js.quoteName(callName);
|
| - tearOffInfo.add(callSelectorString);
|
| - }
|
| -
|
| - expressions
|
| - ..addAll(tearOffInfo)
|
| - ..add((tearOffName == null || member.isAccessor)
|
| - ? js("null") : js.quoteName(tearOffName))
|
| - ..add(js.number(requiredParameterCount))
|
| - ..add(js.number(optionalParameterCount))
|
| - ..add(memberTypeExpression == null ? js("null") : memberTypeExpression)
|
| - ..addAll(task.metadataCollector.reifyDefaultArguments(member));
|
| -
|
| - if (canBeReflected || canBeApplied) {
|
| - parameters.forEachParameter((Element parameter) {
|
| - expressions.add(task.metadataCollector.reifyName(parameter.name));
|
| - if (backend.mustRetainMetadata) {
|
| - Iterable<jsAst.Expression> metadataIndices =
|
| - parameter.metadata.map((MetadataAnnotation annotation) {
|
| - ConstantValue constant =
|
| - backend.constants.getConstantValueForMetadata(annotation);
|
| - backend.constants.addCompileTimeConstantForEmission(constant);
|
| - return task.metadataCollector.reifyMetadata(annotation);
|
| - });
|
| - expressions.add(new jsAst.ArrayInitializer(metadataIndices.toList()));
|
| - }
|
| - });
|
| - }
|
| - if (canBeReflected) {
|
| - jsAst.LiteralString reflectionName;
|
| - if (member.isConstructor) {
|
| - // TODO(herhut): This registers name as a mangled name. Do we need this
|
| - // given that we use a different name below?
|
| - emitter.getReflectionName(member, name);
|
| - reflectionName =
|
| - new jsAst.LiteralString(
|
| - '"new ${Elements.reconstructConstructorName(member)}"');
|
| - } else {
|
| - reflectionName =
|
| - js.string(namer.privateName(member.memberName));
|
| - }
|
| - expressions
|
| - ..add(reflectionName)
|
| - ..addAll(task.metadataCollector.computeMetadata(member));
|
| - } else if (isClosure && canBeApplied) {
|
| - expressions.add(js.string(namer.privateName(member.memberName)));
|
| - }
|
| -
|
| - jsAst.ArrayInitializer arrayInit =
|
| - new jsAst.ArrayInitializer(expressions.toList());
|
| - compiler.dumpInfoTask.registerElementAst(member,
|
| - builder.addProperty(name, arrayInit));
|
| - }
|
| -
|
| - void addMemberField(Field field, ClassBuilder builder) {
|
| - // For now, do nothing.
|
| - }
|
| -}
|
|
|