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

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

Issue 12414007: Cleanup generation of type argument representations. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 9 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/_internal/compiler/implementation/ssa/builder.dart
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
index db2fca9cafd308763cce86dba34e3d53bf77e1b5..8abb5528b5cba414ad7588f1dd1b067011ce4f4c 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
@@ -2588,28 +2588,27 @@ class SsaBuilder extends ResolvedVisitor implements Visitor {
// TODO(karlklose): change construction of the representations to be GVN'able
// (dartbug.com/7182).
- List<HInstruction> buildTypeArgumentRepresentations(DartType type) {
+ HInstruction buildTypeArgumentRepresentations(DartType type) {
// Compute the representation of the type arguments, including access
// to the runtime type information for type variables as instructions.
- HInstruction representations;
if (type.kind == TypeKind.TYPE_VARIABLE) {
- return <HInstruction>[addTypeVariableReference(type)];
+ return new HLiteralList(<HInstruction>[addTypeVariableReference(type)]);
} else {
assert(type.element.isClass());
- List<HInstruction> arguments = <HInstruction>[];
InterfaceType interface = type;
+ List<HInstruction> inputs = <HInstruction>[];
+ bool first = true;
+ List<String> templates = <String>[];
for (DartType argument in interface.typeArguments) {
- List<HInstruction> inputs = <HInstruction>[];
- String template = rti.getTypeRepresentation(argument, (variable) {
+ templates.add(rti.getTypeRepresentation(argument, (variable) {
HInstruction runtimeType = addTypeVariableReference(variable);
inputs.add(runtimeType);
- });
- HInstruction representation =
- createForeign(template, HType.READABLE_ARRAY, inputs);
- add(representation);
- arguments.add(representation);
+ }));
}
ngeoffray 2013/03/07 10:13:57 Move the code below in the else part. Or just remo
karlklose 2013/03/07 11:22:18 It is in the else part.
- return arguments;
+ String template = '[${templates.join(', ')}]';
+ HInstruction representation =
+ createForeign(template, HType.READABLE_ARRAY, inputs);
+ return representation;
}
}
@@ -2649,9 +2648,6 @@ class SsaBuilder extends ResolvedVisitor implements Visitor {
HInstruction instruction;
if (type.kind == TypeKind.TYPE_VARIABLE) {
- List<HInstruction> representations =
- buildTypeArgumentRepresentations(type);
- assert(representations.length == 1);
HInstruction runtimeType = addTypeVariableReference(type);
Element helper = backend.getGetObjectIsSubtype();
HInstruction helperCall = new HStatic(helper);
@@ -2669,8 +2665,9 @@ class SsaBuilder extends ResolvedVisitor implements Visitor {
Element helper = backend.getCheckArguments();
HInstruction helperCall = new HStatic(helper);
add(helperCall);
- List<HInstruction> representations =
+ HInstruction representations =
buildTypeArgumentRepresentations(type);
+ add(representations);
Element element = type.element;
String substitution = backend.namer.substitutionName(element);
if (backend.emitter.nativeEmitter.requiresNativeIsCheck(element)) {
@@ -2678,13 +2675,11 @@ class SsaBuilder extends ResolvedVisitor implements Visitor {
}
HInstruction fieldGet =
createForeign('#.$substitution', HType.UNKNOWN, [expression]);
- HInstruction representationList = new HLiteralList(representations);
add(fieldGet);
- add(representationList);
List<HInstruction> inputs = <HInstruction>[helperCall,
fieldGet,
typeInfo,
- representationList];
+ representations];
push(new HInvokeStatic(inputs, HType.UNKNOWN));
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698