Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * Top level generator object for writing code and keeping track of | 6 * Top level generator object for writing code and keeping track of |
| 7 * dependencies. | 7 * dependencies. |
| 8 * | 8 * |
| 9 * Should have two compilation models, but only one implemented so far. | 9 * Should have two compilation models, but only one implemented so far. |
| 10 * | 10 * |
| (...skipping 1322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1333 var test = visitValue(node.test); | 1333 var test = visitValue(node.test); |
| 1334 writer.enterBlock('switch (${test.code}) {'); | 1334 writer.enterBlock('switch (${test.code}) {'); |
| 1335 for (var case_ in node.cases) { | 1335 for (var case_ in node.cases) { |
| 1336 if (case_.label != null) { | 1336 if (case_.label != null) { |
| 1337 world.error('unimplemented: labeled case statement', case_.span); | 1337 world.error('unimplemented: labeled case statement', case_.span); |
| 1338 } | 1338 } |
| 1339 _pushBlock(); | 1339 _pushBlock(); |
| 1340 for (int i=0; i < case_.cases.length; i++) { | 1340 for (int i=0; i < case_.cases.length; i++) { |
| 1341 var expr = case_.cases[i]; | 1341 var expr = case_.cases[i]; |
| 1342 if (expr == null) { | 1342 if (expr == null) { |
| 1343 // Default can only be the last case. | |
| 1344 if (i < case_.cases.length - 1) { | |
| 1345 world.error('default clause must be the last case', case_.span); | |
| 1346 } | |
| 1343 writer.writeln('default:'); | 1347 writer.writeln('default:'); |
| 1344 } else { | 1348 } else { |
| 1345 var value = visitValue(expr); | 1349 var value = visitValue(expr); |
| 1346 writer.writeln('case ${value.code}:'); | 1350 writer.writeln('case ${value.code}:'); |
| 1347 } | 1351 } |
| 1348 } | 1352 } |
| 1349 writer.enterBlock(''); | 1353 writer.enterBlock(''); |
| 1350 for (var stmt in case_.statements) { | 1354 for (var stmt in case_.statements) { |
| 1351 stmt.visit(this); | 1355 stmt.visit(this); |
|
jimhug
2011/10/27 17:45:11
This needs to do some sort of minimal checking for
Emily Fortuna
2011/10/27 17:59:04
Done in the next CL.
| |
| 1352 } | 1356 } |
| 1357 if (case_ != node.cases[node.cases.length - 1]) { | |
| 1358 var span = case_.statements[case_.statements.length - 1].span; | |
| 1359 //TODO(efortuna): This error message isn't 100% correct because | |
| 1360 // constructors are not being built correctly. Check back when I've | |
| 1361 // fixed constructors. | |
| 1362 writer.writeln('\$throw(new FallThroughError("${span.file.filename}",' + | |
| 1363 ' ${span.file.getLine(span.start)}))'); | |
| 1364 } | |
| 1353 writer.exitBlock(''); | 1365 writer.exitBlock(''); |
| 1354 _popBlock(); | 1366 _popBlock(); |
| 1355 } | 1367 } |
| 1356 writer.exitBlock('}'); | 1368 writer.exitBlock('}'); |
| 1357 } | 1369 } |
| 1358 | 1370 |
| 1359 void visitBlockStatement(BlockStatement node) { | 1371 void visitBlockStatement(BlockStatement node) { |
| 1360 _pushBlock(); | 1372 _pushBlock(); |
| 1361 writer.enterBlock('{'); | 1373 writer.enterBlock('{'); |
| 1362 for (var stmt in node.body) { | 1374 for (var stmt in node.body) { |
| (...skipping 772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2135 | 2147 |
| 2136 static removeTrailingNulls(List<Value> argsCode) { | 2148 static removeTrailingNulls(List<Value> argsCode) { |
| 2137 // We simplify calls with null defaults by relying on JS and our | 2149 // We simplify calls with null defaults by relying on JS and our |
| 2138 // choice to make undefined === null for Dart generated code. This helps | 2150 // choice to make undefined === null for Dart generated code. This helps |
| 2139 // and ensures correct defaults values for native calls. | 2151 // and ensures correct defaults values for native calls. |
| 2140 while (argsCode.length > 0 && argsCode.last() == 'null') { | 2152 while (argsCode.length > 0 && argsCode.last() == 'null') { |
| 2141 argsCode.removeLast(); | 2153 argsCode.removeLast(); |
| 2142 } | 2154 } |
| 2143 } | 2155 } |
| 2144 } | 2156 } |
| OLD | NEW |