Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 part of dart2js; | 5 part of dart2js; |
| 6 | 6 |
| 7 class EnqueueTask extends CompilerTask { | 7 class EnqueueTask extends CompilerTask { |
| 8 final Enqueuer codegen; | 8 final Enqueuer codegen; |
| 9 final Enqueuer resolution; | 9 final Enqueuer resolution; |
| 10 | 10 |
| (...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 381 registerNewSelector(setterName, | 381 registerNewSelector(setterName, |
| 382 new TypedSelector(type, setter), | 382 new TypedSelector(type, setter), |
| 383 universe.fieldSetters); | 383 universe.fieldSetters); |
| 384 }); | 384 }); |
| 385 } | 385 } |
| 386 | 386 |
| 387 void registerIsCheck(DartType type) { | 387 void registerIsCheck(DartType type) { |
| 388 universe.isChecks.add(type); | 388 universe.isChecks.add(type); |
| 389 } | 389 } |
| 390 | 390 |
| 391 void registerJsCall(Send node, ResolverVisitor resolver) { | |
| 392 var argNodes = node.arguments; | |
|
sra1
2012/11/29 00:12:51
We should avoid parsing this string in two places.
ngeoffray
2012/11/29 11:10:44
Done.
| |
| 393 if (argNodes.isEmpty) { | |
| 394 compiler.cancel("JS expression has no type", node: node); | |
| 395 } | |
| 396 | |
| 397 LiteralString specLiteral = argNodes.head.asLiteralString(); | |
| 398 if (specLiteral != null) { | |
| 399 // Register primitive types we know a JS can return. | |
| 400 String specString = specLiteral.dartString.slowToString(); | |
| 401 for (String typeString in specString.split('|')) { | |
| 402 if (specString == 'int') { | |
| 403 registerInstantiatedClass(compiler.intClass); | |
| 404 } else if (specString == 'double') { | |
| 405 registerInstantiatedClass(compiler.doubleClass); | |
| 406 } else if (specString == 'num') { | |
| 407 registerInstantiatedClass(compiler.numClass); | |
| 408 } else if (specString == 'String') { | |
| 409 registerInstantiatedClass(compiler.stringClass); | |
| 410 } else if (specString == '=List') { | |
| 411 registerInstantiatedClass(compiler.listClass); | |
| 412 } else if (specString == 'bool') { | |
| 413 registerInstantiatedClass(compiler.boolClass); | |
| 414 } else if (specString == 'Null') { | |
| 415 registerInstantiatedClass(compiler.nullClass); | |
| 416 } | |
| 417 } | |
| 418 } | |
| 419 | |
| 420 nativeEnqueuer.registerJsCall(node, resolver); | |
| 421 } | |
| 422 | |
| 423 | |
| 391 void forEach(f(WorkItem work)) { | 424 void forEach(f(WorkItem work)) { |
| 392 while (!queue.isEmpty) { | 425 while (!queue.isEmpty) { |
| 393 f(queue.removeLast()); // TODO(kasperl): Why isn't this removeFirst? | 426 f(queue.removeLast()); // TODO(kasperl): Why isn't this removeFirst? |
| 394 } | 427 } |
| 395 } | 428 } |
| 396 | 429 |
| 397 String toString() => 'Enqueuer($name)'; | 430 String toString() => 'Enqueuer($name)'; |
| 398 | 431 |
| 399 void logSummary(log(message)) { | 432 void logSummary(log(message)) { |
| 400 log(isResolutionQueue | 433 log(isResolutionQueue |
| 401 ? 'Resolved ${resolvedElements.length} elements.' | 434 ? 'Resolved ${resolvedElements.length} elements.' |
| 402 : 'Compiled ${universe.generatedCode.length} methods.'); | 435 : 'Compiled ${universe.generatedCode.length} methods.'); |
| 403 nativeEnqueuer.logSummary(log); | 436 nativeEnqueuer.logSummary(log); |
| 404 } | 437 } |
| 405 } | 438 } |
| OLD | NEW |