Chromium Code Reviews| 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 b2d206e4701cc92693e910865b0d61cd2e2d185b..3b0b165d22946a8d84ee54ae9b8008ccaeeb715d 100644 |
| --- a/pkg/compiler/lib/src/ssa/builder_kernel.dart |
| +++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart |
| @@ -16,10 +16,11 @@ import '../constants/values.dart' |
| InterceptorConstantValue, |
| StringConstantValue, |
| TypeConstantValue; |
| -import '../elements/elements.dart'; |
| +import '../elements/elements.dart' show ErroneousElement; |
| import '../elements/entities.dart'; |
| import '../elements/jumps.dart'; |
| -import '../elements/resolution_types.dart'; |
| +import '../elements/resolution_types.dart' |
| + show MalformedType, MethodTypeVariableType; |
| import '../elements/types.dart'; |
| import '../io/source_information.dart'; |
| import '../js/js.dart' as js; |
| @@ -49,7 +50,6 @@ import 'type_builder.dart'; |
| class KernelSsaGraphBuilder extends ir.Visitor |
| with GraphBuilder, SsaBuilderFieldMixin { |
| final ir.Node target; |
| - final bool _targetIsConstructorBody; |
| final MemberEntity targetElement; |
| /// The root node of [targetElement]. This is used as the key into the |
| @@ -84,7 +84,8 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| JavaScriptBackend get backend => compiler.backend; |
| @override |
| - TreeElements get elements => astAdapter.elements; |
| + TreeElements get elements => |
| + throw new UnsupportedError('KernelSsaGraphBuilder.elements'); |
| SourceInformationBuilder sourceInformationBuilder; |
| final KernelToElementMapForBuilding _elementMap; |
| @@ -114,9 +115,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| this.closureDataLookup, |
| // TODO(het): Should sourceInformationBuilder be in GraphBuilder? |
| this.sourceInformationBuilder, |
| - this.functionNode, |
| - {bool targetIsConstructorBody: false}) |
| - : this._targetIsConstructorBody = targetIsConstructorBody { |
| + this.functionNode) { |
| this.loopHandler = new KernelLoopHandler(this); |
| typeBuilder = new TypeBuilder(this); |
| graph.element = targetElement; |
| @@ -127,9 +126,6 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| _targetStack.add(targetElement); |
| } |
| - @deprecated // Use [_elementMap] instead. |
| - KernelAstAdapter get astAdapter => _elementMap; |
| - |
| CommonElements get _commonElements => _elementMap.commonElements; |
| HGraph build() { |
| @@ -149,7 +145,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| } |
| buildField(target); |
| } else if (target is ir.Constructor) { |
| - if (_targetIsConstructorBody) { |
| + if (targetElement is ConstructorBodyEntity) { |
| buildConstructorBody(target); |
| } else { |
| buildConstructor(target); |
| @@ -203,7 +199,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| HInstruction popBoolified() { |
| HInstruction value = pop(); |
| if (typeBuilder.checkOrTrustTypes) { |
| - ResolutionInterfaceType type = commonElements.boolType; |
| + InterfaceType type = commonElements.boolType; |
| return typeBuilder.potentiallyCheckOrTrustType(value, type, |
| kind: HTypeConversion.BOOLEAN_CONVERSION_CHECK); |
| } |
| @@ -330,7 +326,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| // Pass uncaptured arguments first, captured arguments in a box, then type |
| // arguments. |
| - ConstructorElement constructorElement = _elementMap.getConstructor(body); |
| + ConstructorEntity constructorElement = _elementMap.getConstructor(body); |
| void handleParameter(ir.VariableDeclaration node) { |
| Local parameter = localsMap.getLocal(node); |
| @@ -360,8 +356,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| if (backend.rtiNeed.classNeedsRti(_elementMap.getClass(currentClass))) { |
| for (ir.DartType typeParameter in currentClass.thisType.typeArguments) { |
| HInstruction argument = localsHandler.readLocal(localsHandler |
| - .getTypeVariableAsLocal(_elementMap.getDartType(typeParameter) |
| - as ResolutionTypeVariableType)); |
| + .getTypeVariableAsLocal(_elementMap.getDartType(typeParameter))); |
| bodyCallInputs.add(argument); |
| } |
| } |
| @@ -382,8 +377,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| void _invokeConstructorBody( |
| ir.Constructor constructor, List<HInstruction> inputs) { |
| // TODO(sra): Inline the constructor body. |
| - MemberEntity constructorBody = |
| - astAdapter.getConstructorBodyEntity(constructor); |
| + MemberEntity constructorBody = _elementMap.getConstructorBody(constructor); |
| HInvokeConstructorBody invoke = new HInvokeConstructorBody( |
| constructorBody, inputs, commonMasks.nonNullType); |
| add(invoke); |
| @@ -437,7 +431,12 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| ir.Constructor constructor, |
| List<ir.Constructor> constructorChain, |
| Map<FieldEntity, HInstruction> fieldValues) { |
| - assert(_elementMap.getConstructor(constructor) == localsMap.currentMember); |
| + assert( |
| + _elementMap.getConstructor(constructor) == localsMap.currentMember, |
| + failedAt( |
| + localsMap.currentMember, |
| + 'Expected ${localsMap.currentMember} ' |
| + 'but found ${_elementMap.getConstructor(constructor)}.')); |
| constructorChain.add(constructor); |
| var foundSuperOrRedirectCall = false; |
| @@ -604,21 +603,13 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| ..forEach(handleParameter); |
| // Set the locals handler state as if we were inlining the constructor. |
| - ConstructorEntity astElement = _elementMap.getConstructor(constructor); |
| + ConstructorEntity element = _elementMap.getConstructor(constructor); |
| ClosureRepresentationInfo oldScopeInfo = localsHandler.scopeInfo; |
| ClosureRepresentationInfo newScopeInfo = |
| - closureDataLookup.getScopeInfo(astElement); |
| - if (astElement is ConstructorElement) { |
| - // TODO(redemption): Support constructor (body) entities. |
| - ResolvedAst resolvedAst = astElement.resolvedAst; |
| - localsHandler.scopeInfo = newScopeInfo; |
| - if (resolvedAst.kind == ResolvedAstKind.PARSED) { |
| - localsHandler.enterScope(closureDataLookup.getClosureScope(astElement), |
| - forGenerativeConstructorBody: |
| - astElement.isGenerativeConstructorBody); |
| - } |
| - } |
| - inlinedFrom(astElement, () { |
| + closureDataLookup.getScopeInfo(element); |
| + localsHandler.scopeInfo = newScopeInfo; |
| + localsHandler.enterScope(closureDataLookup.getClosureScope(element)); |
| + inlinedFrom(element, () { |
| _buildInitializers(constructor, constructorChain, fieldValues); |
| }); |
| localsHandler.scopeInfo = oldScopeInfo; |
| @@ -707,7 +698,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| closureDataLookup.getScopeInfo(targetElement), |
| closureDataLookup.getClosureScope(targetElement), |
| parameterMap, |
| - isGenerativeConstructorBody: _targetIsConstructorBody); |
| + isGenerativeConstructorBody: targetElement is ConstructorBodyEntity); |
| close(new HGoto()).addSuccessor(block); |
| open(block); |
| @@ -748,7 +739,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| // TODO(sra): Re-implement type builder using Kernel types and the |
| // `target` for context. |
| @override |
| - MemberElement get sourceElement => _targetStack.last; |
| + MemberEntity get sourceElement => _targetStack.last; |
| List<MemberEntity> _targetStack = <MemberEntity>[]; |
| @@ -756,9 +747,8 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| void visitCheckLibraryIsLoaded(ir.CheckLibraryIsLoaded checkLoad) { |
| HInstruction prefixConstant = |
| graph.addConstantString(checkLoad.import.name, closedWorld); |
| - PrefixElement prefixElement = astAdapter.getElement(checkLoad.import); |
| - HInstruction uriConstant = graph.addConstantString( |
| - prefixElement.deferredImport.uri.toString(), closedWorld); |
| + String uri = _elementMap.getDeferredUri(checkLoad.import); |
|
Siggi Cherem (dart-lang)
2017/07/07 20:00:25
I think in this case we don't need the extra metho
Johnni Winther
2017/07/10 14:11:34
They're not the same in rasta :(
Added a TODO on
Siggi Cherem (dart-lang)
2017/07/10 16:39:13
mmm - what is the actual difference? Is it that we
Johnni Winther
2017/07/11 08:09:17
One is relative and one is absolute.
I think long
|
| + HInstruction uriConstant = graph.addConstantString(uri, closedWorld); |
| _pushStaticInvocation( |
| _commonElements.checkDeferredIsLoaded, |
| [prefixConstant, uriConstant], |
| @@ -1363,7 +1353,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| return; |
| } |
| - ResolutionDartType type = _elementMap.getDartType(asExpression.type); |
| + DartType type = _elementMap.getDartType(asExpression.type); |
| if (type.isMalformed) { |
| if (type is MalformedType) { |
| ErroneousElement element = type.element; |
| @@ -2094,8 +2084,7 @@ class KernelSsaGraphBuilder extends ir.Visitor |
| // typedefs), look-up or construct a reified type representation and convert |
| // to a RuntimeType. |
| - // TODO(sra): Convert the type logic here to use ir.DartType. |
| - ResolutionDartType dartType = _elementMap.getDartType(type); |
| + DartType dartType = _elementMap.getDartType(type); |
| dartType = localsHandler.substInContext(dartType); |
| HInstruction value = typeBuilder |
| .analyzeTypeArgument(dartType, sourceElement, sourceInformation: null); |
| @@ -3439,7 +3428,7 @@ class TryCatchFinallyBuilder { |
| ir.Catch catchBlock = tryCatch.catches[catchesIndex]; |
| catchesIndex++; |
| if (catchBlock.exception != null) { |
| - LocalVariableElement exceptionVariable = |
| + Local exceptionVariable = |
| kernelBuilder.localsMap.getLocal(catchBlock.exception); |
| kernelBuilder.localsHandler |
| .updateLocal(exceptionVariable, unwrappedException); |
| @@ -3451,7 +3440,7 @@ class TryCatchFinallyBuilder { |
| kernelBuilder._typeInferenceMap.getReturnTypeOf( |
| kernelBuilder._commonElements.traceFromException)); |
| HInstruction traceInstruction = kernelBuilder.pop(); |
| - LocalVariableElement traceVariable = |
| + Local traceVariable = |
| kernelBuilder.localsMap.getLocal(catchBlock.stackTrace); |
| kernelBuilder.localsHandler |
| .updateLocal(traceVariable, traceInstruction); |