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

Side by Side Diff: Source/bindings/scripts/unstable/v8_attributes.py

Issue 117063002: IDL compiler: [RaisesException] interface type attribute (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: EventHandler Created 7 years 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
« no previous file with comments | « no previous file | Source/bindings/tests/idls/TestObjectPython.idl » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (C) 2013 Google Inc. All rights reserved. 1 # Copyright (C) 2013 Google Inc. All rights reserved.
2 # 2 #
3 # Redistribution and use in source and binary forms, with or without 3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions are 4 # modification, are permitted provided that the following conditions are
5 # met: 5 # met:
6 # 6 #
7 # * Redistributions of source code must retain the above copyright 7 # * Redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer. 8 # notice, this list of conditions and the following disclaimer.
9 # * Redistributions in binary form must reproduce the above 9 # * Redistributions in binary form must reproduce the above
10 # copyright notice, this list of conditions and the following disclaimer 10 # copyright notice, this list of conditions and the following disclaimer
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 133
134 # Getter 134 # Getter
135 135
136 def generate_getter(interface, attribute, contents): 136 def generate_getter(interface, attribute, contents):
137 idl_type = attribute.idl_type 137 idl_type = attribute.idl_type
138 extended_attributes = attribute.extended_attributes 138 extended_attributes = attribute.extended_attributes
139 139
140 cpp_value = getter_expression(interface, attribute, contents) 140 cpp_value = getter_expression(interface, attribute, contents)
141 # Normally we can inline the function call into the return statement to 141 # Normally we can inline the function call into the return statement to
142 # avoid the overhead of using a Ref<> temporary, but for some cases 142 # avoid the overhead of using a Ref<> temporary, but for some cases
143 # (nullable types, EventHandler, [CachedAttribute], or if there are 143 # (nullable types, [RaisesException], [CachedAttribute], and EventHandler)
144 # exceptions), we need to use a local variable. 144 # we need to use a local variable.
145 # FIXME: check if compilers are smart enough to inline this, and if so, 145 # FIXME: check if compilers are smart enough to inline this, and if so,
146 # always use a local variable (for readability and CG simplicity). 146 # always use a local variable (for readability and CG simplicity).
147 if (attribute.is_nullable or 147 if idl_type == 'EventHandler':
148 idl_type == 'EventHandler' or
149 'CachedAttribute' in extended_attributes or
150 contents['is_getter_raises_exception']):
151 contents['cpp_value_original'] = cpp_value 148 contents['cpp_value_original'] = cpp_value
152 cpp_value = 'jsValue' 149 cpp_rvalue = cpp_value = 'jsValue'
150 elif (attribute.is_nullable or
151 contents['is_getter_raises_exception'] or
152 'CachedAttribute' in extended_attributes):
153 contents['cpp_value_original'] = cpp_value
154 cpp_rvalue = cpp_value = 'jsValue'
155 if v8_types.is_interface_type(idl_type):
156 cpp_rvalue += '.release()'
157 else:
158 cpp_rvalue = cpp_value
153 159
154 if contents['is_keep_alive_for_gc']: 160 if contents['is_keep_alive_for_gc']:
155 v8_set_return_value_statement = 'v8SetReturnValue(info, wrapper)' 161 v8_set_return_value_statement = 'v8SetReturnValue(info, wrapper)'
156 includes.add('bindings/v8/V8HiddenPropertyName.h') 162 includes.add('bindings/v8/V8HiddenPropertyName.h')
157 else: 163 else:
158 v8_set_return_value_statement = v8_types.v8_set_return_value(idl_type, c pp_value, extended_attributes=extended_attributes, script_wrappable='imp') 164 v8_set_return_value_statement = v8_types.v8_set_return_value(idl_type, c pp_rvalue, extended_attributes=extended_attributes, script_wrappable='imp')
159 165
160 contents.update({ 166 contents.update({
161 'cpp_value': cpp_value, 167 'cpp_value': cpp_value,
162 'v8_set_return_value': v8_set_return_value_statement, 168 'v8_set_return_value': v8_set_return_value_statement,
163 }) 169 })
164 170
165 171
166 def getter_expression(interface, attribute, contents): 172 def getter_expression(interface, attribute, contents):
167 arguments = [] 173 arguments = []
168 this_getter_base_name = getter_base_name(attribute, arguments) 174 this_getter_base_name = getter_base_name(attribute, arguments)
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 property_attributes_list.append('v8::DontEnum') 328 property_attributes_list.append('v8::DontEnum')
323 if 'Unforgeable' in extended_attributes: 329 if 'Unforgeable' in extended_attributes:
324 property_attributes_list.append('v8::DontDelete') 330 property_attributes_list.append('v8::DontDelete')
325 return property_attributes_list or ['v8::None'] 331 return property_attributes_list or ['v8::None']
326 332
327 333
328 # Constructors 334 # Constructors
329 335
330 def is_constructor_attribute(attribute): 336 def is_constructor_attribute(attribute):
331 return attribute.idl_type.endswith('Constructor') 337 return attribute.idl_type.endswith('Constructor')
OLDNEW
« no previous file with comments | « no previous file | Source/bindings/tests/idls/TestObjectPython.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698