Chromium Code Reviews| Index: pkg/compiler/lib/src/ssa/kernel_impact.dart |
| diff --git a/pkg/compiler/lib/src/ssa/kernel_impact.dart b/pkg/compiler/lib/src/ssa/kernel_impact.dart |
| index 81b6358ac9ee5e56485d707b6ecf918c31b96d27..74d604237d787c80deb1d04c8c01b71ee3480e6e 100644 |
| --- a/pkg/compiler/lib/src/ssa/kernel_impact.dart |
| +++ b/pkg/compiler/lib/src/ssa/kernel_impact.dart |
| @@ -29,7 +29,7 @@ ResolutionImpact build(Compiler compiler, ResolvedAst resolvedAst) { |
| Kernel kernel = backend.kernelTask.kernel; |
| KernelImpactBuilder builder = |
| new KernelImpactBuilder(resolvedAst, compiler, kernel); |
| - if (element.isFunction) { |
| + if (element.isFunction || element.isGetter || element.isSetter) { |
| ir.Procedure function = kernel.functions[element]; |
| if (function == null) { |
| print("FOUND NULL FUNCTION: $element"); |
| @@ -39,7 +39,7 @@ ResolutionImpact build(Compiler compiler, ResolvedAst resolvedAst) { |
| } else { |
| ir.Field field = kernel.fields[element]; |
| if (field == null) { |
| - print("FOUND NULL FUNCTION: $element"); |
| + print("FOUND NULL FIELD: $element"); |
| } else { |
| return builder.buildField(field); |
| } |
| @@ -93,8 +93,7 @@ class KernelImpactBuilder extends ir.Visitor { |
| } |
| ResolutionImpact buildProcedure(ir.Procedure procedure) { |
| - if (procedure.kind == ir.ProcedureKind.Method || |
| - procedure.kind == ir.ProcedureKind.Operator) { |
| + if (procedure.kind != ir.ProcedureKind.Factory) { |
| checkFunctionTypes(procedure.function); |
| visitNode(procedure.function.body); |
| switch (procedure.function.asyncMarker) { |
| @@ -280,6 +279,13 @@ class KernelImpactBuilder extends ir.Visitor { |
| } |
| @override |
| + void visitStaticSet(ir.StaticSet node) { |
| + visitNode(node.value); |
| + Element element = astAdapter.getElement(node.target).declaration; |
| + impactBuilder.registerStaticUse(new StaticUse.staticSet(element)); |
| + } |
| + |
| + @override |
| void visitMethodInvocation(ir.MethodInvocation invocation) { |
| var receiver = invocation.receiver; |
| if (receiver is ir.VariableGet && |
| @@ -384,6 +390,31 @@ class KernelImpactBuilder extends ir.Visitor { |
| impactBuilder.registerDynamicUse(new DynamicUse(Selectors.moveNext, null)); |
| } |
| + @override |
| + void visitTryCatch(ir.TryCatch node) { |
| + visitNode(node.body); |
| + visitNodes(node.catches); |
| + } |
| + |
| + @override |
| + void visitCatch(ir.Catch node) { |
| + impactBuilder.registerFeature(Feature.CATCH_STATEMENT); |
| + visitNode(node.exception); |
| + if (node.stackTrace != null) { |
| + impactBuilder.registerFeature(Feature.STACK_TRACE_IN_CATCH); |
| + } |
| + if (node.guard is! ir.DynamicType) { |
| + impactBuilder.registerTypeUse( |
| + new TypeUse.catchType(astAdapter.getDartType(node.guard))); |
| + } |
| + visitNode(node.body); |
| + } |
| + |
| + @override |
| + void visitTryFinally(ir.TryFinally node) { |
| + visitNode(node.body); |
|
Harry Terkelsen
2016/09/27 17:12:37
also visit the finalizer
Johnni Winther
2016/09/30 07:59:04
Done.
|
| + } |
| + |
| // TODO(johnniwinther): Make this throw and visit child nodes explicitly |
| // instead to ensure that we don't visit unwanted parts of the ir. |
| @override |