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. |
- } |
-} |