(tmop_name): Fix for the case of a String *op.
This fixes the Guile testcase pointer_in_out (and others). git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@4913 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
599cf52a50
commit
38627eac3f
1 changed files with 15 additions and 2 deletions
|
|
@ -59,11 +59,24 @@ void Swig_typemap_init() {
|
||||||
static String *tmop_name(const String_or_char *op) {
|
static String *tmop_name(const String_or_char *op) {
|
||||||
static Hash *names = 0;
|
static Hash *names = 0;
|
||||||
String *s;
|
String *s;
|
||||||
|
/* Due to "interesting" object-identity semantics of DOH,
|
||||||
|
we have to make sure that we only intern strings without object
|
||||||
|
identity into the hash table.
|
||||||
|
|
||||||
|
(Swig_typemap_attach_kwargs calls tmop_name several times with
|
||||||
|
the "same" String *op (i.e., same object identity) but differing
|
||||||
|
string values.)
|
||||||
|
|
||||||
|
Most other callers work around this by using char* rather than
|
||||||
|
String *.
|
||||||
|
-- mkoeppe, Jun 17, 2003
|
||||||
|
*/
|
||||||
|
const char *op_without_object_identity = Char(op);
|
||||||
if (!names) names = NewHash();
|
if (!names) names = NewHash();
|
||||||
s = Getattr(names,op);
|
s = Getattr(names, op_without_object_identity);
|
||||||
if (s) return s;
|
if (s) return s;
|
||||||
s = NewStringf("tmap:%s",op);
|
s = NewStringf("tmap:%s",op);
|
||||||
Setattr(names,op,s);
|
Setattr(names,op_without_object_identity,s);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue