| Index: Source/bindings/scripts/v8_includes.py | 
| diff --git a/Source/bindings/scripts/v8_includes.py b/Source/bindings/scripts/v8_includes.py | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..6c7b7b349f766c4d523a18e24bec4e806be15a3a | 
| --- /dev/null | 
| +++ b/Source/bindings/scripts/v8_includes.py | 
| @@ -0,0 +1,131 @@ | 
| +# Copyright (C) 2013 Google Inc. All rights reserved. | 
| +# | 
| +# Redistribution and use in source and binary forms, with or without | 
| +# modification, are permitted provided that the following conditions are | 
| +# met: | 
| +# | 
| +#     * Redistributions of source code must retain the above copyright | 
| +# notice, this list of conditions and the following disclaimer. | 
| +#     * Redistributions in binary form must reproduce the above | 
| +# copyright notice, this list of conditions and the following disclaimer | 
| +# in the documentation and/or other materials provided with the | 
| +# distribution. | 
| +#     * Neither the name of Google Inc. nor the names of its | 
| +# contributors may be used to endorse or promote products derived from | 
| +# this software without specific prior written permission. | 
| +# | 
| +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
| +# 'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
| +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
| +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 
| +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
| +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 
| +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
| +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
| +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
| +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
| +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
| + | 
| +import posixpath | 
| + | 
| +from v8_types import get_array_or_sequence_type, primitive_type | 
| + | 
| +# WIP | 
| +from code_generator_idl_reader import idl_file_rel_dir_posix | 
| +from v8_types import is_callback_function_type, is_typed_array_type, skip_include_header | 
| + | 
| +CALLBACK_INTERFACE_H_INCLUDES = set([ | 
| +    'bindings/v8/ActiveDOMCallback.h', | 
| +    'bindings/v8/DOMWrapperWorld.h', | 
| +    'bindings/v8/ScopedPersistent.h', | 
| +]) | 
| +CALLBACK_INTERFACE_CPP_INCLUDES = set([ | 
| +    'core/dom/ScriptExecutionContext.h', | 
| +    'bindings/v8/V8Binding.h', | 
| +    'bindings/v8/V8Callback.h', | 
| +    'wtf/Assertions.h', | 
| +]) | 
| + | 
| +INTERFACE_H_INCLUDES = set([ | 
| +    'bindings/v8/V8Binding.h', | 
| +    'bindings/v8/V8DOMWrapper.h', | 
| +    'bindings/v8/WrapperTypeInfo.h', | 
| +]) | 
| +INTERFACE_CPP_INCLUDES = set([ | 
| +    'RuntimeEnabledFeatures.h', | 
| +    'bindings/v8/ScriptController.h', | 
| +    'bindings/v8/V8Binding.h', | 
| +    'bindings/v8/V8DOMWrapper.h', | 
| +    'bindings/v8/V8DOMConfiguration.h', | 
| +    'core/dom/ContextFeatures.h', | 
| +    'core/dom/Document.h', | 
| +    'core/page/Frame.h', | 
| +    'core/platform/chromium/TraceEvent.h', | 
| +    'wtf/UnusedParam.h', | 
| +]) | 
| + | 
| + | 
| +def includes_for_type(data_type): | 
| +    if primitive_type(data_type) or data_type == 'DOMString': | 
| +        return set() | 
| +    array_or_sequence_type = get_array_or_sequence_type(data_type) | 
| +    if array_or_sequence_type: | 
| +        return includes_for_type(array_or_sequence_type) | 
| +    return set(['V8%s.h' % data_type]) | 
| + | 
| + | 
| +def includes_for_cpp_class(class_name, relative_dir_posix): | 
| +    return set([posixpath.join('bindings', relative_dir_posix, class_name + '.h')]) | 
| + | 
| + | 
| +def includes_for_operation(operation): | 
| +    includes = includes_for_type(operation.data_type) | 
| +    for parameter in operation.arguments: | 
| +        includes |= includes_for_type(parameter.data_type) | 
| +    return includes | 
| + | 
| + | 
| +################################################################################ | 
| +# WIP | 
| +# FIXME: below use lists, not sets | 
| +################################################################################ | 
| + | 
| + | 
| +def get_includes_for_type(data_type): | 
| +    # print 'get_includes_for_type', data_type | 
| +    if skip_include_header(data_type): | 
| +        return [] | 
| +    if data_type in ['EventListener', 'EventHandler']: | 
| +        return ['core/dom/EventListener.h'] | 
| +    if data_type == 'SerializedScriptValue': | 
| +        return ['bindings/v8/SerializedScriptValue.h'] | 
| +    if data_type == 'any' or is_callback_function_type(data_type): | 
| +        return ['bindings/v8/ScriptValue.h'] | 
| +    return ['V8%s.h' % data_type] | 
| + | 
| + | 
| +def get_includes_for_parameter(parameter): | 
| +    array_or_sequence_type = get_array_or_sequence_type(parameter.data_type) | 
| +    if not array_or_sequence_type: | 
| +        return get_includes_for_type(parameter.data_type) | 
| +    if is_ref_ptr_type(array_or_sequence_type): | 
| +        return get_includes_for_type(array_or_sequence_type) | 
| +    return [] | 
| + | 
| + | 
| +def get_includes_for_operation(operation): | 
| +    includes = get_includes_for_type(operation.data_type) | 
| +    for parameter in operation.arguments: | 
| +        includes += get_includes_for_parameter(parameter) | 
| +    return includes | 
| + | 
| + | 
| +def header_files_for_interface(interface_name, cpp_class_name): | 
| +    """HeaderFilesForInterface in perl""" | 
| +#         print '[header_files_for_interface]', interface_name, cpp_class_name | 
| +    if is_typed_array_type(interface_name): | 
| +        return ['wtf/%s.h' % interface_name] | 
| +    elif not skip_include_header(interface_name): | 
| +        relative_dir_posix = idl_file_rel_dir_posix(interface_name) | 
| +        return list(includes_for_cpp_class(cpp_class_name, relative_dir_posix)) | 
| +    return [] | 
|  |