Chromium Code Reviews| 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); |