Chromium Code Reviews| Index: pkg/compiler/lib/src/kernel/kernel_visitor.dart |
| diff --git a/pkg/compiler/lib/src/kernel/kernel_visitor.dart b/pkg/compiler/lib/src/kernel/kernel_visitor.dart |
| index 151247aad0e40209d19d1c52a5e4135da0755254..e7e642e5965e15f86fed9379b15c209d274932d9 100644 |
| --- a/pkg/compiler/lib/src/kernel/kernel_visitor.dart |
| +++ b/pkg/compiler/lib/src/kernel/kernel_visitor.dart |
| @@ -1224,9 +1224,9 @@ class KernelVisitor extends Object |
| } |
| @override |
| - ir.TypeLiteral visitClassTypeLiteralGet( |
| + ir.Expression visitClassTypeLiteralGet( |
| Send node, ConstantExpression constant, _) { |
| - return buildTypeLiteral(constant); |
| + return _addCheckLibraryLoadedIfNeeded(buildTypeLiteral(constant)); |
| } |
| @override |
| @@ -2014,14 +2014,8 @@ class KernelVisitor extends Object |
| } |
| ir.Expression buildStaticGet(Element element) { |
| - var expression = buildStaticAccessor(element).buildSimpleRead(); |
| - if (_deferredLibrary != null) { |
| - ir.Let let = new ir.Let( |
| - makeOrReuseVariable(new ir.CheckLibraryIsLoaded(_deferredLibrary)), |
| - expression); |
| - return let; |
| - } |
| - return expression; |
| + return _addCheckLibraryLoadedIfNeeded( |
| + buildStaticAccessor(element).buildSimpleRead()); |
| } |
| @override |
| @@ -2714,10 +2708,23 @@ class KernelVisitor extends Object |
| return buildIrFunction(ir.ProcedureKind.Setter, setter, body); |
| } |
| + ir.Expression _addCheckLibraryLoadedIfNeeded(ir.Expression inputExpression) { |
| + if (_deferredLibrary != null) { |
| + ir.Let let = new ir.Let( |
| + makeOrReuseVariable(new ir.CheckLibraryIsLoaded(_deferredLibrary)), |
| + inputExpression); |
| + // Only need to add this check once per statement, regardless of the |
| + // number of expressions that access a deferred member. |
|
sra1
2017/02/15 23:55:31
consider:
prefix1.foo(prefix2.a, prefix3.b)
do
Emily Fortuna
2017/02/16 02:21:56
yes.
|
| + _deferredLibrary = null; |
| + return let; |
| + } |
| + return inputExpression; |
| + } |
| + |
| @override |
| - ir.TypeLiteral visitTypeVariableTypeLiteralGet( |
| + ir.Expression visitTypeVariableTypeLiteralGet( |
| Send node, TypeVariableElement element, _) { |
| - return buildTypeVariable(element); |
| + return _addCheckLibraryLoadedIfNeeded(buildTypeVariable(element)); |
| } |
| @override |
| @@ -2746,9 +2753,9 @@ class KernelVisitor extends Object |
| } |
| @override |
| - ir.TypeLiteral visitTypedefTypeLiteralGet( |
| + ir.Expression visitTypedefTypeLiteralGet( |
| Send node, ConstantExpression constant, _) { |
| - return buildTypeLiteral(constant); |
| + return _addCheckLibraryLoadedIfNeeded(buildTypeLiteral(constant)); |
| } |
| @override |