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

Unified Diff: sdk/lib/_internal/compiler/implementation/ssa/builder.dart

Issue 12207081: Add a type kind to TypedSelector. A typed selector can either be (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 10 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
Index: sdk/lib/_internal/compiler/implementation/ssa/builder.dart
===================================================================
--- sdk/lib/_internal/compiler/implementation/ssa/builder.dart (revision 18249)
+++ sdk/lib/_internal/compiler/implementation/ssa/builder.dart (working copy)
@@ -303,8 +303,10 @@
// context.
ClassElement cls = element.getEnclosingClass();
DartType type = cls.computeType(builder.compiler);
- HThis thisInstruction = new HThis(closureData.thisElement,
- new HBoundedType.nonNull(type));
+ HThis thisInstruction = new HThis(
+ closureData.thisElement,
+ new HBoundedType(
+ type, isExact: false, canBeNull: false, isInterfaceType: false));
builder.graph.thisInstruction = thisInstruction;
builder.graph.entry.addAtEntry(thisInstruction);
directLocals[closureData.thisElement] = thisInstruction;
@@ -426,7 +428,11 @@
Element element = closureData.thisElement;
ClassElement cls = element.enclosingElement.getEnclosingClass();
DartType type = cls.computeType(builder.compiler);
- cachedTypeOfThis = new HBoundedType.nonNull(type);
+ cachedTypeOfThis = new HBoundedType(
+ type,
+ canBeNull: false,
+ isExact: false,
+ isInterfaceType: false);
kasperl 2013/02/11 08:18:12 This needs to take mixins into account. The type o
ngeoffray 2013/02/11 10:20:55 Done.
}
res.guaranteedType = cachedTypeOfThis;
}
@@ -4020,10 +4026,13 @@
}
HLiteralList keyValuePairs = new HLiteralList(inputs);
add(keyValuePairs);
+ DartType mapType = compiler.mapLiteralClass.computeType(compiler);
pushInvokeHelper1(backend.getMapMaker(), keyValuePairs,
kasperl 2013/02/11 08:18:12 A comment that explains why this type isn't exact
ngeoffray 2013/02/11 10:20:55 Done.
- new HType.fromBoundedType(compiler.mapClass.computeType(compiler),
+ new HType.fromBoundedType(mapType,
compiler,
- false));
+ canBeNull: false,
+ isExact: false,
+ isInterfaceType: true));
}
visitLiteralMapEntry(LiteralMapEntry node) {
@@ -4611,8 +4620,26 @@
HType mapBaseType(BaseType baseType) {
if (!baseType.isClass()) return HType.UNKNOWN;
ClassBaseType classBaseType = baseType;
- return new HType.fromBoundedType(
- classBaseType.element.computeType(compiler), compiler, false);
+ ClassElement cls = classBaseType.element;
+ // Special case the list and map classes that are used as types
+ // for literals in the type inferrer.
+ if (cls == compiler.listClass) {
+ return HType.READABLE_ARRAY;
+ } else if (cls == compiler.mapClass) {
+ return new HType.fromBoundedType(
kasperl 2013/02/11 08:18:12 How many different variants of this constructor ar
ngeoffray 2013/02/11 10:20:55 Done.
+ compiler.mapLiteralClass.computeType(compiler),
+ compiler,
+ canBeNull: false,
+ isExact: false,
+ isInterfaceType: true);
+ } else {
+ return new HType.fromBoundedType(
+ cls.computeType(compiler),
+ compiler,
+ canBeNull: false,
+ isExact: true,
+ isInterfaceType: false);
+ }
}
HType mapInferredType(ConcreteType concreteType) {
@@ -4632,7 +4659,12 @@
} else if (type == native.SpecialType.JsArray) {
return HType.READABLE_ARRAY;
} else {
- return new HType.fromBoundedType(type, compiler, false);
+ return new HType.fromBoundedType(
+ type,
+ compiler,
+ canBeNull: false,
+ isExact: false,
+ isInterfaceType: false);
}
}

Powered by Google App Engine
This is Rietveld 408576698