| Index: pkg/compiler/lib/src/ssa/builder_kernel.dart
|
| diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
|
| index cd6527f02e6ec077f271d4c689fafd9a8211a443..429aeffc2d22c729726b2119425b3d8e856c7c13 100644
|
| --- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
|
| +++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
|
| @@ -603,7 +603,7 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
|
| closureToClassMapper.getMemberMap(astElement);
|
| localsHandler.closureData = newClosureData;
|
| if (resolvedAst.kind == ResolvedAstKind.PARSED) {
|
| - localsHandler.enterScope(resolvedAst.node,
|
| + localsHandler.enterScope(newClosureData.capturingScopes[resolvedAst.node],
|
| forGenerativeConstructorBody: astElement.isGenerativeConstructorBody);
|
| }
|
| inlinedFrom(astElement, () {
|
| @@ -623,7 +623,19 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
|
| /// Builds a SSA graph for FunctionNodes, found in FunctionExpressions and
|
| /// Procedures.
|
| void buildFunctionNode(ir.FunctionNode functionNode) {
|
| - openFunction();
|
| + Map<Local, TypeMask> parameterMap = <Local, TypeMask>{};
|
| +
|
| + void handleParameter(ir.VariableDeclaration node) {
|
| + Local local = _localsMap.getLocal(node);
|
| + parameterMap[local] = _typeInferenceMap.getInferredTypeOfParameter(local);
|
| + }
|
| +
|
| + functionNode.positionalParameters.forEach(handleParameter);
|
| + functionNode.namedParameters.toList()
|
| + ..sort(namedOrdering)
|
| + ..forEach(handleParameter);
|
| +
|
| + openFunction(parameterMap);
|
| ir.TreeNode parent = functionNode.parent;
|
| if (parent is ir.Procedure && parent.kind == ir.ProcedureKind.Factory) {
|
| _addClassTypeVariablesIfNeeded(functionNode.parent);
|
| @@ -670,11 +682,15 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
|
| }
|
| }
|
|
|
| - void openFunction() {
|
| + void openFunction(
|
| + [Map<Local, TypeMask> parameters = const <Local, TypeMask>{}]) {
|
| HBasicBlock block = graph.addNewBlock();
|
| open(graph.entry);
|
|
|
| - localsHandler.startFunction(targetElement, functionNode,
|
| + ClosureClassMap closureData =
|
| + closureToClassMapper.getMemberMap(targetElement);
|
| + localsHandler.startFunction(targetElement, closureData,
|
| + closureData.capturingScopes[functionNode], parameters,
|
| isGenerativeConstructorBody: _targetIsConstructorBody);
|
| close(new HGoto()).addSuccessor(block);
|
|
|
|
|