| 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; | 5 part of dart2js.js_emitter; |
| 6 | 6 |
| 7 class InterceptorEmitter extends CodeEmitterHelper { | 7 class InterceptorEmitter extends CodeEmitterHelper { |
| 8 final Set<String> interceptorInvocationNames = new Set<String>(); | 8 final Set<String> interceptorInvocationNames = new Set<String>(); |
| 9 | 9 |
| 10 void recordMangledNameOfMemberMethod(FunctionElement member, String name) { | 10 void recordMangledNameOfMemberMethod(FunctionElement member, String name) { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 // compile time, it can be generated automatically at runtime given | 71 // compile time, it can be generated automatically at runtime given |
| 72 // subclasses of Interceptor (which can easily be identified). | 72 // subclasses of Interceptor (which can easily be identified). |
| 73 if (!compiler.enabledInvokeOn) return; | 73 if (!compiler.enabledInvokeOn) return; |
| 74 | 74 |
| 75 // TODO(ahe): We should roll this into | 75 // TODO(ahe): We should roll this into |
| 76 // [emitStaticNonFinalFieldInitializations]. | 76 // [emitStaticNonFinalFieldInitializations]. |
| 77 String name = backend.namer.getNameOfGlobalField(backend.interceptedNames); | 77 String name = backend.namer.getNameOfGlobalField(backend.interceptedNames); |
| 78 | 78 |
| 79 int index = 0; | 79 int index = 0; |
| 80 var invocationNames = interceptorInvocationNames.toList()..sort(); | 80 var invocationNames = interceptorInvocationNames.toList()..sort(); |
| 81 List<jsAst.ArrayElement> elements = invocationNames.map( | 81 List<jsAst.Expression> elements = invocationNames.map(js.string).toList(); |
| 82 (String invocationName) { | |
| 83 jsAst.Literal str = js.string(invocationName); | |
| 84 return new jsAst.ArrayElement(index++, str); | |
| 85 }).toList(); | |
| 86 jsAst.ArrayInitializer array = | 82 jsAst.ArrayInitializer array = |
| 87 new jsAst.ArrayInitializer(invocationNames.length, elements); | 83 new jsAst.ArrayInitializer(elements); |
| 88 | 84 |
| 89 jsAst.Expression assignment = | 85 jsAst.Expression assignment = |
| 90 js('${emitter.isolateProperties}.# = #', [name, array]); | 86 js('${emitter.isolateProperties}.# = #', [name, array]); |
| 91 | 87 |
| 92 buffer.write(jsAst.prettyPrint(assignment, compiler)); | 88 buffer.write(jsAst.prettyPrint(assignment, compiler)); |
| 93 buffer.write(N); | 89 buffer.write(N); |
| 94 } | 90 } |
| 95 | 91 |
| 96 /** | 92 /** |
| 97 * Emit initializer for [mapTypeToInterceptor] data structure used by | 93 * Emit initializer for [mapTypeToInterceptor] data structure used by |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 js.string(member.name), | 136 js.string(member.name), |
| 141 backend.namer.elementAccess(member))); | 137 backend.namer.elementAccess(member))); |
| 142 } | 138 } |
| 143 | 139 |
| 144 var map = new jsAst.ObjectInitializer(properties); | 140 var map = new jsAst.ObjectInitializer(properties); |
| 145 elements.add(map); | 141 elements.add(map); |
| 146 } | 142 } |
| 147 } | 143 } |
| 148 } | 144 } |
| 149 | 145 |
| 150 jsAst.ArrayInitializer array = new jsAst.ArrayInitializer.from(elements); | 146 jsAst.ArrayInitializer array = new jsAst.ArrayInitializer(elements); |
| 151 String name = | 147 String name = |
| 152 backend.namer.getNameOfGlobalField(backend.mapTypeToInterceptor); | 148 backend.namer.getNameOfGlobalField(backend.mapTypeToInterceptor); |
| 153 jsAst.Expression assignment = | 149 jsAst.Expression assignment = |
| 154 js('${emitter.isolateProperties}.# = #', [name, array]); | 150 js('${emitter.isolateProperties}.# = #', [name, array]); |
| 155 | 151 |
| 156 buffer.write(jsAst.prettyPrint(assignment, compiler)); | 152 buffer.write(jsAst.prettyPrint(assignment, compiler)); |
| 157 buffer.write(N); | 153 buffer.write(N); |
| 158 } | 154 } |
| 159 } | 155 } |
| OLD | NEW |