| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of dart2js.js_emitter.full_emitter; | 5 part of dart2js.js_emitter.full_emitter; |
| 6 | 6 |
| 7 /// This class should morph into something that makes it easy to build | 7 /// This class should morph into something that makes it easy to build |
| 8 /// JavaScript representations of libraries, class-sides, and instance-sides. | 8 /// JavaScript representations of libraries, class-sides, and instance-sides. |
| 9 /// Initially, it is just a placeholder for code that is moved from | 9 /// Initially, it is just a placeholder for code that is moved from |
| 10 /// [CodeEmitterTask]. | 10 /// [CodeEmitterTask]. |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 // ... | 60 // ... |
| 61 // N. Getter name for tearOff. | 61 // N. Getter name for tearOff. |
| 62 // N+1. (Required parameter count << 1) + (member.isAccessor ? 1 : 0). | 62 // N+1. (Required parameter count << 1) + (member.isAccessor ? 1 : 0). |
| 63 // N+2. (Optional parameter count << 1) + | 63 // N+2. (Optional parameter count << 1) + |
| 64 // (parameters.optionalParametersAreNamed ? 1 : 0). | 64 // (parameters.optionalParametersAreNamed ? 1 : 0). |
| 65 // N+3. Index to function type in constant pool. | 65 // N+3. Index to function type in constant pool. |
| 66 // N+4. First default argument. | 66 // N+4. First default argument. |
| 67 // ... | 67 // ... |
| 68 // O. First parameter name (if needed for reflection or Function.apply). | 68 // O. First parameter name (if needed for reflection or Function.apply). |
| 69 // ... | 69 // ... |
| 70 // P. Unmangled name (if reflectable). | 70 // P. Whether the first argument is field initialization parameter |
| 71 // P+1. First metadata (if reflectable). | 71 // (if reflectable and a constructor) |
| 72 // ... |
| 73 // Q. Unmangled name (if reflectable). |
| 74 // Q+1. First metadata (if reflectable). |
| 72 // ... | 75 // ... |
| 73 // TODO(ahe): Consider one of the parameter counts can be replaced by the | 76 // TODO(ahe): Consider one of the parameter counts can be replaced by the |
| 74 // length property of the JavaScript function object. | 77 // length property of the JavaScript function object. |
| 75 | 78 |
| 76 List<jsAst.Expression> expressions = <jsAst.Expression>[]; | 79 List<jsAst.Expression> expressions = <jsAst.Expression>[]; |
| 77 | 80 |
| 78 // Create the optional aliasing entry if this method is called via super. | 81 // Create the optional aliasing entry if this method is called via super. |
| 79 if (hasSuperAlias) { | 82 if (hasSuperAlias) { |
| 80 expressions.add(js.quoteName(superAlias)); | 83 expressions.add(js.quoteName(superAlias)); |
| 81 } | 84 } |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 backend.constants.getConstantValueForMetadata(annotation); | 147 backend.constants.getConstantValueForMetadata(annotation); |
| 145 backend.constants.addCompileTimeConstantForEmission(constant); | 148 backend.constants.addCompileTimeConstantForEmission(constant); |
| 146 return task.metadataCollector.reifyMetadata(annotation); | 149 return task.metadataCollector.reifyMetadata(annotation); |
| 147 }); | 150 }); |
| 148 expressions.add(new jsAst.ArrayInitializer(metadataIndices.toList())); | 151 expressions.add(new jsAst.ArrayInitializer(metadataIndices.toList())); |
| 149 } | 152 } |
| 150 }); | 153 }); |
| 151 } | 154 } |
| 152 if (canBeReflected) { | 155 if (canBeReflected) { |
| 153 jsAst.LiteralString reflectionName; | 156 jsAst.LiteralString reflectionName; |
| 157 List<jsAst.LiteralBool> argumentsInstantiatingFields = new List(); |
| 154 if (member.isConstructor) { | 158 if (member.isConstructor) { |
| 159 member.functionSignature.forEachParameter((element) => |
| 160 argumentsInstantiatingFields.add(js.boolean(element is InitializingFor
malElement))); |
| 155 // TODO(herhut): This registers name as a mangled name. Do we need this | 161 // TODO(herhut): This registers name as a mangled name. Do we need this |
| 156 // given that we use a different name below? | 162 // given that we use a different name below? |
| 157 emitter.getReflectionName(member, name); | 163 emitter.getReflectionName(member, name); |
| 158 reflectionName = | 164 reflectionName = |
| 159 new jsAst.LiteralString( | 165 new jsAst.LiteralString( |
| 160 '"new ${Elements.reconstructConstructorName(member)}"'); | 166 '"new ${Elements.reconstructConstructorName(member)}"'); |
| 161 } else { | 167 } else { |
| 162 reflectionName = | 168 reflectionName = |
| 163 js.string(namer.privateName(member.memberName)); | 169 js.string(namer.privateName(member.memberName)); |
| 170 member.functionSignature.forEachParameter((element) => |
| 171 argumentsInstantiatingFields.add(js.boolean(false))); |
| 164 } | 172 } |
| 165 expressions | 173 expressions |
| 174 ..addAll(argumentsInstantiatingFields) |
| 166 ..add(reflectionName) | 175 ..add(reflectionName) |
| 167 ..addAll(task.metadataCollector.computeMetadata(member)); | 176 ..addAll(task.metadataCollector.computeMetadata(member)); |
| 168 } else if (isClosure && canBeApplied) { | 177 } else if (isClosure && canBeApplied) { |
| 169 expressions.add(js.string(namer.privateName(member.memberName))); | 178 expressions.add(js.string(namer.privateName(member.memberName))); |
| 170 } | 179 } |
| 171 | 180 |
| 172 jsAst.ArrayInitializer arrayInit = | 181 jsAst.ArrayInitializer arrayInit = |
| 173 new jsAst.ArrayInitializer(expressions.toList()); | 182 new jsAst.ArrayInitializer(expressions.toList()); |
| 174 compiler.dumpInfoTask.registerElementAst(member, | 183 compiler.dumpInfoTask.registerElementAst(member, |
| 175 builder.addProperty(name, arrayInit)); | 184 builder.addProperty(name, arrayInit)); |
| 176 } | 185 } |
| 177 | 186 |
| 178 void addMemberField(Field field, ClassBuilder builder) { | 187 void addMemberField(Field field, ClassBuilder builder) { |
| 179 // For now, do nothing. | 188 // For now, do nothing. |
| 180 } | 189 } |
| 181 } | 190 } |
| OLD | NEW |