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

Unified Diff: compiler/java/com/google/dart/compiler/backend/js/GenerateJavascriptAST.java

Issue 9289029: Added runtime type checking to the elements of list and map literals in dartc (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 11 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: compiler/java/com/google/dart/compiler/backend/js/GenerateJavascriptAST.java
diff --git a/compiler/java/com/google/dart/compiler/backend/js/GenerateJavascriptAST.java b/compiler/java/com/google/dart/compiler/backend/js/GenerateJavascriptAST.java
index 1778ab8d32f2bf155fd909d9c877dec15f005ce3..2d315fa93f584029d7501833a97f1875f4583a2c 100644
--- a/compiler/java/com/google/dart/compiler/backend/js/GenerateJavascriptAST.java
+++ b/compiler/java/com/google/dart/compiler/backend/js/GenerateJavascriptAST.java
@@ -3308,8 +3308,14 @@ public class GenerateJavascriptAST {
@Override
public JsNode visitArrayLiteral(DartArrayLiteral x) {
+ Type elementType = x.getType().getArguments().get(0);
JsArrayLiteral jsArray = new JsArrayLiteral();
- generateAll(x.getExpressions(), jsArray.getExpressions(), JsExpression.class);
+ for (DartNode node : x.getExpressions()) {
+ JsExpression expr = (JsExpression)generate(node);
scheglov 2012/01/26 15:54:42 (JsExpression)generate(node) space is missing
zundel 2012/01/26 17:39:51 Done.
+ JsExpression checkedExpr = rtt.addTypeCheck(getCurrentClass(), expr,
+ elementType, node.getType(), node.getSourceInfo());
+ jsArray.getExpressions().add(checkedExpr);
+ }
jsArray.setSourceRef(x);
JsExpression result = rtt.maybeAddRuntimeTypeForArrayLiteral(getCurrentClass(), x, jsArray);
if (x.isConst()) {
@@ -3336,7 +3342,9 @@ public class GenerateJavascriptAST {
JsExpression assig = AstUtil.newAssignment(tmpVar.makeRef(), invoke.setSourceRef(x));
JsExpression result = assig;
for (DartMapLiteralEntry entry : x.getEntries()) {
- result = AstUtil.newSequence(result, visitMapLiteralEntry(entry, tmpVar));
+ result = AstUtil.newSequence(result,
+ visitMapLiteralEntry(entry, tmpVar,
+ x.getType().getArguments().get(1)));
scheglov 2012/01/26 15:54:42 x.getType().getArguments().get(1) can be extracted
zundel 2012/01/26 17:39:51 Done.
}
result = AstUtil.newSequence(result, tmpVar.makeRef());
if (x.isConst()) {
@@ -3345,9 +3353,10 @@ public class GenerateJavascriptAST {
return result;
}
- private JsExpression visitMapLiteralEntry(DartMapLiteralEntry x, JsName map) {
+ private JsExpression visitMapLiteralEntry(DartMapLiteralEntry x, JsName map, Type valueType) {
String addMethod = mangler.createOperatorSyntax(Token.ASSIGN_INDEX);
JsExpression value = (JsExpression) generate(x.getValue());
+ value = rtt.addTypeCheck(getCurrentClass(), value, valueType, x.getType(), x.getSourceInfo());
JsExpression key = (JsExpression) generate(x.getKey());
JsNameRef methodName = AstUtil.newNameRef(map.makeRef(), addMethod);
return AstUtil.newInvocation(methodName, key, value).setSourceRef(x);

Powered by Google App Engine
This is Rietveld 408576698