| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 ParameterStubGenerator { | 7 class ParameterStubGenerator { |
| 8 static final Set<Selector> emptySelectorSet = new Set<Selector>(); | 8 static final Set<Selector> emptySelectorSet = new Set<Selector>(); |
| 9 | 9 |
| 10 final Namer namer; | 10 final Namer namer; |
| 11 final Compiler compiler; | 11 final Compiler compiler; |
| 12 final JavaScriptBackend backend; | 12 final JavaScriptBackend backend; |
| 13 final ClosedWorld closedWorld; | 13 final ClosedWorld closedWorld; |
| 14 | 14 |
| 15 ParameterStubGenerator( | 15 ParameterStubGenerator( |
| 16 this.compiler, this.namer, this.backend, this.closedWorld); | 16 this.compiler, this.namer, this.backend, this.closedWorld); |
| 17 | 17 |
| 18 Emitter get emitter => backend.emitter.emitter; | 18 Emitter get emitter => backend.emitter.emitter; |
| 19 CodeEmitterTask get emitterTask => backend.emitter; | 19 CodeEmitterTask get emitterTask => backend.emitter; |
| 20 DiagnosticReporter get reporter => compiler.reporter; | 20 DiagnosticReporter get reporter => compiler.reporter; |
| 21 | 21 |
| 22 bool needsSuperGetter(FunctionElement element) => | 22 bool needsSuperGetter(FunctionElement element) => |
| 23 compiler.codegenWorld.methodsNeedingSuperGetter.contains(element); | 23 compiler.codegenWorldBuilder.methodsNeedingSuperGetter.contains(element); |
| 24 | 24 |
| 25 /** | 25 /** |
| 26 * Generates stubs to handle invocation of methods with optional | 26 * Generates stubs to handle invocation of methods with optional |
| 27 * arguments. | 27 * arguments. |
| 28 * | 28 * |
| 29 * A method like `foo([x])` may be invoked by the following | 29 * A method like `foo([x])` may be invoked by the following |
| 30 * calls: `foo(), foo(1), foo(x: 1)`. This method generates the stub for the | 30 * calls: `foo(), foo(1), foo(x: 1)`. This method generates the stub for the |
| 31 * given [selector] and returns the generated [ParameterStubMethod]. | 31 * given [selector] and returns the generated [ParameterStubMethod]. |
| 32 * | 32 * |
| 33 * Returns null if no stub is needed. | 33 * Returns null if no stub is needed. |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 // The set of selectors that apply to `member` if it's name was `call`. | 207 // The set of selectors that apply to `member` if it's name was `call`. |
| 208 // This happens when a member is torn off. In that case calls to the | 208 // This happens when a member is torn off. In that case calls to the |
| 209 // function use the name `call`, and we must be able to handle every | 209 // function use the name `call`, and we must be able to handle every |
| 210 // `call` invocation that matches the signature. For example, for | 210 // `call` invocation that matches the signature. For example, for |
| 211 // a member `foo(x, [y])` the following selectors would be possible | 211 // a member `foo(x, [y])` the following selectors would be possible |
| 212 // call-selectors: `call(x)`, and `call(x, y)`. | 212 // call-selectors: `call(x)`, and `call(x, y)`. |
| 213 Map<Selector, SelectorConstraints> callSelectors; | 213 Map<Selector, SelectorConstraints> callSelectors; |
| 214 | 214 |
| 215 // Only instance members (not static methods) need stubs. | 215 // Only instance members (not static methods) need stubs. |
| 216 if (member.isInstanceMember) { | 216 if (member.isInstanceMember) { |
| 217 selectors = compiler.codegenWorld.invocationsByName(member.name); | 217 selectors = compiler.codegenWorldBuilder.invocationsByName(member.name); |
| 218 } | 218 } |
| 219 | 219 |
| 220 if (canTearOff) { | 220 if (canTearOff) { |
| 221 String call = namer.closureInvocationSelectorName; | 221 String call = namer.closureInvocationSelectorName; |
| 222 callSelectors = compiler.codegenWorld.invocationsByName(call); | 222 callSelectors = compiler.codegenWorldBuilder.invocationsByName(call); |
| 223 } | 223 } |
| 224 | 224 |
| 225 assert(emptySelectorSet.isEmpty); | 225 assert(emptySelectorSet.isEmpty); |
| 226 if (selectors == null) selectors = const <Selector, SelectorConstraints>{}; | 226 if (selectors == null) selectors = const <Selector, SelectorConstraints>{}; |
| 227 if (callSelectors == null) | 227 if (callSelectors == null) |
| 228 callSelectors = const <Selector, SelectorConstraints>{}; | 228 callSelectors = const <Selector, SelectorConstraints>{}; |
| 229 | 229 |
| 230 List<ParameterStubMethod> stubs = <ParameterStubMethod>[]; | 230 List<ParameterStubMethod> stubs = <ParameterStubMethod>[]; |
| 231 | 231 |
| 232 if (selectors.isEmpty && callSelectors.isEmpty) { | 232 if (selectors.isEmpty && callSelectors.isEmpty) { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 generateParameterStub(member, selector, null); | 278 generateParameterStub(member, selector, null); |
| 279 if (stub != null) { | 279 if (stub != null) { |
| 280 stubs.add(stub); | 280 stubs.add(stub); |
| 281 } | 281 } |
| 282 } | 282 } |
| 283 } | 283 } |
| 284 | 284 |
| 285 return stubs; | 285 return stubs; |
| 286 } | 286 } |
| 287 } | 287 } |
| OLD | NEW |