Chromium Code Reviews| Index: sdk/lib/_internal/compiler/implementation/ssa/builder.dart |
| =================================================================== |
| --- sdk/lib/_internal/compiler/implementation/ssa/builder.dart (revision 14725) |
| +++ sdk/lib/_internal/compiler/implementation/ssa/builder.dart (working copy) |
| @@ -45,44 +45,32 @@ |
| compiler.unimplemented('Unknown operator', node: op); |
| } |
| - // TODO(karlklose,kasperl): change uses of getStatic[Get|Set]Interceptor to |
| - // use this function. |
| - Element getStaticInterceptorBySelector(Selector selector) { |
| + Element getStaticInterceptor(Selector selector) { |
| if (selector.isGetter()) { |
| // TODO(lrn): If there is no get-interceptor, but there is a |
| // method-interceptor, we should generate a get-interceptor automatically. |
| - return getStaticGetInterceptor(selector.name); |
| + String mangledName = "get\$${selector.name.slowToString()}"; |
| + return compiler.findInterceptor(new SourceString(mangledName)); |
| } else if (selector.isSetter()) { |
| - return getStaticSetInterceptor(selector.name); |
| + String mangledName = "set\$${selector.name.slowToString()}"; |
| + return compiler.findInterceptor(new SourceString(mangledName)); |
| } else { |
| - return getStaticInterceptor(selector.name, selector.argumentCount); |
| + String mangledName = selector.name.slowToString(); |
|
karlklose
2012/11/09 11:14:36
You could store selector.name.slowToString in a lo
ngeoffray
2012/11/09 11:17:54
Done.
|
| + Element element = compiler.findInterceptor(new SourceString(mangledName)); |
| + if (element != null && element.isFunction()) { |
| + // Only pick the function element with the short name if the |
| + // number of parameters it expects matches the number we're |
| + // passing modulo the receiver. |
| + FunctionElement function = element; |
| + if (function.parameterCount(compiler) == selector.argumentCount + 1) { |
| + return element; |
| + } |
| + } |
| + String longMangledName = "$mangledName\$${selector.argumentCount}"; |
| + return compiler.findInterceptor(new SourceString(longMangledName)); |
| } |
| } |
| - Element getStaticInterceptor(SourceString name, int parameters) { |
| - String mangledName = name.slowToString(); |
| - Element element = compiler.findInterceptor(new SourceString(mangledName)); |
| - if (element != null && element.isFunction()) { |
| - // Only pick the function element with the short name if the |
| - // number of parameters it expects matches the number we're |
| - // passing modulo the receiver. |
| - FunctionElement function = element; |
| - if (function.parameterCount(compiler) == parameters + 1) return element; |
| - } |
| - String longMangledName = "$mangledName\$$parameters"; |
| - return compiler.findInterceptor(new SourceString(longMangledName)); |
| - } |
| - |
| - Element getStaticGetInterceptor(SourceString name) { |
| - String mangledName = "get\$${name.slowToString()}"; |
| - return compiler.findInterceptor(new SourceString(mangledName)); |
| - } |
| - |
| - Element getStaticSetInterceptor(SourceString name) { |
| - String mangledName = "set\$${name.slowToString()}"; |
| - return compiler.findInterceptor(new SourceString(mangledName)); |
| - } |
| - |
| Element getOperatorInterceptor(Operator op) { |
| SourceString name = mapOperatorToMethodName(op); |
| return compiler.findHelper(name); |
| @@ -2284,7 +2272,7 @@ |
| SourceString getterName = selector.name; |
| Element staticInterceptor = null; |
| if (elements[send] == null && methodInterceptionEnabled) { |
| - staticInterceptor = interceptors.getStaticGetInterceptor(getterName); |
| + staticInterceptor = interceptors.getStaticInterceptor(selector); |
| } |
| bool hasGetter = compiler.world.hasAnyUserDefinedGetter(selector); |
| if (staticInterceptor != null) { |
| @@ -2347,7 +2335,7 @@ |
| SourceString setterName = selector.name; |
| Element staticInterceptor = null; |
| if (elements[send] == null && methodInterceptionEnabled) { |
| - staticInterceptor = interceptors.getStaticSetInterceptor(setterName); |
| + staticInterceptor = interceptors.getStaticInterceptor(selector); |
| } |
| bool hasSetter = compiler.world.hasAnyUserDefinedSetter(selector); |
| if (staticInterceptor != null) { |
| @@ -2617,8 +2605,7 @@ |
| Element interceptor = null; |
| if (methodInterceptionEnabled && elements[node] == null) { |
| - interceptor = interceptors.getStaticInterceptor(dartMethodName, |
| - node.argumentCount()); |
| + interceptor = interceptors.getStaticInterceptor(selector); |
| } |
| if (interceptor != null) { |
| HStatic target = new HStatic(interceptor); |
| @@ -3686,7 +3673,9 @@ |
| HInstruction iterator; |
| void buildInitializer() { |
| SourceString iteratorName = const SourceString("iterator"); |
| - Element interceptor = interceptors.getStaticInterceptor(iteratorName, 0); |
| + Selector selector = |
| + new Selector.call(iteratorName, work.element.getLibrary(), 0); |
| + Element interceptor = interceptors.getStaticInterceptor(selector); |
| assert(interceptor != null); |
| visit(node.expression); |
| pushInvokeHelper1(interceptor, pop()); |
| @@ -3695,7 +3684,7 @@ |
| HInstruction buildCondition() { |
| SourceString name = const SourceString('hasNext'); |
| Selector selector = new Selector.getter(name, work.element.getLibrary()); |
| - if (interceptors.getStaticGetInterceptor(name) != null) { |
| + if (interceptors.getStaticInterceptor(selector) != null) { |
| compiler.internalError("hasNext getter must not be intercepted", |
| node: node); |
| } |