예제 #1
0
 def mangler(self, name, types, *, abi_tags=(), uid=None):
     """
     Perform name mangling.
     """
     return funcdesc.default_mangler(name,
                                     types,
                                     abi_tags=abi_tags,
                                     uid=uid)
예제 #2
0
 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_\$]+$')
예제 #3
0
 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_\$]+$")
예제 #4
0
    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
예제 #5
0
 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())
예제 #6
0
 def mangler(self, name, types):
     """
     Perform name mangling.
     """
     return funcdesc.default_mangler(name, types)
예제 #7
0
 def test_two_args(self):
     fname = 'foo'
     argtypes = types.int32, types.float32
     name = default_mangler(fname, argtypes)
     self.assertEqual(name, '_Z3fooif')
예제 #8
0
 def test_one_args(self):
     fname = 'foo'
     argtypes = types.int32,
     name = default_mangler(fname, argtypes)
     self.assertEqual(name, '_Z3fooi')
예제 #9
0
 def test_one_args(self):
     fname = "foo"
     argtypes = (types.int32, )
     name = default_mangler(fname, argtypes)
     self.assertEqual(name, "_Z3fooi")