def mangler(self, name, types, *, abi_tags=(), uid=None): """ Perform name mangling. """ return funcdesc.default_mangler(name, types, abi_tags=abi_tags, uid=uid)
def test_unicode_fname(self): fname = u'foಠ' argtypes = types.int32, types.float32 name = default_mangler(fname, argtypes) self.assertIsInstance(name, str) # manually encode it unichar = fname[2] enc = ''.join('${:02x}'.format(c) for c in unichar.encode('utf8')) text = 'fo' + enc expect = '_Z{}{}if'.format(len(text), text) self.assertEqual(name, expect) # ensure result chars are in the right charset self.assertRegexpMatches(name, r'^_Z[a-zA-Z0-9_\$]+$')
def test_unicode_fname(self): fname = u"foಠ" argtypes = types.int32, types.float32 name = default_mangler(fname, argtypes) self.assertIsInstance(name, str) # manually encode it unichar = fname[2] enc = "".join("${:02x}".format(utils.asbyteint(c)) for c in unichar.encode("utf8")) text = "fo" + enc expect = "_Z{}{}if".format(len(text), text) self.assertEqual(name, expect) # ensure result chars are in the right charset self.assertRegexpMatches(name, r"^_Z[a-zA-Z0-9_\$]+$")
def _lower(self, context, library, fndesc, func_ir, metadata): """Create Lower with changed linkageName in debug info""" lower = WrapperDefaultLower(context, library, fndesc, func_ir, metadata) # Debuginfo if context.enable_debuginfo: from numba.core.funcdesc import qualifying_prefix, default_mangler from numba_dppy.dppy_debuginfo import DPPYDIBuilder qualprefix = qualifying_prefix(fndesc.modname, fndesc.qualname) mangled_qualname = default_mangler(qualprefix, fndesc.argtypes) lower.debuginfo = DPPYDIBuilder( module=lower.module, filepath=func_ir.loc.filename, linkage_name=mangled_qualname, ) return lower
def test_demangling_from_mangled_symbols(self): """Test demangling of flags from mangled symbol""" # Use default mangler to mangle the string fname = 'foo' argtypes = types.int32, flags = Flags() flags.nrt = True flags.target_backend = "myhardware" name = default_mangler( fname, argtypes, abi_tags=[flags.get_mangle_string()], ) # Find the ABI-tag. Starts with "B" prefix = "_Z3fooB" # Find the length of the ABI-tag m = re.match("[0-9]+", name[len(prefix):]) size = m.group(0) # Extract the ABI tag base = len(prefix) + len(size) abi_mangled = name[base:base + int(size)] # Demangle and check demangled = Flags.demangle(abi_mangled) self.assertEqual(demangled, flags.summary())
def mangler(self, name, types): """ Perform name mangling. """ return funcdesc.default_mangler(name, types)
def test_two_args(self): fname = 'foo' argtypes = types.int32, types.float32 name = default_mangler(fname, argtypes) self.assertEqual(name, '_Z3fooif')
def test_one_args(self): fname = 'foo' argtypes = types.int32, name = default_mangler(fname, argtypes) self.assertEqual(name, '_Z3fooi')
def test_one_args(self): fname = "foo" argtypes = (types.int32, ) name = default_mangler(fname, argtypes) self.assertEqual(name, "_Z3fooi")