| 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 b8139287ebf3e8c576a5bf41570ef71a7b3306b9..ed34fdb587504032cd2316ee2944579e8a1a6255 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);
|
| @@ -361,8 +357,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
|
| .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);
|
| }
|
| }
|
| @@ -383,8 +378,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);
|
| @@ -438,7 +432,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;
|
| @@ -605,21 +604,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;
|
| @@ -708,7 +699,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);
|
| @@ -749,7 +740,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>[];
|
|
|
| @@ -757,9 +748,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);
|
| + HInstruction uriConstant = graph.addConstantString(uri, closedWorld);
|
| _pushStaticInvocation(
|
| _commonElements.checkDeferredIsLoaded,
|
| [prefixConstant, uriConstant],
|
| @@ -1364,7 +1354,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;
|
| @@ -2095,8 +2085,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);
|
| @@ -3440,7 +3429,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);
|
| @@ -3452,7 +3441,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);
|
|
|