Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: tools/dom/scripts/systemnative.py

Issue 224993003: Refactor the class id generation code a bit to make it possible to have toActiveDOMObject, ToEventT… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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')
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698