| 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 383276378fa7dccd62be7239094d34665964a70a..abaf5a9526baa3d838a6fa4cbbd38d3bc8a8e1e7 100644
|
| --- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
|
| +++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
|
| @@ -117,7 +117,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
|
| this.sourceInformationBuilder,
|
| this.functionNode) {
|
| this.loopHandler = new KernelLoopHandler(this);
|
| - typeBuilder = new KernelTypeBuilder(_elementMap, this);
|
| + typeBuilder = new TypeBuilder(this);
|
| graph.element = targetElement;
|
| graph.sourceInformation =
|
| sourceInformationBuilder.buildVariableDeclaration();
|
| @@ -1945,9 +1945,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
|
|
|
| /// Set the runtime type information if necessary.
|
| HInstruction _setListRuntimeTypeInfoIfNeeded(
|
| - HInstruction object, ir.ListLiteral listLiteral) {
|
| - InterfaceType type = localsHandler.substInContext(_commonElements
|
| - .listType(_elementMap.getDartType(listLiteral.typeArgument)));
|
| + HInstruction object, InterfaceType type) {
|
| if (!rtiNeed.classNeedsRti(type.element) || type.treatAsRaw) {
|
| return object;
|
| }
|
| @@ -1975,8 +1973,9 @@ class KernelSsaGraphBuilder extends ir.Visitor
|
| listInstruction =
|
| new HLiteralList(elements, commonMasks.extendableArrayType);
|
| add(listInstruction);
|
| - listInstruction =
|
| - _setListRuntimeTypeInfoIfNeeded(listInstruction, listLiteral);
|
| + InterfaceType type = localsHandler.substInContext(_commonElements
|
| + .listType(_elementMap.getDartType(listLiteral.typeArgument)));
|
| + listInstruction = _setListRuntimeTypeInfoIfNeeded(listInstruction, type);
|
| }
|
|
|
| TypeMask type = _typeInferenceMap.typeOfListLiteral(
|
| @@ -2359,6 +2358,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
|
| List<HInstruction> arguments =
|
| _visitArgumentsForStaticTarget(target.function, invocation.arguments);
|
|
|
| + // TODO(johnniwinther): Move factory calls to a helper function?
|
| if (function is ConstructorEntity && function.isFactoryConstructor) {
|
| if (function.isExternal && function.isFromEnvironmentConstructor) {
|
| if (invocation.isConst) {
|
| @@ -2376,12 +2376,34 @@ class KernelSsaGraphBuilder extends ir.Visitor
|
|
|
| // Factory constructors take type parameters; other static methods ignore
|
| // them.
|
| +
|
| if (closedWorld.rtiNeed.classNeedsRti(function.enclosingClass)) {
|
| _addTypeArguments(arguments, invocation.arguments);
|
| }
|
| - }
|
|
|
| - _pushStaticInvocation(function, arguments, typeMask);
|
| + _pushStaticInvocation(function, arguments, typeMask);
|
| +
|
| + bool isFixedListConstructorCall = false;
|
| + bool isGrowableListConstructorCall = false;
|
| + if (commonElements.isUnnamedListConstructor(function) &&
|
| + invocation.arguments.named.isEmpty) {
|
| + isFixedListConstructorCall =
|
| + invocation.arguments.positional.length == 1;
|
| + isGrowableListConstructorCall = invocation.arguments.positional.isEmpty;
|
| + }
|
| + bool isJSArrayTypedConstructor =
|
| + function == commonElements.jsArrayTypedConstructor;
|
| + if (rtiNeed.classNeedsRti(commonElements.listClass) &&
|
| + (isFixedListConstructorCall ||
|
| + isGrowableListConstructorCall ||
|
| + isJSArrayTypedConstructor)) {
|
| + InterfaceType type = _elementMap.createInterfaceType(
|
| + target.enclosingClass, invocation.arguments.types);
|
| + stack.add(_setListRuntimeTypeInfoIfNeeded(pop(), type));
|
| + }
|
| + } else {
|
| + _pushStaticInvocation(function, arguments, typeMask);
|
| + }
|
| }
|
|
|
| void handleInvokeStaticForeign(
|
| @@ -3502,14 +3524,3 @@ class TryCatchFinallyBuilder {
|
| kernelBuilder.inTryStatement = previouslyInTryStatement;
|
| }
|
| }
|
| -
|
| -class KernelTypeBuilder extends TypeBuilder {
|
| - KernelToElementMapForBuilding _elementMap;
|
| -
|
| - KernelTypeBuilder(this._elementMap, GraphBuilder builder) : super(builder);
|
| -
|
| - @override
|
| - InterfaceType getThisType(ClassEntity cls) {
|
| - return _elementMap.elementEnvironment.getThisType(cls);
|
| - }
|
| -}
|
|
|