Chromium Code Reviews| 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 systems to generate | 6 """This module provides shared functionality for the systems to generate |
| 7 native binding from the IDL database.""" | 7 native binding from the IDL database.""" |
| 8 | 8 |
| 9 import emitter | 9 import emitter |
| 10 import os | 10 import os |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 232 # generated on merged interface implementation instead. | 232 # generated on merged interface implementation instead. |
| 233 return False | 233 return False |
| 234 | 234 |
| 235 def CustomJSMembers(self): | 235 def CustomJSMembers(self): |
| 236 return {} | 236 return {} |
| 237 | 237 |
| 238 def GenerateCallback(self, info): | 238 def GenerateCallback(self, info): |
| 239 if IsPureInterface(self._interface.id) or IsCustomType(self._interface.id): | 239 if IsPureInterface(self._interface.id) or IsCustomType(self._interface.id): |
| 240 return | 240 return |
| 241 | 241 |
| 242 interface = self._interface | |
| 243 if interface.parents: | |
| 244 supertype = '%sClassId' % interface.parents[0].type.id | |
| 245 else: | |
| 246 supertype = '-1' | |
| 247 | |
| 242 cpp_impl_includes = set(['"' + partial + '.h"' | 248 cpp_impl_includes = set(['"' + partial + '.h"' |
| 243 for partial in _GetCPPPartialNames(self._interface) ]) | 249 for partial in _GetCPPPartialNames(self._interface) ]) |
| 244 cpp_header_handlers_emitter = emitter.Emitter() | 250 cpp_header_handlers_emitter = emitter.Emitter() |
| 245 cpp_impl_handlers_emitter = emitter.Emitter() | 251 cpp_impl_handlers_emitter = emitter.Emitter() |
| 246 class_name = 'Dart%s' % self._interface.id | 252 class_name = 'Dart%s' % self._interface.id |
| 247 for operation in self._interface.operations: | 253 for operation in self._interface.operations: |
| 248 function_name = operation.id | 254 function_name = operation.id |
| 249 return_type = self.SecureOutputType(operation.type.id) | 255 return_type = self.SecureOutputType(operation.type.id) |
| 250 parameters = [] | 256 parameters = [] |
| 251 arguments = [] | 257 arguments = [] |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 325 cpp_header_emitter.Emit( | 331 cpp_header_emitter.Emit( |
| 326 self._template_loader.Load('cpp_callback_header.template'), | 332 self._template_loader.Load('cpp_callback_header.template'), |
| 327 INTERFACE=self._interface.id, | 333 INTERFACE=self._interface.id, |
| 328 HANDLERS=cpp_header_handlers_emitter.Fragments()) | 334 HANDLERS=cpp_header_handlers_emitter.Fragments()) |
| 329 | 335 |
| 330 cpp_impl_emitter = self._cpp_library_emitter.CreateSourceEmitter(self._inter face.id) | 336 cpp_impl_emitter = self._cpp_library_emitter.CreateSourceEmitter(self._inter face.id) |
| 331 cpp_impl_emitter.Emit( | 337 cpp_impl_emitter.Emit( |
| 332 self._template_loader.Load('cpp_callback_implementation.template'), | 338 self._template_loader.Load('cpp_callback_implementation.template'), |
| 333 INCLUDES=self._GenerateCPPIncludes(cpp_impl_includes), | 339 INCLUDES=self._GenerateCPPIncludes(cpp_impl_includes), |
| 334 INTERFACE=self._interface.id, | 340 INTERFACE=self._interface.id, |
| 335 HANDLERS=cpp_impl_handlers_emitter.Fragments()) | 341 SUPER_INTERFACE=supertype, |
| 342 HANDLERS=cpp_impl_handlers_emitter.Fragments(), | |
| 343 DART_IMPLEMENTATION_CLASS=self._interface_type_info.implementation_name( ), | |
| 344 DART_IMPLEMENTATION_LIBRARY_ID='Dart%sLibraryId' % self._renamer.GetLibr aryId(self._interface)) | |
| 336 | 345 |
| 337 def ImplementationTemplate(self): | 346 def ImplementationTemplate(self): |
| 338 template = None | 347 template = None |
| 339 interface_name = self._interface.doc_js_name | 348 interface_name = self._interface.doc_js_name |
| 340 if interface_name == self._interface.id or not self._database.HasInterface(i nterface_name): | 349 if interface_name == self._interface.id or not self._database.HasInterface(i nterface_name): |
| 341 template_file = 'impl_%s.darttemplate' % interface_name | 350 template_file = 'impl_%s.darttemplate' % interface_name |
| 342 template = self._template_loader.TryLoad(template_file) | 351 template = self._template_loader.TryLoad(template_file) |
| 343 if not template: | 352 if not template: |
| 344 template = self._template_loader.Load('dart_implementation.darttemplate') | 353 template = self._template_loader.Load('dart_implementation.darttemplate') |
| 345 return template | 354 return template |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 474 | 483 |
| 475 def GetSupportCheck(self): | 484 def GetSupportCheck(self): |
| 476 # Assume that everything is supported on Dartium. | 485 # Assume that everything is supported on Dartium. |
| 477 value = js_support_checks.get(self._interface.doc_js_name) | 486 value = js_support_checks.get(self._interface.doc_js_name) |
| 478 if type(value) == tuple: | 487 if type(value) == tuple: |
| 479 return (value[0], 'true') | 488 return (value[0], 'true') |
| 480 else: | 489 else: |
| 481 return 'true' | 490 return 'true' |
| 482 | 491 |
| 483 def FinishInterface(self): | 492 def FinishInterface(self): |
| 493 interface = self._interface | |
| 494 if interface.parents: | |
| 495 supertype = '%sClassId' % interface.parents[0].type.id | |
| 496 else: | |
| 497 supertype = '-1' | |
| 498 | |
| 484 self._GenerateCPPHeader() | 499 self._GenerateCPPHeader() |
| 485 | 500 |
| 486 self._cpp_impl_emitter.Emit( | 501 self._cpp_impl_emitter.Emit( |
| 487 self._template_loader.Load('cpp_implementation.template'), | 502 self._template_loader.Load('cpp_implementation.template'), |
| 488 INTERFACE=self._interface.id, | 503 INTERFACE=self._interface.id, |
| 504 SUPER_INTERFACE=supertype, | |
| 489 INCLUDES=self._GenerateCPPIncludes(self._cpp_impl_includes), | 505 INCLUDES=self._GenerateCPPIncludes(self._cpp_impl_includes), |
| 490 CALLBACKS=self._cpp_definitions_emitter.Fragments(), | 506 CALLBACKS=self._cpp_definitions_emitter.Fragments(), |
| 491 RESOLVER=self._cpp_resolver_emitter.Fragments(), | 507 RESOLVER=self._cpp_resolver_emitter.Fragments(), |
| 492 WEBCORE_CLASS_NAME=self._interface_type_info.native_type(), | 508 WEBCORE_CLASS_NAME=self._interface_type_info.native_type(), |
| 493 WEBCORE_CLASS_NAME_ESCAPED= | 509 WEBCORE_CLASS_NAME_ESCAPED= |
| 494 self._interface_type_info.native_type().replace('<', '_').replace('>', ' _'), | 510 self._interface_type_info.native_type().replace('<', '_').replace('>', ' _'), |
| 495 DART_IMPLEMENTATION_CLASS=self._interface_type_info.implementation_name( ), | 511 DART_IMPLEMENTATION_CLASS=self._interface_type_info.implementation_name( ), |
| 496 DART_IMPLEMENTATION_LIBRARY_ID='Dart%sLibraryId' % self._renamer.GetLibr aryId(self._interface)) | 512 DART_IMPLEMENTATION_LIBRARY_ID='Dart%sLibraryId' % self._renamer.GetLibr aryId(self._interface)) |
| 497 | 513 |
| 498 def _GenerateCPPHeader(self): | 514 def _GenerateCPPHeader(self): |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 592 ' return DartDOMWrapper::createWrapper<Dart$(INTERFACE)>(domDat a, value, Dart$(INTERFACE)::dartClassId);\n' | 608 ' return DartDOMWrapper::createWrapper<Dart$(INTERFACE)>(domDat a, value, Dart$(INTERFACE)::dartClassId);\n' |
| 593 ' }\n', | 609 ' }\n', |
| 594 INTERFACE=self._interface.id) | 610 INTERFACE=self._interface.id) |
| 595 | 611 |
| 596 webcore_includes = self._GenerateCPPIncludes( | 612 webcore_includes = self._GenerateCPPIncludes( |
| 597 self._interface_type_info.webcore_includes()) | 613 self._interface_type_info.webcore_includes()) |
| 598 | 614 |
| 599 is_node_test = lambda interface: interface.id == 'Node' | 615 is_node_test = lambda interface: interface.id == 'Node' |
| 600 is_active_test = lambda interface: 'ActiveDOMObject' in interface.ext_attrs | 616 is_active_test = lambda interface: 'ActiveDOMObject' in interface.ext_attrs |
| 601 is_event_target_test = lambda interface: 'EventTarget' in interface.ext_attr s | 617 is_event_target_test = lambda interface: 'EventTarget' in interface.ext_attr s |
| 618 | |
| 602 def TypeCheckHelper(test): | 619 def TypeCheckHelper(test): |
| 603 return 'true' if any(map(test, self._database.Hierarchy(self._interface))) else 'false' | 620 return 'true' if any(map(test, self._database.Hierarchy(self._interface))) else 'false' |
| 604 | 621 |
| 622 to_active_emitter = emitter.Emitter() | |
| 623 to_node_emitter = emitter.Emitter() | |
| 624 to_event_target_emitter = emitter.Emitter() | |
| 625 | |
| 626 if (any(map(is_active_test, self._database.Hierarchy(self._interface)))): | |
| 627 to_active_emitter.Emit('return toNative(value);') | |
| 628 else: | |
|
vsm
2014/04/08 20:29:27
Should these generate code to assert unreachable i
siva
2014/04/08 23:09:03
When iterating over the weak handles we would use
| |
| 629 to_active_emitter.Emit('return 0;') | |
| 630 | |
| 631 if (any(map(is_node_test, self._database.Hierarchy(self._interface)))): | |
| 632 to_node_emitter.Emit('return toNative(value);') | |
| 633 else: | |
| 634 to_node_emitter.Emit('return 0;') | |
| 635 | |
| 636 if (any(map(is_event_target_test, self._database.Hierarchy(self._interface)) )): | |
| 637 to_event_target_emitter.Emit('return toNative(value);') | |
| 638 else: | |
| 639 to_event_target_emitter.Emit('return 0;') | |
| 640 | |
| 605 v8_interface_include = '' | 641 v8_interface_include = '' |
| 606 # V8AbstractWorker.h does not exist so we have to hard code this case. | 642 # V8AbstractWorker.h does not exist so we have to hard code this case. |
| 607 if self._interface.id != 'AbstractWorker': | 643 if self._interface.id != 'AbstractWorker': |
| 608 # FIXME: We need this to access the WrapperTypeInfo. | 644 # FIXME: We need this to access the WrapperTypeInfo. |
| 609 v8_interface_include = '#include "V8%s.h"' % (self._interface.id) | 645 v8_interface_include = '#include "V8%s.h"' % (self._interface.id) |
| 610 | 646 |
| 611 self._cpp_header_emitter.Emit( | 647 self._cpp_header_emitter.Emit( |
| 612 self._template_loader.Load('cpp_header.template'), | 648 self._template_loader.Load('cpp_header.template'), |
| 613 INTERFACE=self._interface.id, | 649 INTERFACE=self._interface.id, |
| 614 WEBCORE_INCLUDES=webcore_includes, | 650 WEBCORE_INCLUDES=webcore_includes, |
| 615 V8_INTERFACE_INCLUDE=v8_interface_include, | 651 V8_INTERFACE_INCLUDE=v8_interface_include, |
| 616 WEBCORE_CLASS_NAME=self._interface_type_info.native_type(), | 652 WEBCORE_CLASS_NAME=self._interface_type_info.native_type(), |
| 617 WEBCORE_CLASS_NAME_ESCAPED= | 653 WEBCORE_CLASS_NAME_ESCAPED= |
| 618 self._interface_type_info.native_type().replace('<', '_').replace('>', ' _'), | 654 self._interface_type_info.native_type().replace('<', '_').replace('>', ' _'), |
| 619 DECLARATIONS=self._cpp_declarations_emitter.Fragments(), | 655 DECLARATIONS=self._cpp_declarations_emitter.Fragments(), |
| 620 IS_NODE=TypeCheckHelper(is_node_test), | 656 IS_NODE=TypeCheckHelper(is_node_test), |
| 621 IS_ACTIVE=TypeCheckHelper(is_active_test), | 657 IS_ACTIVE=TypeCheckHelper(is_active_test), |
| 622 IS_EVENT_TARGET=TypeCheckHelper(is_event_target_test), | 658 IS_EVENT_TARGET=TypeCheckHelper(is_event_target_test), |
| 659 TO_NODE=to_node_emitter.Fragments(), | |
| 660 TO_ACTIVE=to_active_emitter.Fragments(), | |
| 661 TO_EVENT_TARGET=to_event_target_emitter.Fragments(), | |
| 623 TO_NATIVE=to_native_emitter.Fragments(), | 662 TO_NATIVE=to_native_emitter.Fragments(), |
| 624 TO_DART=to_dart_emitter.Fragments()) | 663 TO_DART=to_dart_emitter.Fragments()) |
| 625 | 664 |
| 626 def EmitAttribute(self, attribute, html_name, read_only): | 665 def EmitAttribute(self, attribute, html_name, read_only): |
| 627 self._AddGetter(attribute, html_name, read_only) | 666 self._AddGetter(attribute, html_name, read_only) |
| 628 if not read_only: | 667 if not read_only: |
| 629 self._AddSetter(attribute, html_name) | 668 self._AddSetter(attribute, html_name) |
| 630 | 669 |
| 631 def _GenerateAutoSetupScope(self, idl_name, native_suffix): | 670 def _GenerateAutoSetupScope(self, idl_name, native_suffix): |
| 632 return (self._interface.id, idl_name, native_suffix) not in _cpp_no_auto_sco pe_list | 671 return (self._interface.id, idl_name, native_suffix) not in _cpp_no_auto_sco pe_list |
| (...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1397 headers = self._library_headers[library_name] | 1436 headers = self._library_headers[library_name] |
| 1398 for header_file in headers: | 1437 for header_file in headers: |
| 1399 path = os.path.relpath(header_file, output_dir) | 1438 path = os.path.relpath(header_file, output_dir) |
| 1400 includes_emitter.Emit('#include "$PATH"\n', PATH=path) | 1439 includes_emitter.Emit('#include "$PATH"\n', PATH=path) |
| 1401 body_emitter.Emit( | 1440 body_emitter.Emit( |
| 1402 ' if (Dart_NativeFunction func = $CLASS_NAME::resolver(name, argu mentCount, autoSetupScope))\n' | 1441 ' if (Dart_NativeFunction func = $CLASS_NAME::resolver(name, argu mentCount, autoSetupScope))\n' |
| 1403 ' return func;\n', | 1442 ' return func;\n', |
| 1404 CLASS_NAME=os.path.splitext(os.path.basename(path))[0]) | 1443 CLASS_NAME=os.path.splitext(os.path.basename(path))[0]) |
| 1405 | 1444 |
| 1406 def EmitClassIdTable(self, database, output_dir, type_registry, renamer): | 1445 def EmitClassIdTable(self, database, output_dir, type_registry, renamer): |
| 1446 def HasConverters(interface): | |
| 1447 is_node_test = lambda interface: interface.id == 'Node' | |
| 1448 is_active_test = lambda interface: 'ActiveDOMObject' in interface.ext_attr s | |
| 1449 is_event_target_test = lambda interface: 'EventTarget' in interface.ext_at trs | |
|
vsm
2014/04/08 20:29:27
This may need to be lambda interface: interface.id
siva
2014/04/08 23:09:03
I will fix this and another use of is_event_target
| |
| 1450 | |
| 1451 return (any(map(is_node_test, database.Hierarchy(interface))) or | |
| 1452 any(map(is_active_test, database.Hierarchy(interface))) or | |
| 1453 any(map(is_event_target_test, database.Hierarchy(interface)))) | |
| 1454 | |
| 1455 | |
| 1407 path = os.path.join(output_dir, 'DartWebkitClassIds.h') | 1456 path = os.path.join(output_dir, 'DartWebkitClassIds.h') |
| 1408 e = self._emitters.FileEmitter(path) | 1457 e = self._emitters.FileEmitter(path) |
| 1409 e.Emit('// Copyright (c) 2013, the Dart project authors. Please see the AUT HORS file\n'); | 1458 e.Emit('// Copyright (c) 2013, the Dart project authors. Please see the AUT HORS file\n'); |
| 1410 e.Emit('// for details. All rights reserved. Use of this source code is gove rned by a\n'); | 1459 e.Emit('// for details. All rights reserved. Use of this source code is gove rned by a\n'); |
| 1411 e.Emit('// BSD-style license that can be found in the LICENSE file.\n'); | 1460 e.Emit('// BSD-style license that can be found in the LICENSE file.\n'); |
| 1412 e.Emit('// WARNING: Do not edit - generated code.\n'); | 1461 e.Emit('// WARNING: Do not edit - generated code.\n'); |
| 1413 e.Emit('// See dart/tools/dom/scripts/systemnative.py\n'); | 1462 e.Emit('// See dart/tools/dom/scripts/systemnative.py\n'); |
| 1414 e.Emit('\n'); | 1463 e.Emit('\n'); |
| 1415 e.Emit('#ifndef DartWebkitClassIds_h\n'); | 1464 e.Emit('#ifndef DartWebkitClassIds_h\n'); |
| 1416 e.Emit('#define DartWebkitClassIds_h\n'); | 1465 e.Emit('#define DartWebkitClassIds_h\n'); |
| 1417 e.Emit('\n'); | 1466 e.Emit('\n'); |
| 1418 e.Emit('namespace WebCore {\n'); | 1467 e.Emit('namespace WebCore {\n'); |
| 1419 e.Emit('\n'); | 1468 e.Emit('\n'); |
| 1420 e.Emit('enum {\n'); | 1469 e.Emit('enum {\n'); |
| 1421 e.Emit(' _InvalidClassId = 0,\n'); | 1470 e.Emit(' _InvalidClassId = 0,\n'); |
| 1422 e.Emit(' _HistoryCrossFrameClassId,\n'); | 1471 e.Emit(' _HistoryCrossFrameClassId,\n'); |
| 1423 e.Emit(' _LocationCrossFrameClassId,\n'); | 1472 e.Emit(' _LocationCrossFrameClassId,\n'); |
| 1424 e.Emit(' _DOMWindowCrossFrameClassId,\n'); | 1473 e.Emit(' _DOMWindowCrossFrameClassId,\n'); |
| 1425 e.Emit(' _DateTimeClassId,\n'); | 1474 e.Emit(' _DateTimeClassId,\n'); |
| 1426 e.Emit(' _JsObjectClassId,\n'); | 1475 e.Emit(' _JsObjectClassId,\n'); |
| 1427 e.Emit(' _JsFunctionClassId,\n'); | 1476 e.Emit(' _JsFunctionClassId,\n'); |
| 1428 e.Emit(' _JsArrayClassId,\n'); | 1477 e.Emit(' _JsArrayClassId,\n'); |
| 1429 e.Emit(' // New types that are not auto-generated should be added here.\n '); | 1478 e.Emit(' // New types that are not auto-generated should be added here.\n '); |
| 1430 e.Emit('\n'); | 1479 e.Emit('\n'); |
| 1431 for interface in database.GetInterfaces(): | 1480 for interface in database.GetInterfaces(): |
| 1432 interface_name = interface.id | 1481 e.Emit(' %sClassId,\n' % interface.id) |
| 1433 e.Emit(' %sClassId,\n' % interface_name) | |
| 1434 e.Emit(' NumWebkitClassIds\n'); | 1482 e.Emit(' NumWebkitClassIds\n'); |
| 1435 e.Emit('};\n'); | 1483 e.Emit('};\n'); |
| 1436 | 1484 e.Emit('class ActiveDOMObject;\n' |
| 1437 e.Emit('typedef struct {\n'); | 1485 'class EventTarget;\n' |
| 1438 e.Emit(' const char* class_name;\n'); | 1486 'class Node;\n' |
| 1439 e.Emit(' int library_id;\n'); | 1487 'typedef ActiveDOMObject* (*ToActiveDOMObject)(void* value);\n' |
| 1440 e.Emit(' int base_class_id;\n'); | 1488 'typedef EventTarget* (*ToEventTarget)(void* value);\n' |
| 1441 e.Emit(' bool is_node;\n'); | 1489 'typedef Node* (*ToNode)(void* value);\n' |
| 1442 e.Emit(' bool is_active;\n'); | 1490 'typedef struct {\n' |
| 1443 e.Emit(' bool is_event;\n'); | 1491 ' const char* class_name;\n' |
| 1444 e.Emit('} _Classinfo;\n'); | 1492 ' int library_id;\n' |
| 1445 e.Emit('typedef _Classinfo _DartWebkitClassInfo[NumWebkitClassIds];\n'); | 1493 ' int base_class_id;\n' |
| 1446 e.Emit('\n'); | 1494 ' ToActiveDOMObject toActiveDOMObject;\n' |
| 1447 e.Emit('extern _DartWebkitClassInfo DartWebkitClassInfo;\n'); | 1495 ' ToEventTarget toEventTarget;\n' |
| 1448 e.Emit('\n'); | 1496 ' ToNode toNode;\n' |
| 1449 e.Emit('} // namespace WebCore\n'); | 1497 '} DartWrapperTypeInfo;\n' |
| 1450 e.Emit('#endif // DartWebkitClassIds_h\n'); | 1498 'typedef DartWrapperTypeInfo _DartWebkitClassInfo[NumWebkitClassIds]; \n' |
| 1499 '\n' | |
| 1500 'extern _DartWebkitClassInfo DartWebkitClassInfo;\n' | |
| 1501 '\n' | |
| 1502 '} // namespace WebCore\n' | |
| 1503 '#endif // DartWebkitClassIds_h\n'); | |
| 1451 | 1504 |
| 1452 path = os.path.join(output_dir, 'DartWebkitClassIds.cpp') | 1505 path = os.path.join(output_dir, 'DartWebkitClassIds.cpp') |
| 1453 e = self._emitters.FileEmitter(path) | 1506 e = self._emitters.FileEmitter(path) |
| 1454 e.Emit('// Copyright (c) 2013, the Dart project authors. Please see the AUT HORS file\n'); | 1507 e.Emit('// Copyright (c) 2013, the Dart project authors. Please see the AUT HORS file\n'); |
| 1455 e.Emit('// for details. All rights reserved. Use of this source code is gove rned by a\n'); | 1508 e.Emit('// for details. All rights reserved. Use of this source code is gove rned by a\n'); |
| 1456 e.Emit('// BSD-style license that can be found in the LICENSE file.\n'); | 1509 e.Emit('// BSD-style license that can be found in the LICENSE file.\n'); |
| 1457 e.Emit('// WARNING: Do not edit - generated code.\n'); | 1510 e.Emit('// WARNING: Do not edit - generated code.\n'); |
| 1458 e.Emit('// See dart/tools/dom/scripts/systemnative.py\n'); | 1511 e.Emit('// See dart/tools/dom/scripts/systemnative.py\n'); |
| 1459 e.Emit('\n'); | 1512 e.Emit('\n'); |
| 1513 e.Emit('#include "config.h"\n'); | |
| 1460 e.Emit('#include "DartWebkitClassIds.h"\n'); | 1514 e.Emit('#include "DartWebkitClassIds.h"\n'); |
| 1461 e.Emit('\n'); | 1515 e.Emit('\n'); |
| 1462 e.Emit('#include "bindings/dart/DartLibraryIds.h"\n'); | 1516 e.Emit('#include "bindings/dart/DartLibraryIds.h"\n'); |
| 1517 for interface in database.GetInterfaces(): | |
| 1518 if HasConverters(interface): | |
| 1519 e.Emit('#include "Dart%s.h"\n' % interface.id); | |
| 1463 e.Emit('\n'); | 1520 e.Emit('\n'); |
| 1521 | |
| 1464 e.Emit('namespace WebCore {\n'); | 1522 e.Emit('namespace WebCore {\n'); |
| 1523 | |
| 1465 e.Emit('\n'); | 1524 e.Emit('\n'); |
| 1466 e.Emit("_DartWebkitClassInfo DartWebkitClassInfo = {\n"); | 1525 |
| 1467 e.Emit(' { "_InvalidClassId", -1, -1, false, false, false },\n'); | 1526 e.Emit('ActiveDOMObject* toNullActiveDOMObject(void* value) { return 0; }\n' ); |
|
vsm
2014/04/08 20:29:27
Ditto on ASSERTs here - will these ever be called?
siva
2014/04/08 23:09:03
Yes they would be used to trigger processing in th
| |
| 1468 e.Emit(' { "_HistoryCrossFrame", DartHtmlLibraryId, -1, false, false, fal se },\n'); | 1527 e.Emit('EventTarget* toNullEventTarget(void* value) { return 0; }\n'); |
| 1469 e.Emit(' { "_LocationCrossFrame", DartHtmlLibraryId, -1, false, false, fa lse },\n'); | 1528 e.Emit('Node* toNullNode(void* value) { return 0; }\n'); |
| 1470 e.Emit(' { "_DOMWindowCrossFrame", DartHtmlLibraryId, -1, false, false, t rue },\n'); | 1529 |
| 1471 e.Emit(' { "DateTime", DartCoreLibraryId, -1, false, false, false },\n'); | 1530 e.Emit("_DartWebkitClassInfo DartWebkitClassInfo = {\n") |
| 1472 e.Emit(' { "JsObject", DartJsLibraryId, -1, false, false, false },\n'); | 1531 |
| 1473 e.Emit(' { "JsFunction", DartJsLibraryId, _JsObjectClassId, false, false, false },\n'); | 1532 e.Emit(' {\n' |
| 1474 e.Emit(' { "JsArray", DartJsLibraryId, _JsObjectClassId, false, false, fa lse },\n'); | 1533 ' "_InvalidClassId", -1, -1,\n' |
| 1534 ' toNullActiveDOMObject, toNullEventTarget, toNullNode\n' | |
| 1535 ' },\n'); | |
| 1536 e.Emit(' {\n' | |
| 1537 ' "_HistoryCrossFrame", DartHtmlLibraryId, -1,\n' | |
| 1538 ' toNullActiveDOMObject, toNullEventTarget, toNullNode\n' | |
| 1539 ' },\n'); | |
| 1540 e.Emit(' {\n' | |
| 1541 ' "_LocationCrossFrame", DartHtmlLibraryId, -1,\n' | |
| 1542 ' toNullActiveDOMObject, toNullEventTarget, toNullNode\n' | |
| 1543 ' },\n'); | |
| 1544 e.Emit(' {\n' | |
| 1545 ' "_DOMWindowCrossFrame", DartHtmlLibraryId, -1,\n' | |
| 1546 ' toNullActiveDOMObject, toNullEventTarget, toNullNode\n' | |
| 1547 ' },\n'); | |
| 1548 e.Emit(' {\n' | |
| 1549 ' "DateTime", DartCoreLibraryId, -1,\n' | |
| 1550 ' toNullActiveDOMObject, toNullEventTarget, toNullNode\n' | |
| 1551 ' },\n'); | |
| 1552 e.Emit(' {\n' | |
| 1553 ' "JsObject", DartJsLibraryId, -1,\n' | |
| 1554 ' toNullActiveDOMObject, toNullEventTarget, toNullNode\n' | |
| 1555 ' },\n'); | |
| 1556 e.Emit(' {\n' | |
| 1557 ' "JsFunction", DartJsLibraryId, _JsObjectClassId,\n' | |
| 1558 ' toNullActiveDOMObject, toNullEventTarget, toNullNode\n' | |
| 1559 ' },\n'); | |
| 1560 e.Emit(' {\n' | |
| 1561 ' "JsArray", DartJsLibraryId, _JsObjectClassId,\n' | |
| 1562 ' toNullActiveDOMObject, toNullEventTarget, toNullNode\n' | |
| 1563 ' },\n'); | |
| 1475 e.Emit(' // New types that are not auto-generated should be added here.\n '); | 1564 e.Emit(' // New types that are not auto-generated should be added here.\n '); |
| 1476 e.Emit('\n'); | |
| 1477 is_node_test = lambda interface: interface.id == 'Node' | |
| 1478 is_active_test = lambda interface: 'ActiveDOMObject' in interface.ext_attrs | |
| 1479 is_event_target_test = lambda interface: 'EventTarget' in interface.ext_attr s | |
| 1480 def TypeCheckHelper(test): | |
| 1481 return 'true' if any(map(test, database.Hierarchy(interface))) else 'false ' | |
| 1482 for interface in database.GetInterfaces(): | 1565 for interface in database.GetInterfaces(): |
| 1483 e.Emit(" {") | 1566 name = interface.id |
| 1484 type_info = type_registry.TypeInfo(interface.id) | 1567 type_info = type_registry.TypeInfo(name) |
| 1485 type_info.native_type().replace('<', '_').replace('>', '_'), | 1568 type_info.native_type().replace('<', '_').replace('>', '_') |
| 1486 e.Emit(' "%s",' % type_info.implementation_name()) | 1569 e.Emit(' {\n') |
| 1487 e.Emit(' Dart%sLibraryId,' % renamer.GetLibraryId(interface)) | 1570 e.Emit(' "%s", ' % type_info.implementation_name()) |
| 1571 e.Emit('Dart%sLibraryId, ' % renamer.GetLibraryId(interface)) | |
| 1488 if interface.parents: | 1572 if interface.parents: |
| 1489 supertype = interface.parents[0].type.id | 1573 supertype = interface.parents[0].type.id |
| 1490 e.Emit(' %sClassId,\n' % supertype) | 1574 e.Emit('%sClassId,\n' % supertype) |
| 1491 else: | 1575 else: |
| 1492 e.Emit(' -1,') | 1576 e.Emit(' -1,\n') |
| 1493 e.Emit(" %s," % TypeCheckHelper(is_node_test)) | 1577 if HasConverters(interface): |
| 1494 e.Emit(" %s," % TypeCheckHelper(is_active_test)) | 1578 e.Emit(' Dart%s::toActiveDOMObject, Dart%s::toEventTarget,' |
| 1495 e.Emit(" %s," % TypeCheckHelper(is_event_target_test)) | 1579 ' Dart%s::toNode\n' % (name, name, name)) |
| 1496 e.Emit(" },\n") | 1580 else: |
| 1581 e.Emit(' toNullActiveDOMObject, toNullEventTarget, toNullNode\n') | |
| 1582 e.Emit(' },\n') | |
| 1583 | |
| 1497 e.Emit("};\n"); | 1584 e.Emit("};\n"); |
| 1498 e.Emit('\n'); | 1585 e.Emit('\n'); |
| 1499 e.Emit('} // namespace WebCore\n'); | 1586 e.Emit('} // namespace WebCore\n'); |
| 1500 | 1587 |
| 1501 def _IsOptionalStringArgumentInInitEventMethod(interface, operation, argument): | 1588 def _IsOptionalStringArgumentInInitEventMethod(interface, operation, argument): |
| 1502 return ( | 1589 return ( |
| 1503 interface.id.endswith('Event') and | 1590 interface.id.endswith('Event') and |
| 1504 operation.id.startswith('init') and | 1591 operation.id.startswith('init') and |
| 1505 argument.ext_attrs.get('Default') == 'Undefined' and | 1592 argument.ext_attrs.get('Default') == 'Undefined' and |
| 1506 argument.type.id == 'DOMString') | 1593 argument.type.id == 'DOMString') |
| OLD | NEW |