Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Unified Diff: pkg/compiler/lib/src/ssa/builder_kernel.dart

Issue 2968383002: Add ConstructorBodyEntity (Closed)
Patch Set: Skip non-live constructor bodies Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/compiler/lib/src/ssa/builder.dart ('k') | pkg/compiler/lib/src/ssa/graph_builder.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « pkg/compiler/lib/src/ssa/builder.dart ('k') | pkg/compiler/lib/src/ssa/graph_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698