| OLD | NEW |
| 1 # Copyright (C) 2013 Google Inc. All rights reserved. | 1 # Copyright (C) 2013 Google Inc. All rights reserved. |
| 2 # coding=utf-8 | 2 # coding=utf-8 |
| 3 # | 3 # |
| 4 # Redistribution and use in source and binary forms, with or without | 4 # Redistribution and use in source and binary forms, with or without |
| 5 # modification, are permitted provided that the following conditions are | 5 # modification, are permitted provided that the following conditions are |
| 6 # met: | 6 # met: |
| 7 # | 7 # |
| 8 # * Redistributions of source code must retain the above copyright | 8 # * Redistributions of source code must retain the above copyright |
| 9 # notice, this list of conditions and the following disclaimer. | 9 # notice, this list of conditions and the following disclaimer. |
| 10 # * Redistributions in binary form must reproduce the above | 10 # * Redistributions in binary form must reproduce the above |
| (...skipping 819 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 830 ################################################################################ | 830 ################################################################################ |
| 831 # Constructors | 831 # Constructors |
| 832 ################################################################################ | 832 ################################################################################ |
| 833 | 833 |
| 834 # [Constructor] | 834 # [Constructor] |
| 835 def generate_constructor(interface, constructor): | 835 def generate_constructor(interface, constructor): |
| 836 arguments_need_try_catch = any(v8_methods.argument_needs_try_catch(argument) | 836 arguments_need_try_catch = any(v8_methods.argument_needs_try_catch(argument) |
| 837 for argument in constructor.arguments) | 837 for argument in constructor.arguments) |
| 838 | 838 |
| 839 return { | 839 return { |
| 840 'argument_list': constructor_argument_list(interface, constructor), | |
| 841 'arguments': [v8_methods.generate_argument(interface, constructor, argum
ent, index) | 840 'arguments': [v8_methods.generate_argument(interface, constructor, argum
ent, index) |
| 842 for index, argument in enumerate(constructor.arguments)], | 841 for index, argument in enumerate(constructor.arguments)], |
| 843 'arguments_need_try_catch': arguments_need_try_catch, | 842 'arguments_need_try_catch': arguments_need_try_catch, |
| 844 'cpp_type': cpp_template_type( | 843 'cpp_type': cpp_template_type( |
| 845 cpp_ptr_type('RefPtr', 'RawPtr', gc_type(interface)), | 844 cpp_ptr_type('RefPtr', 'RawPtr', gc_type(interface)), |
| 846 cpp_name(interface)), | 845 cpp_name(interface)), |
| 846 'cpp_value': v8_methods.cpp_value( |
| 847 interface, constructor, len(constructor.arguments)), |
| 847 'has_exception_state': | 848 'has_exception_state': |
| 848 # [RaisesException=Constructor] | 849 # [RaisesException=Constructor] |
| 849 interface.extended_attributes.get('RaisesException') == 'Constructor
' or | 850 interface.extended_attributes.get('RaisesException') == 'Constructor
' or |
| 850 any(argument for argument in constructor.arguments | 851 any(argument for argument in constructor.arguments |
| 851 if argument.idl_type.name == 'SerializedScriptValue' or | 852 if argument.idl_type.name == 'SerializedScriptValue' or |
| 852 argument.idl_type.is_integer_type), | 853 argument.idl_type.is_integer_type), |
| 853 'is_constructor': True, | 854 'is_constructor': True, |
| 854 'is_named_constructor': False, | 855 'is_named_constructor': False, |
| 855 'number_of_required_arguments': | 856 'number_of_required_arguments': |
| 856 number_of_required_arguments(constructor), | 857 number_of_required_arguments(constructor), |
| 857 } | 858 } |
| 858 | 859 |
| 859 | 860 |
| 860 def constructor_argument_list(interface, constructor): | |
| 861 arguments = [] | |
| 862 # [ConstructorCallWith=ExecutionContext] | |
| 863 if has_extended_attribute_value(interface, 'ConstructorCallWith', 'Execution
Context'): | |
| 864 arguments.append('context') | |
| 865 # [ConstructorCallWith=Document] | |
| 866 if has_extended_attribute_value(interface, 'ConstructorCallWith', 'Document'
): | |
| 867 arguments.append('document') | |
| 868 | |
| 869 arguments.extend([argument.name for argument in constructor.arguments]) | |
| 870 | |
| 871 # [RaisesException=Constructor] | |
| 872 if interface.extended_attributes.get('RaisesException') == 'Constructor': | |
| 873 arguments.append('exceptionState') | |
| 874 | |
| 875 return arguments | |
| 876 | |
| 877 | |
| 878 # [NamedConstructor] | 861 # [NamedConstructor] |
| 879 def generate_named_constructor(interface): | 862 def generate_named_constructor(interface): |
| 880 extended_attributes = interface.extended_attributes | 863 extended_attributes = interface.extended_attributes |
| 881 if 'NamedConstructor' not in extended_attributes: | 864 if 'NamedConstructor' not in extended_attributes: |
| 882 return None | 865 return None |
| 883 # FIXME: parser should return named constructor separately; | 866 # FIXME: parser should return named constructor separately; |
| 884 # included in constructors (and only name stored in extended attribute) | 867 # included in constructors (and only name stored in extended attribute) |
| 885 # for Perl compatibility | 868 # for Perl compatibility |
| 886 idl_constructor = interface.constructors[0] | 869 idl_constructor = interface.constructors[-1] |
| 870 assert idl_constructor.name == 'NamedConstructor' |
| 887 constructor = generate_constructor(interface, idl_constructor) | 871 constructor = generate_constructor(interface, idl_constructor) |
| 888 constructor['argument_list'].insert(0, '*document') | |
| 889 constructor.update({ | 872 constructor.update({ |
| 890 'name': extended_attributes['NamedConstructor'], | 873 'name': extended_attributes['NamedConstructor'], |
| 891 'is_named_constructor': True, | 874 'is_named_constructor': True, |
| 892 }) | 875 }) |
| 893 return constructor | 876 return constructor |
| 894 | 877 |
| 895 | 878 |
| 896 def number_of_required_arguments(constructor): | 879 def number_of_required_arguments(constructor): |
| 897 return len([argument for argument in constructor.arguments | 880 return len([argument for argument in constructor.arguments |
| 898 if not argument.is_optional]) | 881 if not argument.is_optional]) |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1090 deleter = next( | 1073 deleter = next( |
| 1091 method | 1074 method |
| 1092 for method in interface.operations | 1075 for method in interface.operations |
| 1093 if ('deleter' in method.specials and | 1076 if ('deleter' in method.specials and |
| 1094 len(method.arguments) == 1 and | 1077 len(method.arguments) == 1 and |
| 1095 str(method.arguments[0].idl_type) == 'DOMString')) | 1078 str(method.arguments[0].idl_type) == 'DOMString')) |
| 1096 except StopIteration: | 1079 except StopIteration: |
| 1097 return None | 1080 return None |
| 1098 | 1081 |
| 1099 return property_deleter(deleter) | 1082 return property_deleter(deleter) |
| OLD | NEW |