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

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

Issue 2563443007: Reduce use of Compiler.closedWorld (Closed)
Patch Set: Created 4 years 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/kernel_string_builder.dart ('k') | pkg/compiler/lib/src/ssa/nodes.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/ssa/locals_handler.dart
diff --git a/pkg/compiler/lib/src/ssa/locals_handler.dart b/pkg/compiler/lib/src/ssa/locals_handler.dart
index 0eca03abf413c2eec8fb7fb40b926dd123457727..d6e6745cb56d88a8e451a607bf3af4b855412611 100644
--- a/pkg/compiler/lib/src/ssa/locals_handler.dart
+++ b/pkg/compiler/lib/src/ssa/locals_handler.dart
@@ -70,6 +70,10 @@ class LocalsHandler {
? null
: instanceType;
+ ClosedWorld get closedWorld => builder.closedWorld;
+
+ CommonMasks get commonMasks => closedWorld.commonMasks;
+
/// Substituted type variables occurring in [type] into the context of
/// [contextClass].
DartType substInContext(DartType type) {
@@ -111,9 +115,8 @@ class LocalsHandler {
HInstruction createBox() {
// TODO(floitsch): Clean up this hack. Should we create a box-object by
// just creating an empty object literal?
- JavaScriptBackend backend = _compiler.backend;
HInstruction box = new HForeignCode(
- js.js.parseForeignJS('{}'), backend.nonNullType, <HInstruction>[],
+ js.js.parseForeignJS('{}'), commonMasks.nonNullType, <HInstruction>[],
nativeBehavior: native.NativeBehavior.PURE_ALLOCATION);
builder.add(box);
return box;
@@ -131,8 +134,7 @@ class LocalsHandler {
if (element != null && element.isGenerativeConstructorBody) {
// The box is passed as a parameter to a generative
// constructor body.
- JavaScriptBackend backend = _compiler.backend;
- box = builder.addParameter(scopeData.boxElement, backend.nonNullType);
+ box = builder.addParameter(scopeData.boxElement, commonMasks.nonNullType);
} else {
box = createBox();
}
@@ -222,7 +224,7 @@ class LocalsHandler {
if (closureData.isClosure) {
// Inside closure redirect references to itself to [:this:].
HThis thisInstruction =
- new HThis(closureData.thisLocal, backend.nonNullType);
+ new HThis(closureData.thisLocal, commonMasks.nonNullType);
builder.graph.thisInstruction = thisInstruction;
builder.graph.entry.addAtEntry(thisInstruction);
updateLocal(closureData.closureElement, thisInstruction);
@@ -267,7 +269,6 @@ class LocalsHandler {
new SyntheticLocal('receiver', executableContext);
// Unlike `this`, receiver is nullable since direct calls to generative
// constructor call the constructor with `null`.
- ClosedWorld closedWorld = _compiler.closedWorld;
HParameterValue value =
new HParameterValue(parameter, new TypeMask.exact(cls, closedWorld));
builder.graph.explicitReceiverParameter = value;
@@ -325,7 +326,7 @@ class LocalsHandler {
ClosureFieldElement redirect = redirectionMapping[local];
HInstruction receiver = readLocal(closureData.closureElement);
TypeMask type = local is BoxLocal
- ? (_compiler.backend as JavaScriptBackend).nonNullType
+ ? commonMasks.nonNullType
: getTypeOfCapturedVariable(redirect);
HInstruction fieldGet = new HFieldGet(redirect, receiver, type);
builder.add(fieldGet);
@@ -346,10 +347,7 @@ class LocalsHandler {
assert(isUsedInTryOrGenerator(local));
HLocalValue localValue = getLocal(local);
HInstruction instruction = new HLocalGet(
- local,
- localValue,
- (_compiler.backend as JavaScriptBackend).dynamicType,
- sourceInformation);
+ local, localValue, commonMasks.dynamicType, sourceInformation);
builder.add(instruction);
return instruction;
}
@@ -377,8 +375,7 @@ class LocalsHandler {
}
return activationVariables.putIfAbsent(local, () {
- JavaScriptBackend backend = _compiler.backend;
- HLocalValue localValue = new HLocalValue(local, backend.nonNullType)
+ HLocalValue localValue = new HLocalValue(local, commonMasks.nonNullType)
..sourceInformation = sourceInformation;
builder.graph.entry.addAtExit(localValue);
return localValue;
@@ -489,7 +486,7 @@ class LocalsHandler {
// We know 'this' cannot be modified.
if (local != closureData.thisLocal) {
HPhi phi =
- new HPhi.singleInput(local, instruction, backend.dynamicType);
+ new HPhi.singleInput(local, instruction, commonMasks.dynamicType);
loopEntry.addPhi(phi);
directLocals[local] = phi;
} else {
@@ -546,7 +543,6 @@ class LocalsHandler {
// variable cannot be alive outside the block. Note: this is only
// true for nodes where we do joins.
Map<Local, HInstruction> joinedLocals = new Map<Local, HInstruction>();
- JavaScriptBackend backend = _compiler.backend;
otherLocals.directLocals.forEach((Local local, HInstruction instruction) {
// We know 'this' cannot be modified.
if (local == closureData.thisLocal) {
@@ -558,8 +554,8 @@ class LocalsHandler {
if (identical(instruction, mine)) {
joinedLocals[local] = instruction;
} else {
- HInstruction phi = new HPhi.manyInputs(
- local, <HInstruction>[mine, instruction], backend.dynamicType);
+ HInstruction phi = new HPhi.manyInputs(local,
+ <HInstruction>[mine, instruction], commonMasks.dynamicType);
joinBlock.addPhi(phi);
joinedLocals[local] = phi;
}
@@ -579,10 +575,9 @@ class LocalsHandler {
if (localsHandlers.length == 1) return localsHandlers[0];
Map<Local, HInstruction> joinedLocals = new Map<Local, HInstruction>();
HInstruction thisValue = null;
- JavaScriptBackend backend = _compiler.backend;
directLocals.forEach((Local local, HInstruction instruction) {
if (local != closureData.thisLocal) {
- HPhi phi = new HPhi.noInputs(local, backend.dynamicType);
+ HPhi phi = new HPhi.noInputs(local, commonMasks.dynamicType);
joinedLocals[local] = phi;
joinBlock.addPhi(phi);
} else {
@@ -625,17 +620,14 @@ class LocalsHandler {
if (result == null) {
ThisLocal local = closureData.thisLocal;
ClassElement cls = local.enclosingClass;
- ClosedWorld closedWorld = _compiler.closedWorld;
if (closedWorld.isUsedAsMixin(cls)) {
// If the enclosing class is used as a mixin, [:this:] can be
// of the class that mixins the enclosing class. These two
// classes do not have a subclass relationship, so, for
// simplicity, we mark the type as an interface type.
- result =
- new TypeMask.nonNullSubtype(cls.declaration, _compiler.closedWorld);
+ result = new TypeMask.nonNullSubtype(cls.declaration, closedWorld);
} else {
- result = new TypeMask.nonNullSubclass(
- cls.declaration, _compiler.closedWorld);
+ result = new TypeMask.nonNullSubclass(cls.declaration, closedWorld);
}
cachedTypeOfThis = result;
}
« no previous file with comments | « pkg/compiler/lib/src/ssa/kernel_string_builder.dart ('k') | pkg/compiler/lib/src/ssa/nodes.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698