diff --git a/newbinding/binding.py b/newbinding/binding.py index adeb284..57d7c7d 100644 --- a/newbinding/binding.py +++ b/newbinding/binding.py @@ -1,4 +1,5 @@ import logging +import re from utils import * logger = logging.getLogger(__name__) @@ -41,9 +42,21 @@ def parse_arguments(println, var, *args): return unwrapped +_re_mangle_pattern = re.compile(r'[ _<>\*&]') + def mangle(name): - name = name.replace('_', '__').replace(' ', '_') - return name.replace('::', '_').rstrip('*&') + def repl(m): + s = m.group(0) + if s in '<>*&': + return '' + elif s in ' ': + return '_' + elif s in '_': + return '__' + else: + assert False + name = _re_mangle_pattern.sub(repl, name) + return name.replace('::', '_') def pycapsule_new(println, ptr, name, clsname, dtor=NULL): # build capsule diff --git a/newbinding/capsule.py b/newbinding/capsule.py index 509b4c4..e4cd4fa 100644 --- a/newbinding/capsule.py +++ b/newbinding/capsule.py @@ -36,7 +36,7 @@ def _capsule_destructor(weak): cap = weak.capsule addr = _capsule.getPointer(cap) cls = _capsule.getClassName(cap) - logger.debug("destroy pointer %s to %s", addr, cls) + logger.debug("destroy pointer 0x%08X to %s", addr, cls) weak.dtor(cap) del _owners[addr]