05/25/2006: mutandiz
[allegrocl] Fix bug in generation of CLOS type declarations for unions and equivalent types. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@9133 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
7808da6cd2
commit
3069aa45fb
3 changed files with 26 additions and 7 deletions
|
|
@ -1,7 +1,12 @@
|
||||||
Version 1.3.30 (in progress)
|
Version 1.3.30 (in progress)
|
||||||
============================
|
============================
|
||||||
|
|
||||||
05/24/2005: mutandiz
|
05/25/2006: mutandiz
|
||||||
|
[allegrocl]
|
||||||
|
Fix bug in generation of CLOS type declarations for unions
|
||||||
|
and equivalent types.
|
||||||
|
|
||||||
|
05/24/2006: mutandiz
|
||||||
[allegrocl]
|
[allegrocl]
|
||||||
Don't require a full class definition to generate a CLOS wrapper.
|
Don't require a full class definition to generate a CLOS wrapper.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -78,4 +78,3 @@ INOUT_TYPEMAP(char *,
|
||||||
// long long support not yet complete
|
// long long support not yet complete
|
||||||
// INOUT_TYPEMAP(long long);
|
// INOUT_TYPEMAP(long long);
|
||||||
// INOUT_TYPEMAP(unsigned long long);
|
// INOUT_TYPEMAP(unsigned long long);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -385,7 +385,7 @@ void add_defined_foreign_type(Node *n,
|
||||||
k, ns, name, overwrite);
|
k, ns, name, overwrite);
|
||||||
#endif
|
#endif
|
||||||
String *mangled_name_gen =
|
String *mangled_name_gen =
|
||||||
NewStringf("#.(swig-insert-id \"%s\" %s)", name, ns_list);
|
NewStringf("#.(swig-insert-id \"%s\" %s :type :type)", name, ns_list);
|
||||||
String *mangled_lname_gen =
|
String *mangled_lname_gen =
|
||||||
NewStringf("#.(swig-insert-id \"%s\" %s :type :class)", name, ns_list);
|
NewStringf("#.(swig-insert-id \"%s\" %s :type :class)", name, ns_list);
|
||||||
|
|
||||||
|
|
@ -505,6 +505,7 @@ void add_defined_foreign_type(Node *n,
|
||||||
if((Strstr(type,"struct ") || Strstr(type,"union "))
|
if((Strstr(type,"struct ") || Strstr(type,"union "))
|
||||||
&& defined_type && !Strcmp(defined_type,defined_key_type)) {
|
&& defined_type && !Strcmp(defined_type,defined_key_type)) {
|
||||||
// mark as a synonym but don't add to linked_type list
|
// mark as a synonym but don't add to linked_type list
|
||||||
|
// Printf(stderr,"*** 4.8\n");
|
||||||
Setattr(n,"allegrocl:synonym","1");
|
Setattr(n,"allegrocl:synonym","1");
|
||||||
} else {
|
} else {
|
||||||
SwigType *lookup_type = SwigType_istemplate(type) ?
|
SwigType *lookup_type = SwigType_istemplate(type) ?
|
||||||
|
|
@ -513,8 +514,10 @@ void add_defined_foreign_type(Node *n,
|
||||||
if(match) {
|
if(match) {
|
||||||
Setattr(n,"allegrocl:synonym","1");
|
Setattr(n,"allegrocl:synonym","1");
|
||||||
Setattr(n,"allegrocl:synonym-of",match);
|
Setattr(n,"allegrocl:synonym-of",match);
|
||||||
|
Setattr(n,"real-name",Copy(lookup_type));
|
||||||
|
|
||||||
// Printf(stderr, "*** pre-5: found match of '%s'(%x)\n", Getattr(match,"name"),match);
|
// Printf(stderr, "*** pre-5: found match of '%s'(%x)\n", Getattr(match,"name"),match);
|
||||||
// if(n == match) Printf(stderr, "Hey-5 * setting synonym of %x to %x\n", n, match);
|
// if(n == match) Printf(stderr, "Hey-5 *** setting synonym of %x to %x\n", n, match);
|
||||||
// Printf(stderr,"*** 5\n");
|
// Printf(stderr,"*** 5\n");
|
||||||
add_linked_type(n);
|
add_linked_type(n);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -1058,21 +1061,33 @@ void emit_synonym(Node *synonym) {
|
||||||
Node *of = get_primary_synonym_of(synonym);
|
Node *of = get_primary_synonym_of(synonym);
|
||||||
|
|
||||||
if(is_tempInst) {
|
if(is_tempInst) {
|
||||||
|
// Printf(stderr, "*** using real-name '%s'\n", Getattr(synonym,"real-name"));
|
||||||
synonym_type = Getattr(synonym,"real-name");
|
synonym_type = Getattr(synonym,"real-name");
|
||||||
} else {
|
} else {
|
||||||
|
// Printf(stderr, "*** using name '%s'\n", Getattr(synonym,"name"));
|
||||||
synonym_type = Getattr(synonym,"name");
|
synonym_type = Getattr(synonym,"name");
|
||||||
}
|
}
|
||||||
|
|
||||||
String *synonym_ns = listify_namespace(Getattr(synonym,"allegrocl:namespace"));
|
String *synonym_ns = listify_namespace(Getattr(synonym,"allegrocl:namespace"));
|
||||||
|
String *syn_ltype, *syn_type, *of_ltype;
|
||||||
// String *of_cdeclname = Getattr(of,"allegrocl:classDeclarationName");
|
// String *of_cdeclname = Getattr(of,"allegrocl:classDeclarationName");
|
||||||
String *of_ns = Getattr(of,"allegrocl:namespace");
|
String *of_ns = Getattr(of,"allegrocl:namespace");
|
||||||
String *of_ns_list = listify_namespace(of_ns);
|
String *of_ns_list = listify_namespace(of_ns);
|
||||||
// String *of_name = of_cdeclname ? NewStringf("struct %s", Getattr(of,"name")) : NewStringf("%s::%s", of_ns, Getattr(of,"sym:name"));
|
// String *of_name = of_cdeclname ? NewStringf("struct %s", Getattr(of,"name")) : NewStringf("%s::%s", of_ns, Getattr(of,"sym:name"));
|
||||||
// String *of_name = NewStringf("%s::%s", of_ns, Getattr(of,"sym:name"));
|
// String *of_name = NewStringf("%s::%s", of_ns, Getattr(of,"sym:name"));
|
||||||
String *of_name = namespaced_name(of, of_ns);
|
String *of_name = namespaced_name(of, of_ns);
|
||||||
String *syn_ltype = lookup_defined_foreign_ltype(synonym_type);
|
|
||||||
String *syn_type = lookup_defined_foreign_type(synonym_type);
|
if(CPlusPlus && !Strcmp(nodeType(synonym),"cdecl")) {
|
||||||
String *of_ltype = lookup_defined_foreign_ltype(of_name);
|
syn_ltype = NewStringf("#.(swig-insert-id \"%s\" %s :type :class)",
|
||||||
|
Getattr(synonym,"real-name"),synonym_ns);
|
||||||
|
syn_type = NewStringf("#.(swig-insert-id \"%s\" %s :type :type)",
|
||||||
|
Getattr(synonym,"real-name"),synonym_ns);
|
||||||
|
} else {
|
||||||
|
syn_ltype = lookup_defined_foreign_ltype(synonym_type);
|
||||||
|
syn_type = lookup_defined_foreign_type(synonym_type);
|
||||||
|
}
|
||||||
|
|
||||||
|
of_ltype = lookup_defined_foreign_ltype(of_name);
|
||||||
|
|
||||||
// Printf(f_clhead,";; from emit-synonym\n");
|
// Printf(f_clhead,";; from emit-synonym\n");
|
||||||
Printf(f_clhead,"(swig-def-synonym-type %s\n %s\n %s)\n", syn_ltype, of_ltype, syn_type);
|
Printf(f_clhead,"(swig-def-synonym-type %s\n %s\n %s)\n", syn_ltype, of_ltype, syn_type);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue