OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
3 # for details. All rights reserved. Use of this source code is governed by a | 3 # for details. All rights reserved. Use of this source code is governed by a |
4 # BSD-style license that can be found in the LICENSE file. | 4 # BSD-style license that can be found in the LICENSE file. |
5 | 5 |
6 """This module provides shared functionality for the system to generate | 6 """This module provides shared functionality for the system to generate |
7 Dart:html APIs from the IDL database.""" | 7 Dart:html APIs from the IDL database.""" |
8 | 8 |
9 from systemfrog import * | 9 from systemfrog import * |
10 from systeminterface import * | 10 from systeminterface import * |
(...skipping 1435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1446 '\n' | 1446 '\n' |
1447 ' void operator[]=(int index, $TYPE value) {\n' | 1447 ' void operator[]=(int index, $TYPE value) {\n' |
1448 ' throw new UnsupportedOperationException("Cannot assign element
of immutable List.");\n' | 1448 ' throw new UnsupportedOperationException("Cannot assign element
of immutable List.");\n' |
1449 ' }\n', | 1449 ' }\n', |
1450 TYPE=DartType(element_type)) | 1450 TYPE=DartType(element_type)) |
1451 | 1451 |
1452 # The list interface for this class is manually generated. | 1452 # The list interface for this class is manually generated. |
1453 if self._interface.id == 'NodeList': | 1453 if self._interface.id == 'NodeList': |
1454 return | 1454 return |
1455 | 1455 |
1456 self._members_emitter.Emit( | 1456 # TODO(sra): Use separate mixins for mutable implementations of List<T>. |
1457 '\n' | 1457 # TODO(sra): Use separate mixins for typed array implementations of List<T>. |
1458 ' void add($TYPE value) {\n' | 1458 template_file = 'immutable_list_mixin.darttemplate' |
1459 ' throw new UnsupportedOperationException("Cannot add to immutable Li
st.");\n' | 1459 template = self._system._templates.Load(template_file) |
1460 ' }\n' | 1460 self._members_emitter.Emit(template, E=DartType(element_type)) |
1461 '\n' | |
1462 ' void addLast($TYPE value) {\n' | |
1463 ' throw new UnsupportedOperationException("Cannot add to immutable Li
st.");\n' | |
1464 ' }\n' | |
1465 '\n' | |
1466 ' void addAll(Collection<$TYPE> collection) {\n' | |
1467 ' throw new UnsupportedOperationException("Cannot add to immutable Li
st.");\n' | |
1468 ' }\n' | |
1469 '\n' | |
1470 ' void sort(int compare($TYPE a, $TYPE b)) {\n' | |
1471 ' throw new UnsupportedOperationException("Cannot sort immutable List
.");\n' | |
1472 ' }\n' | |
1473 '\n' | |
1474 ' void copyFrom(List<Object> src, int srcStart, ' | |
1475 'int dstStart, int count) {\n' | |
1476 ' throw new UnsupportedOperationException("This object is immutable."
);\n' | |
1477 ' }\n' | |
1478 '\n' | |
1479 ' int indexOf($TYPE element, [int start = 0]) {\n' | |
1480 ' return _Lists.indexOf(this, element, start, this.length);\n' | |
1481 ' }\n' | |
1482 '\n' | |
1483 ' int lastIndexOf($TYPE element, [int start = null]) {\n' | |
1484 ' if (start === null) start = length - 1;\n' | |
1485 ' return _Lists.lastIndexOf(this, element, start);\n' | |
1486 ' }\n' | |
1487 '\n' | |
1488 ' int clear() {\n' | |
1489 ' throw new UnsupportedOperationException("Cannot clear immutable Lis
t.");\n' | |
1490 ' }\n' | |
1491 '\n' | |
1492 ' $TYPE removeLast() {\n' | |
1493 ' throw new UnsupportedOperationException("Cannot removeLast on immut
able List.");\n' | |
1494 ' }\n' | |
1495 '\n' | |
1496 ' $TYPE last() {\n' | |
1497 ' return this[length - 1];\n' | |
1498 ' }\n' | |
1499 '\n' | |
1500 ' void forEach(void f($TYPE element)) {\n' | |
1501 ' _Collections.forEach(this, f);\n' | |
1502 ' }\n' | |
1503 '\n' | |
1504 ' Collection map(f($TYPE element)) {\n' | |
1505 ' return _Collections.map(this, [], f);\n' | |
1506 ' }\n' | |
1507 '\n' | |
1508 ' Collection<$TYPE> filter(bool f($TYPE element)) {\n' | |
1509 ' return _Collections.filter(this, new List<$TYPE>(), f);\n' | |
1510 ' }\n' | |
1511 '\n' | |
1512 ' bool every(bool f($TYPE element)) {\n' | |
1513 ' return _Collections.every(this, f);\n' | |
1514 ' }\n' | |
1515 '\n' | |
1516 ' bool some(bool f($TYPE element)) {\n' | |
1517 ' return _Collections.some(this, f);\n' | |
1518 ' }\n' | |
1519 '\n' | |
1520 ' void setRange(int start, int length, List<$TYPE> from, [int startFrom
]) {\n' | |
1521 ' throw new UnsupportedOperationException("Cannot setRange on immutab
le List.");\n' | |
1522 ' }\n' | |
1523 '\n' | |
1524 ' void removeRange(int start, int length) {\n' | |
1525 ' throw new UnsupportedOperationException("Cannot removeRange on immu
table List.");\n' | |
1526 ' }\n' | |
1527 '\n' | |
1528 ' void insertRange(int start, int length, [$TYPE initialValue]) {\n' | |
1529 ' throw new UnsupportedOperationException("Cannot insertRange on immu
table List.");\n' | |
1530 ' }\n' | |
1531 '\n' | |
1532 ' List<$TYPE> getRange(int start, int length) {\n' | |
1533 ' throw new NotImplementedException();\n' | |
1534 ' }\n' | |
1535 '\n' | |
1536 ' bool isEmpty() {\n' | |
1537 ' return length == 0;\n' | |
1538 ' }\n' | |
1539 '\n' | |
1540 ' Iterator<$TYPE> iterator() {\n' | |
1541 ' return new _FixedSizeListIterator<$TYPE>(this);\n' | |
1542 ' }\n', | |
1543 TYPE=DartType(element_type)) | |
1544 | 1461 |
1545 def _HasNativeIndexGetter(self, interface): | 1462 def _HasNativeIndexGetter(self, interface): |
1546 return ('HasIndexGetter' in interface.ext_attrs or | 1463 return ('IndexedGetter' in interface.ext_attrs or |
1547 'HasNumericIndexGetter' in interface.ext_attrs) | 1464 'NumericIndexedGetter' in interface.ext_attrs) |
1548 | 1465 |
1549 def _EmitNativeIndexGetter(self, interface, element_type): | 1466 def _EmitNativeIndexGetter(self, interface, element_type): |
1550 method_name = '_index' | 1467 method_name = '_index' |
1551 self._members_emitter.Emit( | 1468 self._members_emitter.Emit( |
1552 '\n $TYPE operator[](int index) => _wrap($(THIS)[index]);\n', | 1469 '\n $TYPE operator[](int index) => _wrap($(THIS)[index]);\n', |
1553 TYPE=DartType(element_type), | 1470 TYPE=DartType(element_type), |
1554 THIS=self.DomObjectName(), | 1471 THIS=self.DomObjectName(), |
1555 METHOD=method_name) | 1472 METHOD=method_name) |
1556 | 1473 |
1557 def _HasNativeIndexSetter(self, interface): | 1474 def _HasNativeIndexSetter(self, interface): |
1558 return 'HasCustomIndexSetter' in interface.ext_attrs | 1475 return 'CustomIndexedSetter' in interface.ext_attrs |
1559 | 1476 |
1560 def _EmitNativeIndexSetter(self, interface, element_type): | 1477 def _EmitNativeIndexSetter(self, interface, element_type): |
1561 method_name = '_set_index' | 1478 method_name = '_set_index' |
1562 self._members_emitter.Emit( | 1479 self._members_emitter.Emit( |
1563 '\n' | 1480 '\n' |
1564 ' void operator[]=(int index, $TYPE value) {\n' | 1481 ' void operator[]=(int index, $TYPE value) {\n' |
1565 ' return $(THIS)[index] = _unwrap(value);\n' | 1482 ' return $(THIS)[index] = _unwrap(value);\n' |
1566 ' }\n', | 1483 ' }\n', |
1567 THIS=self.DomObjectName(), | 1484 THIS=self.DomObjectName(), |
1568 TYPE=DartType(element_type), | 1485 TYPE=DartType(element_type), |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1717 # dispatch has removed f(X), leaving only f(Y), but there is no guarantee | 1634 # dispatch has removed f(X), leaving only f(Y), but there is no guarantee |
1718 # that Y = Z-X, so we need to check for Y. | 1635 # that Y = Z-X, so we need to check for Y. |
1719 true_code = emitter.Emit( | 1636 true_code = emitter.Emit( |
1720 '$(INDENT)if ($COND) {\n' | 1637 '$(INDENT)if ($COND) {\n' |
1721 '$!TRUE' | 1638 '$!TRUE' |
1722 '$(INDENT)}\n', | 1639 '$(INDENT)}\n', |
1723 COND=test, INDENT=indent) | 1640 COND=test, INDENT=indent) |
1724 self.GenerateDispatch( | 1641 self.GenerateDispatch( |
1725 true_code, info, indent + ' ', position + 1, positive) | 1642 true_code, info, indent + ' ', position + 1, positive) |
1726 return True | 1643 return True |
OLD | NEW |