def testOverloadedVirtual(self): i = self.p.parse( """ [scriptable, uuid(00000000-0000-0000-0000-000000000000)] interface nsISupports {}; [uuid(abc)] interface foo : nsISupports { attribute long bar; void getBar(); };""", filename="f", ) self.assertTrue(isinstance(i, xpidl.IDL)) i.resolve([], self.p, {}) class FdMock: def write(self, s): pass try: header.print_header(i, FdMock(), filename="f", relpath="f") self.assertTrue(False, "Header printing failed to fail") except Exception as e: self.assertEqual( e.args[0], "Unexpected overloaded virtual method GetBar in interface foo", )
def process(input_dirs, inc_paths, bindings_conf, cache_dir, header_dir, xpcrs_dir, xpt_dir, deps_dir, module, idl_files): p = IDLParser(outputdir=cache_dir) xpts = [] mk = Makefile() rule = mk.create_rule() glbl = {} execfile(bindings_conf, glbl) webidlconfig = glbl['DOMInterfaces'] # Write out dependencies for Python modules we import. If this list isn't # up to date, we will not re-process XPIDL files if the processor changes. rule.add_dependencies(six.ensure_text(s) for s in iter_modules_in_path(topsrcdir)) for path in idl_files: basename = os.path.basename(path) stem, _ = os.path.splitext(basename) idl_data = open(path).read() idl = p.parse(idl_data, filename=path) idl.resolve(inc_paths, p, webidlconfig) header_path = os.path.join(header_dir, '%s.h' % stem) rs_rt_path = os.path.join(xpcrs_dir, 'rt', '%s.rs' % stem) rs_bt_path = os.path.join(xpcrs_dir, 'bt', '%s.rs' % stem) xpts.append(jsonxpt.build_typelib(idl)) rule.add_dependencies(six.ensure_text(s) for s in idl.deps) with FileAvoidWrite(header_path) as fh: print_header(idl, fh, path) with FileAvoidWrite(rs_rt_path) as fh: print_rust_bindings(idl, fh, path) with FileAvoidWrite(rs_bt_path) as fh: print_rust_macros_bindings(idl, fh, path) # NOTE: We don't use FileAvoidWrite here as we may re-run this code due to a # number of different changes in the code, which may not cause the .xpt # files to be changed in any way. This means that make will re-run us every # time a build is run whether or not anything changed. To fix this we # unconditionally write out the file. xpt_path = os.path.join(xpt_dir, '%s.xpt' % module) with open(xpt_path, 'w') as fh: jsonxpt.write(jsonxpt.link(xpts), fh) rule.add_targets([six.ensure_text(xpt_path)]) if deps_dir: deps_path = os.path.join(deps_dir, '%s.pp' % module) with FileAvoidWrite(deps_path) as fh: mk.dump(fh)
def process(input_dir, inc_paths, bindings_conf, cache_dir, header_dir, xpcrs_dir, xpt_dir, deps_dir, module, stems): p = IDLParser(outputdir=cache_dir) xpts = [] mk = Makefile() rule = mk.create_rule() glbl = {} execfile(bindings_conf, glbl) webidlconfig = glbl['DOMInterfaces'] # Write out dependencies for Python modules we import. If this list isn't # up to date, we will not re-process XPIDL files if the processor changes. rule.add_dependencies(iter_modules_in_path(topsrcdir)) for stem in stems: path = os.path.join(input_dir, '%s.idl' % stem) idl_data = open(path).read() idl = p.parse(idl_data, filename=path) idl.resolve([input_dir] + inc_paths, p, webidlconfig) header_path = os.path.join(header_dir, '%s.h' % stem) rs_rt_path = os.path.join(xpcrs_dir, 'rt', '%s.rs' % stem) rs_bt_path = os.path.join(xpcrs_dir, 'bt', '%s.rs' % stem) xpts.append(jsonxpt.build_typelib(idl)) rule.add_dependencies(idl.deps) with FileAvoidWrite(header_path) as fh: print_header(idl, fh, path) with FileAvoidWrite(rs_rt_path) as fh: print_rust_bindings(idl, fh, path) with FileAvoidWrite(rs_bt_path) as fh: print_rust_macros_bindings(idl, fh, path) xpt_path = os.path.join(xpt_dir, '%s.xpt' % module) with FileAvoidWrite(xpt_path) as fh: jsonxpt.write(jsonxpt.link(xpts), fh) rule.add_targets([xpt_path]) if deps_dir: deps_path = os.path.join(deps_dir, '%s.pp' % module) with FileAvoidWrite(deps_path) as fh: mk.dump(fh)
def process(input_dir, inc_paths, cache_dir, header_dir, xpcrs_dir, xpt_dir, deps_dir, module, stems): p = IDLParser(outputdir=cache_dir) xpts = {} mk = Makefile() rule = mk.create_rule() # Write out dependencies for Python modules we import. If this list isn't # up to date, we will not re-process XPIDL files if the processor changes. rule.add_dependencies(iter_modules_in_path(topsrcdir)) for stem in stems: path = os.path.join(input_dir, '%s.idl' % stem) idl_data = open(path).read() idl = p.parse(idl_data, filename=path) idl.resolve([input_dir] + inc_paths, p) header_path = os.path.join(header_dir, '%s.h' % stem) rs_rt_path = os.path.join(xpcrs_dir, 'rt', '%s.rs' % stem) rs_bt_path = os.path.join(xpcrs_dir, 'bt', '%s.rs' % stem) xpt = BytesIO() write_typelib(idl, xpt, path) xpt.seek(0) xpts[stem] = xpt rule.add_dependencies(idl.deps) with FileAvoidWrite(header_path) as fh: print_header(idl, fh, path) with FileAvoidWrite(rs_rt_path) as fh: print_rust_bindings(idl, fh, path) with FileAvoidWrite(rs_bt_path) as fh: print_rust_macros_bindings(idl, fh, path) # TODO use FileAvoidWrite once it supports binary mode. xpt_path = os.path.join(xpt_dir, '%s.xpt' % module) xpt_link(xpts.values()).write(xpt_path) rule.add_targets([xpt_path]) if deps_dir: deps_path = os.path.join(deps_dir, '%s.pp' % module) with FileAvoidWrite(deps_path) as fh: mk.dump(fh)
def process(input_dirs, inc_paths, bindings_conf, header_dir, xpcrs_dir, xpt_dir, deps_dir, module, idl_files): p = IDLParser() xpts = [] mk = Makefile() rule = mk.create_rule() glbl = {} exec(open(bindings_conf, encoding='utf-8').read(), glbl) webidlconfig = glbl['DOMInterfaces'] # Write out dependencies for Python modules we import. If this list isn't # up to date, we will not re-process XPIDL files if the processor changes. rule.add_dependencies( six.ensure_text(s) for s in iter_modules_in_path(topsrcdir)) for path in idl_files: basename = os.path.basename(path) stem, _ = os.path.splitext(basename) idl_data = open(path, encoding='utf-8').read() idl = p.parse(idl_data, filename=path) idl.resolve(inc_paths, p, webidlconfig) header_path = os.path.join(header_dir, '%s.h' % stem) rs_rt_path = os.path.join(xpcrs_dir, 'rt', '%s.rs' % stem) rs_bt_path = os.path.join(xpcrs_dir, 'bt', '%s.rs' % stem) xpts.append(jsonxpt.build_typelib(idl)) rule.add_dependencies(six.ensure_text(s) for s in idl.deps) # The print_* functions don't actually do anything with the # passed-in path other than writing it into the file to let people # know where the original source was. This script receives # absolute paths, which are not so great to embed in header files # (they mess with deterministic generation of files on different # machines, Searchfox logic, shared compilation caches, etc.), so # we pass in fake paths that are the same across compilations, but # should still enable people to figure out where to go. relpath = mozpath.relpath(path, topsrcdir) with FileAvoidWrite(header_path) as fh: print_header(idl, fh, path, relpath) with FileAvoidWrite(rs_rt_path) as fh: print_rust_bindings(idl, fh, relpath) with FileAvoidWrite(rs_bt_path) as fh: print_rust_macros_bindings(idl, fh, relpath) # NOTE: We don't use FileAvoidWrite here as we may re-run this code due to a # number of different changes in the code, which may not cause the .xpt # files to be changed in any way. This means that make will re-run us every # time a build is run whether or not anything changed. To fix this we # unconditionally write out the file. xpt_path = os.path.join(xpt_dir, '%s.xpt' % module) with open(xpt_path, 'w', encoding='utf-8', newline='\n') as fh: jsonxpt.write(jsonxpt.link(xpts), fh) rule.add_targets([six.ensure_text(xpt_path)]) if deps_dir: deps_path = os.path.join(deps_dir, '%s.pp' % module) with FileAvoidWrite(deps_path) as fh: mk.dump(fh)