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

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

Issue 10908068: Better tracking of provided types at call sites (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review comments Created 8 years, 3 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: lib/compiler/implementation/ssa/builder.dart
diff --git a/lib/compiler/implementation/ssa/builder.dart b/lib/compiler/implementation/ssa/builder.dart
index 8a2d33a4108cb9ced2661e73ee6a18dee2b61b65..c923ce3d8d121ac8e7448c076fc6f941bf3d777d 100644
--- a/lib/compiler/implementation/ssa/builder.dart
+++ b/lib/compiler/implementation/ssa/builder.dart
@@ -178,17 +178,29 @@ class SsaBuilderTask extends CompilerTask {
// If there is an estimate of the parameter types assume these types when
// compiling.
+ OptionalParameterTypes defaultValueTypes = null;
+ FunctionSignature signature = element.computeSignature(compiler);
+ if (signature.optionalParameterCount > 0) {
+ defaultValueTypes =
+ new OptionalParameterTypes(signature.optionalParameterCount);
+ int index = 0;
+ signature.forEachOptionalParameter((Element parameter) {
+ Constant defaultValue = compiler.compileVariable(parameter);
+ HType type = HGraph.mapConstantTypeToSsaType(defaultValue);
+ defaultValueTypes.update(index, parameter.name, type);
+ index++;
+ });
+ }
HTypeList parameterTypes =
- backend.optimisticParameterTypes(
- element);
+ backend.optimisticParameterTypes(element, defaultValueTypes);
if (!parameterTypes.allUnknown) {
- FunctionSignature signature = element.computeSignature(compiler);
int i = 0;
signature.forEachParameter((Element param) {
builder.parameters[param].guaranteedType = parameterTypes[i++];
});
}
- backend.registerParameterTypesOptimization(element, parameterTypes);
+ backend.registerParameterTypesOptimization(
+ element, parameterTypes, defaultValueTypes);
if (compiler.tracer.enabled) {
String name;

Powered by Google App Engine
This is Rietveld 408576698