Chromium Code Reviews| Index: sdk/lib/_internal/compiler/implementation/ssa/builder.dart |
| diff --git a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart |
| index 5ab75da704e05bf9e84f2a2372503a048539ceee..9e2a04429aebd8a4a2a7ee9b068345a592b9d46f 100644 |
| --- a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart |
| +++ b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart |
| @@ -2176,9 +2176,25 @@ class SsaBuilder extends ResolvedVisitor { |
| return; |
| } |
| } |
| - HInstruction newParameter = potentiallyCheckType( |
| - localsHandler.directLocals[parameterElement], |
| - parameterElement.type); |
| + HInstruction newParameter = |
| + localsHandler.directLocals[parameterElement]; |
| + if (!element.isConstructor || |
| + !(element as ConstructorElement).isRedirectingFactory) { |
| + // Redirection factories must not check their argument types. |
|
ahe
2014/07/27 09:43:31
I'm having a hard time finding this explicitly sta
Johnni Winther
2014/08/04 06:58:03
It is in the spec, implicitly. I even asked Gilad
|
| + // Example: |
| + // |
| + // class A { |
| + // A(String foo) = A.b; |
| + // A(int foo) { print(foo); } |
| + // } |
| + // main() { |
| + // new A(499); // valid even in checked mode. |
| + // new A("foo"); // invalid in checked mode. |
| + // |
| + // Only the final target is allowed to check for the argument types. |
| + newParameter = |
| + potentiallyCheckType(newParameter, parameterElement.type); |
| + } |
| localsHandler.directLocals[parameterElement] = newParameter; |
| }); |