Add type arguments to lists in the code generator and make them fixed length.
R=johnniwinther@google.com Review URL: https://codereview.chromium.org//1164563005
This commit is contained in:
@@ -156,8 +156,11 @@ class CodeGenerator extends tree_ir.StatementVisitor
|
||||
return name;
|
||||
}
|
||||
|
||||
List<js.Expression> visitArguments(List<tree_ir.Expression> arguments) {
|
||||
return arguments.map(visitExpression).toList();
|
||||
List<js.Expression> visitExpressionList(
|
||||
List<tree_ir.Expression> expressions) {
|
||||
return new List<js.Expression>.generate(expressions.length,
|
||||
(int index) => visitExpression(expressions[index]),
|
||||
growable: false);
|
||||
}
|
||||
|
||||
giveup(tree_ir.Node node,
|
||||
@@ -242,7 +245,7 @@ class CodeGenerator extends tree_ir.StatementVisitor
|
||||
registry.registerInstantiatedType(node.type);
|
||||
Selector selector = node.selector;
|
||||
FunctionElement target = node.target;
|
||||
List<js.Expression> arguments = visitArguments(node.arguments);
|
||||
List<js.Expression> arguments = visitExpressionList(node.arguments);
|
||||
return buildStaticInvoke(selector, target, arguments);
|
||||
}
|
||||
|
||||
@@ -269,7 +272,7 @@ class CodeGenerator extends tree_ir.StatementVisitor
|
||||
registerMethodInvoke(node);
|
||||
return js.propertyCall(visitExpression(node.receiver),
|
||||
glue.invocationName(node.selector),
|
||||
visitArguments(node.arguments));
|
||||
visitExpressionList(node.arguments));
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -277,7 +280,7 @@ class CodeGenerator extends tree_ir.StatementVisitor
|
||||
Selector selector = node.selector;
|
||||
assert(selector.isGetter || selector.isSetter || selector.isCall);
|
||||
FunctionElement target = node.target;
|
||||
List<js.Expression> arguments = visitArguments(node.arguments);
|
||||
List<js.Expression> arguments = visitExpressionList(node.arguments);
|
||||
return buildStaticInvoke(selector, target, arguments,
|
||||
sourceInformation: node.sourceInformation);
|
||||
}
|
||||
@@ -291,19 +294,19 @@ class CodeGenerator extends tree_ir.StatementVisitor
|
||||
return js.js('#.#(#)',
|
||||
[visitExpression(node.receiver),
|
||||
glue.instanceMethodName(node.target),
|
||||
visitArguments(node.arguments)]);
|
||||
visitExpressionList(node.arguments)]);
|
||||
}
|
||||
return js.js('#.#.call(#, #)',
|
||||
[glue.prototypeAccess(node.target.enclosingClass),
|
||||
glue.invocationName(node.selector),
|
||||
visitExpression(node.receiver),
|
||||
visitArguments(node.arguments)]);
|
||||
visitExpressionList(node.arguments)]);
|
||||
}
|
||||
|
||||
@override
|
||||
js.Expression visitLiteralList(tree_ir.LiteralList node) {
|
||||
registry.registerInstantiatedClass(glue.listClass);
|
||||
List<js.Expression> entries = node.values.map(visitExpression).toList();
|
||||
List<js.Expression> entries = visitExpressionList(node.values);
|
||||
return new js.ArrayInitializer(entries);
|
||||
}
|
||||
|
||||
@@ -351,8 +354,7 @@ class CodeGenerator extends tree_ir.StatementVisitor
|
||||
@override
|
||||
js.Expression visitTypeOperator(tree_ir.TypeOperator node) {
|
||||
js.Expression value = visitExpression(node.value);
|
||||
List<js.Expression> typeArguments =
|
||||
node.typeArguments.map(visitExpression).toList();
|
||||
List<js.Expression> typeArguments = visitExpressionList(node.typeArguments);
|
||||
if (!node.isTypeTest) {
|
||||
giveup(node, 'type casts not implemented.');
|
||||
}
|
||||
@@ -557,7 +559,7 @@ class CodeGenerator extends tree_ir.StatementVisitor
|
||||
|
||||
@override
|
||||
js.Expression visitCreateBox(tree_ir.CreateBox node) {
|
||||
return new js.ObjectInitializer([]);
|
||||
return new js.ObjectInitializer(const <js.Property>[]);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -570,7 +572,7 @@ class CodeGenerator extends tree_ir.StatementVisitor
|
||||
registry.registerInstantiatedClass(cls);
|
||||
js.Expression instance = new js.New(
|
||||
glue.constructorAccess(cls),
|
||||
node.arguments.map(visitExpression).toList());
|
||||
visitExpressionList(node.arguments));
|
||||
|
||||
List<tree_ir.Expression> typeInformation = node.typeInformation;
|
||||
assert(typeInformation.isEmpty ||
|
||||
@@ -578,7 +580,7 @@ class CodeGenerator extends tree_ir.StatementVisitor
|
||||
if (typeInformation.isNotEmpty) {
|
||||
FunctionElement helper = glue.getAddRuntimeTypeInformation();
|
||||
js.Expression typeArguments = new js.ArrayInitializer(
|
||||
typeInformation.map(visitExpression).toList());
|
||||
visitExpressionList(typeInformation));
|
||||
return buildStaticHelperInvocation(helper,
|
||||
<js.Expression>[instance, typeArguments]);
|
||||
} else {
|
||||
@@ -593,9 +595,9 @@ class CodeGenerator extends tree_ir.StatementVisitor
|
||||
js.Expression internalName = js.string(glue.invocationName(node.selector));
|
||||
js.Expression kind = js.number(node.selector.invocationMirrorKind);
|
||||
js.Expression arguments = new js.ArrayInitializer(
|
||||
node.arguments.map(visitExpression).toList());
|
||||
visitExpressionList(node.arguments));
|
||||
js.Expression argumentNames = new js.ArrayInitializer(
|
||||
node.selector.namedArguments.map(js.string).toList());
|
||||
node.selector.namedArguments.map(js.string).toList(growable: false));
|
||||
return buildStaticHelperInvocation(glue.createInvocationMirrorMethod,
|
||||
[name, internalName, kind, arguments, argumentNames]);
|
||||
}
|
||||
@@ -628,7 +630,8 @@ class CodeGenerator extends tree_ir.StatementVisitor
|
||||
// Read a lazily initialized field.
|
||||
registry.registerStaticUse(node.element.declaration);
|
||||
js.Expression getter = glue.isolateLazyInitializerAccess(node.element);
|
||||
return new js.Call(getter, [], sourceInformation: node.sourceInformation);
|
||||
return new js.Call(getter, <js.Expression>[],
|
||||
sourceInformation: node.sourceInformation);
|
||||
}
|
||||
// Read an eagerly initialized field.
|
||||
registry.registerStaticUse(node.element.declaration);
|
||||
@@ -678,8 +681,7 @@ class CodeGenerator extends tree_ir.StatementVisitor
|
||||
|
||||
@override
|
||||
js.Expression visitTypeExpression(tree_ir.TypeExpression node) {
|
||||
List<js.Expression> arguments =
|
||||
node.arguments.map(visitExpression).toList(growable: false);
|
||||
List<js.Expression> arguments = visitExpressionList(node.arguments);
|
||||
return glue.generateTypeRepresentation(node.dartType, arguments);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user