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)
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'])
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()
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())
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)
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)
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
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)