コード例 #1
0
def generate_conditional_features(info_provider, options, idl_filenames):
    reader = IdlReader(info_provider.interfaces_info, options.cache_directory)
    jinja_env = initialize_jinja_env(options.cache_directory)

    # Extract the bidirectional mapping of conditional features <-> interfaces
    # from the global info provider and the supplied list of IDL files.
    feature_info = conditional_features_info(info_provider, reader,
                                             idl_filenames,
                                             options.target_component.lower())

    # Convert that mapping into the context required for the Jinja2 templates.
    template_context = conditional_features_context(MODULE_PYNAME,
                                                    feature_info)

    # Generate and write out the header file
    header_text = render_template(
        jinja_env.get_template("ConditionalFeaturesFor%s.h.tmpl" %
                               options.target_component.title()),
        template_context)
    header_path = posixpath.join(
        options.output_directory,
        "ConditionalFeaturesFor%s.h" % options.target_component.title())
    write_file(header_text, header_path)

    # Generate and write out the implementation file
    cpp_text = render_template(
        jinja_env.get_template("ConditionalFeaturesFor%s.cpp.tmpl" %
                               options.target_component.title()),
        template_context)
    cpp_path = posixpath.join(
        options.output_directory,
        "ConditionalFeaturesFor%s.cpp" % options.target_component.title())
    write_file(cpp_text, cpp_path)
コード例 #2
0
def generate_origin_trial_features(info_provider, options, idl_filenames):
    reader = IdlReader(info_provider.interfaces_info, options.cache_directory)
    jinja_env = initialize_jinja_env(options.cache_directory)

    # Extract the bidirectional mapping of conditional features <-> interfaces
    # from the global info provider and the supplied list of IDL files.
    feature_info = origin_trial_features_info(info_provider, reader,
                                              idl_filenames,
                                              options.target_component)

    # Convert that mapping into the context required for the Jinja2 templates.
    template_context = origin_trial_features_context(MODULE_PYNAME,
                                                     feature_info)

    file_basename = 'origin_trial_features_for_%s' % options.target_component

    # Generate and write out the header file
    header_text = render_template(
        jinja_env.get_template(file_basename + '.h.tmpl'), template_context)
    header_path = posixpath.join(options.output_directory,
                                 file_basename + '.h')
    write_file(header_text, header_path)

    # Generate and write out the implementation file
    cpp_text = render_template(
        jinja_env.get_template(file_basename + '.cc.tmpl'), template_context)
    cpp_path = posixpath.join(options.output_directory, file_basename + '.cc')
    write_file(cpp_text, cpp_path)
 def __init__(self, opts, info_provider):
     self._opts = opts
     self._info_provider = info_provider
     self._reader = IdlReader(info_provider.interfaces_info, opts.cache_dir)
     self._interface_contexts = {}
     self._include_files = set(INCLUDES)
     v8_types.set_component_dirs(
         info_provider.interfaces_info['component_dirs'])
コード例 #4
0
 def __init__(self, cache_directory=None):
     self.reader = IdlReader(interfaces_info=None,
                             outputdir=cache_directory)
     self.interfaces_info = {}
     self.partial_interface_files = defaultdict(lambda: {
         'full_paths': [],
         'include_paths': [],
     })
     self.union_types = set()
コード例 #5
0
 def __init__(self,
              root_directory,
              extend_attributes_filename,
              cache_directory=None):
     self.reader = IdlReader(
         interfaces_info=None,
         outputdir=cache_directory,
         extend_attributes_filename=extend_attributes_filename)
     self.interfaces_info = {}
     self.partial_interface_files = defaultdict(lambda: {
         'full_paths': [],
         'include_paths': [],
     })
     self.enumerations = {}
     self.union_types = set()
     self.typedefs = {}
     self.callback_functions = {}
     self.root_path = root_directory
     self.referenced_from_partial_interfaces = defaultdict(lambda: set())
コード例 #6
0
 def __init__(self, output_directory, cache_directory=None,
              code_generator_class=None, info_provider=None,
              target_component=None):
     """
     Args:
       output_directory: directory to put output files.
       cache_directory: directory which contains PLY caches.
       code_generator_class: code generator class to be used.
       info_provider: component-specific information provider.
       target_component: component to be processed.
     """
     self.cache_directory = cache_directory
     self.info_provider = info_provider
     self.output_directory = output_directory
     self.target_component = target_component
     self.reader = IdlReader(info_provider.interfaces_info, cache_directory)
     self.code_generator = code_generator_class(self.info_provider,
                                                self.cache_directory,
                                                self.output_directory)
コード例 #7
0
ファイル: dart_compiler.py プロジェクト: eseidel/skydart
    def __init__(self, output_directory, code_generator=None,
                 interfaces_info=None, interfaces_info_filename='',
                 only_if_changed=False):
        """
        Args:
            interfaces_info:
                interfaces_info dict
                (avoids auxiliary file in run-bindings-tests)
            interfaces_info_file: filename of pickled interfaces_info
        """
        self.code_generator = code_generator
        if interfaces_info_filename:
            with open(interfaces_info_filename) as interfaces_info_file:
                interfaces_info = pickle.load(interfaces_info_file)
        self.interfaces_info = interfaces_info

        self.only_if_changed = only_if_changed
        self.output_directory = output_directory
        self.reader = IdlReader(interfaces_info, output_directory)
コード例 #8
0
ファイル: dump_idl.py プロジェクト: botwithfeelings/visiblev8
def collect_idl_files(webkit_root):
    from idl_reader import IdlReader
    rdr = IdlReader()

    idl_map = {}
    imp_map = {}
    alias_map = {}
    fcount = 0
    for part in ["core", "modules"]:
        search_root = os.path.join(webkit_root, VARIANT['Source'], part)
        for node, dirs, files in os.walk(search_root):
            for idl in fnmatch.filter(files, "*.idl"):
                idl_path = os.path.join(node, idl)
                if '/testing/' in idl_path:
                    print >> sys.stderr, "Ignoring 'testing' IDL file '%s'" % idl_path
                    continue
                idl_data = rdr.read_idl_file(idl_path)
                fcount += 1
                for imp_left, imp_right in idl_implementations(idl_data):
                    try:
                        imp_map[imp_left].add((imp_right, idl_path))
                    except KeyError:
                        imp_map[imp_left] = set([(imp_right, idl_path)])
                for iface, idef in idl_data.interfaces.items():
                    if 'NamedConstructor' in idef.extended_attributes:
                        alias_map[idef.extended_attributes[
                            'NamedConstructor']] = iface
                    try:
                        idl_list = idl_map[iface]
                        if idef.is_partial:
                            idl_list.append((idl_path, idef))
                        else:
                            idl_list.insert(0, (idl_path, idef))
                    except KeyError:
                        idl_map[iface] = [(idl_path, idef)]

    print >> sys.stderr, "Processed %d IDL files" % fcount
    return idl_map, imp_map, alias_map
コード例 #9
0
ファイル: idl_compiler.py プロジェクト: nwjs/chromium-iot
 def __init__(self,
              output_directory,
              cache_directory=None,
              code_generator=None,
              info_provider=None,
              only_if_changed=False,
              target_component=None):
     """
     Args:
       output_directory: directory to put output files.
       cache_directory: directory which contains PLY caches.
       code_generator: code generator to be used.
       info_provider: component-specific information provider.
       only_if_changed: True when the compiler should only write output files
         when the contents are changed.
       target_component: component to be processed.
     """
     self.cache_directory = cache_directory
     self.code_generator = code_generator
     self.info_provider = info_provider
     self.only_if_changed = only_if_changed
     self.output_directory = output_directory
     self.target_component = target_component
     self.reader = IdlReader(info_provider.interfaces_info, cache_directory)