| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import 'dart:collection'; | 5 import 'dart:collection'; |
| 6 | 6 |
| 7 import 'package:js_runtime/shared/embedded_names.dart'; | 7 import 'package:js_runtime/shared/embedded_names.dart'; |
| 8 | 8 |
| 9 import '../closure.dart'; | 9 import '../closure.dart'; |
| 10 import '../common.dart'; | 10 import '../common.dart'; |
| (...skipping 818 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 829 * updated in the [localsHandler]. This function creates such an element and | 829 * updated in the [localsHandler]. This function creates such an element and |
| 830 * stores it in the [returnLocal] field. | 830 * stores it in the [returnLocal] field. |
| 831 */ | 831 */ |
| 832 void setupStateForInlining( | 832 void setupStateForInlining( |
| 833 MethodElement function, List<HInstruction> compiledArguments, | 833 MethodElement function, List<HInstruction> compiledArguments, |
| 834 {ResolutionInterfaceType instanceType}) { | 834 {ResolutionInterfaceType instanceType}) { |
| 835 ResolvedAst resolvedAst = function.resolvedAst; | 835 ResolvedAst resolvedAst = function.resolvedAst; |
| 836 assert(resolvedAst != null); | 836 assert(resolvedAst != null); |
| 837 localsHandler = new LocalsHandler(this, function, function.memberContext, | 837 localsHandler = new LocalsHandler(this, function, function.memberContext, |
| 838 function.contextClass, instanceType, nativeData, interceptorData); | 838 function.contextClass, instanceType, nativeData, interceptorData); |
| 839 localsHandler.closureData = | 839 localsHandler.scopeInfo = closureDataLookup.getScopeInfo(function); |
| 840 closureDataLookup.getClosureRepresentationInfo(function); | |
| 841 returnLocal = | 840 returnLocal = |
| 842 new SyntheticLocal("result", function, function.memberContext); | 841 new SyntheticLocal("result", function, function.memberContext); |
| 843 localsHandler.updateLocal(returnLocal, graph.addConstantNull(closedWorld)); | 842 localsHandler.updateLocal(returnLocal, graph.addConstantNull(closedWorld)); |
| 844 | 843 |
| 845 inTryStatement = false; // TODO(lry): why? Document. | 844 inTryStatement = false; // TODO(lry): why? Document. |
| 846 | 845 |
| 847 int argumentIndex = 0; | 846 int argumentIndex = 0; |
| 848 if (function.isInstanceMember) { | 847 if (function.isInstanceMember) { |
| 849 localsHandler.updateLocal(localsHandler.closureData.thisLocal, | 848 localsHandler.updateLocal(localsHandler.scopeInfo.thisLocal, |
| 850 compiledArguments[argumentIndex++]); | 849 compiledArguments[argumentIndex++]); |
| 851 } | 850 } |
| 852 | 851 |
| 853 FunctionSignature signature = function.functionSignature; | 852 FunctionSignature signature = function.functionSignature; |
| 854 signature.orderedForEachParameter((_parameter) { | 853 signature.orderedForEachParameter((_parameter) { |
| 855 ParameterElement parameter = _parameter; | 854 ParameterElement parameter = _parameter; |
| 856 HInstruction argument = compiledArguments[argumentIndex++]; | 855 HInstruction argument = compiledArguments[argumentIndex++]; |
| 857 localsHandler.updateLocal(parameter, argument); | 856 localsHandler.updateLocal(parameter, argument); |
| 858 }); | 857 }); |
| 859 | 858 |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 998 InitializingFormalElement fieldParameterElement = parameter; | 997 InitializingFormalElement fieldParameterElement = parameter; |
| 999 fieldValues[fieldParameterElement.fieldElement] = argument; | 998 fieldValues[fieldParameterElement.fieldElement] = argument; |
| 1000 } | 999 } |
| 1001 }); | 1000 }); |
| 1002 | 1001 |
| 1003 // Build the initializers in the context of the new constructor. | 1002 // Build the initializers in the context of the new constructor. |
| 1004 ResolvedAst oldResolvedAst = resolvedAst; | 1003 ResolvedAst oldResolvedAst = resolvedAst; |
| 1005 resolvedAst = callee.resolvedAst; | 1004 resolvedAst = callee.resolvedAst; |
| 1006 final oldElementInferenceResults = elementInferenceResults; | 1005 final oldElementInferenceResults = elementInferenceResults; |
| 1007 elementInferenceResults = globalInferenceResults.resultOfMember(callee); | 1006 elementInferenceResults = globalInferenceResults.resultOfMember(callee); |
| 1008 ClosureRepresentationInfo oldClosureData = localsHandler.closureData; | 1007 ScopeInfo oldScopeInfo = localsHandler.scopeInfo; |
| 1009 ClosureRepresentationInfo newClosureData = | 1008 ScopeInfo newScopeInfo = closureDataLookup.getScopeInfo(callee); |
| 1010 closureDataLookup.getClosureRepresentationInfo(callee); | 1009 localsHandler.scopeInfo = newScopeInfo; |
| 1011 localsHandler.closureData = newClosureData; | |
| 1012 if (resolvedAst.kind == ResolvedAstKind.PARSED) { | 1010 if (resolvedAst.kind == ResolvedAstKind.PARSED) { |
| 1013 localsHandler.enterScope( | 1011 localsHandler.enterScope( |
| 1014 closureDataLookup.getClosureAnalysisInfo(resolvedAst.node), | 1012 closureDataLookup.getClosureAnalysisInfo(resolvedAst.node), |
| 1015 forGenerativeConstructorBody: callee.isGenerativeConstructorBody); | 1013 forGenerativeConstructorBody: callee.isGenerativeConstructorBody); |
| 1016 } | 1014 } |
| 1017 buildInitializers(callee, constructorResolvedAsts, fieldValues); | 1015 buildInitializers(callee, constructorResolvedAsts, fieldValues); |
| 1018 localsHandler.closureData = oldClosureData; | 1016 localsHandler.scopeInfo = oldScopeInfo; |
| 1019 resolvedAst = oldResolvedAst; | 1017 resolvedAst = oldResolvedAst; |
| 1020 elementInferenceResults = oldElementInferenceResults; | 1018 elementInferenceResults = oldElementInferenceResults; |
| 1021 }); | 1019 }); |
| 1022 } | 1020 } |
| 1023 | 1021 |
| 1024 void buildInitializers( | 1022 void buildInitializers( |
| 1025 ConstructorElement constructor, | 1023 ConstructorElement constructor, |
| 1026 List<ResolvedAst> constructorResolvedAsts, | 1024 List<ResolvedAst> constructorResolvedAsts, |
| 1027 Map<Element, HInstruction> fieldValues) { | 1025 Map<Element, HInstruction> fieldValues) { |
| 1028 assert( | 1026 assert( |
| (...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1419 | 1417 |
| 1420 Map<Local, TypeMask> parameters = <Local, TypeMask>{}; | 1418 Map<Local, TypeMask> parameters = <Local, TypeMask>{}; |
| 1421 if (element is MethodElement) { | 1419 if (element is MethodElement) { |
| 1422 element.functionSignature.orderedForEachParameter((_parameter) { | 1420 element.functionSignature.orderedForEachParameter((_parameter) { |
| 1423 ParameterElement parameter = _parameter; | 1421 ParameterElement parameter = _parameter; |
| 1424 parameters[parameter] = TypeMaskFactory.inferredTypeForParameter( | 1422 parameters[parameter] = TypeMaskFactory.inferredTypeForParameter( |
| 1425 parameter, globalInferenceResults); | 1423 parameter, globalInferenceResults); |
| 1426 }); | 1424 }); |
| 1427 } | 1425 } |
| 1428 | 1426 |
| 1429 ClosureRepresentationInfo closureData = | 1427 localsHandler.startFunction( |
| 1430 closureDataLookup.getClosureRepresentationInfo(element); | 1428 element, |
| 1431 localsHandler.startFunction(element, closureData, | 1429 closureDataLookup.getScopeInfo(element), |
| 1432 closureDataLookup.getClosureAnalysisInfo(node), parameters, | 1430 closureDataLookup.getClosureAnalysisInfo(node), |
| 1431 parameters, |
| 1433 isGenerativeConstructorBody: element.isGenerativeConstructorBody); | 1432 isGenerativeConstructorBody: element.isGenerativeConstructorBody); |
| 1434 close(new HGoto()).addSuccessor(block); | 1433 close(new HGoto()).addSuccessor(block); |
| 1435 | 1434 |
| 1436 open(block); | 1435 open(block); |
| 1437 | 1436 |
| 1438 // Add the type parameters of the class as parameters of this method. This | 1437 // Add the type parameters of the class as parameters of this method. This |
| 1439 // must be done before adding the normal parameters, because their types | 1438 // must be done before adding the normal parameters, because their types |
| 1440 // may contain references to type variables. | 1439 // may contain references to type variables. |
| 1441 ClassElement cls = element.enclosingClass; | 1440 ClassElement cls = element.enclosingClass; |
| 1442 if ((element.isConstructor || element.isGenerativeConstructorBody) && | 1441 if ((element.isConstructor || element.isGenerativeConstructorBody) && |
| (...skipping 5406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6849 this.oldReturnLocal, | 6848 this.oldReturnLocal, |
| 6850 this.oldReturnType, | 6849 this.oldReturnType, |
| 6851 this.oldResolvedAst, | 6850 this.oldResolvedAst, |
| 6852 this.oldStack, | 6851 this.oldStack, |
| 6853 this.oldLocalsHandler, | 6852 this.oldLocalsHandler, |
| 6854 this.inTryStatement, | 6853 this.inTryStatement, |
| 6855 this.allFunctionsCalledOnce, | 6854 this.allFunctionsCalledOnce, |
| 6856 this.oldElementInferenceResults) | 6855 this.oldElementInferenceResults) |
| 6857 : super(function); | 6856 : super(function); |
| 6858 } | 6857 } |
| OLD | NEW |