Interface name handling improvements and special variable changes

Support expansion of name attribute in: %feature("interface", name="%s")
%s expands to the proxy class name and all the usual %rename functions
can be used (regex, strip, camelcase etc) to derive the interface name
from the proxy class name.
Rename $interfacename family of special variables to $javainterfacename for Java
Rename $interfacename family of special variables to $csinterfacename for C#
This is to free up $interfacename for simple interface name expansion in forthcoming commit
This commit is contained in:
William S Fulton 2016-02-29 20:18:01 +00:00
commit c71dba5021
5 changed files with 83 additions and 66 deletions

View file

@ -1,37 +1,37 @@
%define DECLARE_INTERFACE_(INTERFACE, CTYPE...) %define DECLARE_INTERFACE_(INTERFACE, CTYPE...)
%feature("interface", name="INTERFACE") CTYPE; %feature("interface", name="INTERFACE") CTYPE;
%typemap(cstype) CTYPE "$&interfacename" %typemap(cstype) CTYPE "$&csinterfacename"
%typemap(cstype) CTYPE *, CTYPE [], CTYPE & "$interfacename" %typemap(cstype) CTYPE *, CTYPE [], CTYPE & "$csinterfacename"
%typemap(cstype) CTYPE *const& "$*interfacename" %typemap(cstype) CTYPE *const& "$*csinterfacename"
%typemap(csin) CTYPE, CTYPE & "$csinput.SWIGInterfaceUpcast()" %typemap(csin) CTYPE, CTYPE & "$csinput.GetInterfaceCPtr()"
%typemap(csin) CTYPE *, CTYPE *const&, CTYPE [] "$csinput == null ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : $csinput.SWIGInterfaceUpcast()" %typemap(csin) CTYPE *, CTYPE *const&, CTYPE [] "$csinput == null ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : $csinput.GetInterfaceCPtr()"
%typemap(csout, excode=SWIGEXCODE) CTYPE { %typemap(csout, excode=SWIGEXCODE) CTYPE {
$&csclassname ret = new $&csclassname($imcall, true);$excode $&csclassname ret = new $&csclassname($imcall, true);$excode
return ($&interfacename)ret; return ($&csinterfacename)ret;
} }
%typemap(csout, excode=SWIGEXCODE) CTYPE & { %typemap(csout, excode=SWIGEXCODE) CTYPE & {
$csclassname ret = new $csclassname($imcall, $owner);$excode $csclassname ret = new $csclassname($imcall, $owner);$excode
return ($interfacename)ret; return ($csinterfacename)ret;
} }
%typemap(csout, excode=SWIGEXCODE) CTYPE *, CTYPE [] { %typemap(csout, excode=SWIGEXCODE) CTYPE *, CTYPE [] {
global::System.IntPtr cPtr = $imcall; global::System.IntPtr cPtr = $imcall;
$csclassname ret = (cPtr == global::System.IntPtr.Zero) ? null : new $csclassname(cPtr, $owner);$excode $csclassname ret = (cPtr == global::System.IntPtr.Zero) ? null : new $csclassname(cPtr, $owner);$excode
return ($interfacename)ret; return ($csinterfacename)ret;
} }
%typemap(csout, excode=SWIGEXCODE) CTYPE *const& { %typemap(csout, excode=SWIGEXCODE) CTYPE *const& {
global::System.IntPtr cPtr = $imcall; global::System.IntPtr cPtr = $imcall;
$*csclassname ret = (cPtr == global::System.IntPtr.Zero) ? null : new $*csclassname(cPtr, $owner);$excode $*csclassname ret = (cPtr == global::System.IntPtr.Zero) ? null : new $*csclassname(cPtr, $owner);$excode
return ($*interfacename)ret; return ($*csinterfacename)ret;
} }
%typemap(csdirectorin) CTYPE "($&interfacename)new $&csclassname($iminput, false)" %typemap(csdirectorin) CTYPE "($&csinterfacename)new $&csclassname($iminput, false)"
%typemap(csdirectorin) CTYPE & "($interfacename)new $csclassname($iminput, false)" %typemap(csdirectorin) CTYPE & "($csinterfacename)new $csclassname($iminput, false)"
%typemap(csdirectorin) CTYPE *, CTYPE [] "($iminput == global::System.IntPtr.Zero) ? null : ($interfacename)new $csclassname($iminput, false)" %typemap(csdirectorin) CTYPE *, CTYPE [] "($iminput == global::System.IntPtr.Zero) ? null : ($csinterfacename)new $csclassname($iminput, false)"
%typemap(csdirectorin) CTYPE *const& "($iminput == global::System.IntPtr.Zero) ? null : ($*interfacename)new $*csclassname($iminput, false)" %typemap(csdirectorin) CTYPE *const& "($iminput == global::System.IntPtr.Zero) ? null : ($*csinterfacename)new $*csclassname($iminput, false)"
%typemap(csdirectorout) CTYPE, CTYPE *, CTYPE *const&, CTYPE [], CTYPE & "$cscall.SWIGInterfaceUpcast()" %typemap(csdirectorout) CTYPE, CTYPE *, CTYPE *const&, CTYPE [], CTYPE & "$cscall.GetInterfaceCPtr()"
%typemap(csinterfacecode, declaration=" [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]\n global::System.Runtime.InteropServices.HandleRef SWIGInterfaceUpcast();\n", cptrmethod=#INTERFACE##"_SWIGInterfaceUpcast") CTYPE %{ %typemap(csinterfacecode, declaration=" [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]\n global::System.Runtime.InteropServices.HandleRef GetInterfaceCPtr();\n", cptrmethod=#INTERFACE##"_GetInterfaceCPtr") CTYPE %{
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
global::System.Runtime.InteropServices.HandleRef INTERFACE.SWIGInterfaceUpcast() { global::System.Runtime.InteropServices.HandleRef INTERFACE.GetInterfaceCPtr() {
return new global::System.Runtime.InteropServices.HandleRef(this, $imclassname.$csclazzname##INTERFACE##_SWIGInterfaceUpcast(swigCPtr.Handle)); return new global::System.Runtime.InteropServices.HandleRef(this, $imclassname.$csclazzname##INTERFACE##_GetInterfaceCPtr(swigCPtr.Handle));
} }
%} %}
%enddef %enddef

View file

@ -1,44 +1,46 @@
%define DECLARE_INTERFACE_(INTERFACE, CTYPE...) %define DECLARE_INTERFACE_(INTERFACE, CTYPE...)
%feature("interface", name="INTERFACE") CTYPE; %feature("interface", name="INTERFACE") CTYPE;
//%feature("interface", name="%(rstrip:[Impl])s") CTYPE;
//%feature("interface", name="%(regex:/(.*)Impl$/\\1/)s") CTYPE;
%typemap(jtype) CTYPE, CTYPE *, CTYPE *const&, CTYPE [], CTYPE & "long" %typemap(jtype) CTYPE, CTYPE *, CTYPE *const&, CTYPE [], CTYPE & "long"
%typemap(jstype) CTYPE "$&interfacename" %typemap(jstype) CTYPE "$&javainterfacename"
%typemap(jstype) CTYPE *, CTYPE [], CTYPE & "$interfacename" %typemap(jstype) CTYPE *, CTYPE [], CTYPE & "$javainterfacename"
%typemap(jstype) CTYPE *const& "$*interfacename" %typemap(jstype) CTYPE *const& "$*javainterfacename"
%typemap(javain) CTYPE, CTYPE & "$javainput." ## #INTERFACE ## "_SWIGInterfaceUpcast()" %typemap(javain) CTYPE, CTYPE & "$javainput." ## #INTERFACE ## "_GetInterfaceCPtr()"
%typemap(javain) CTYPE *, CTYPE *const&, CTYPE [] "($javainput == null) ? 0 : $javainput." ## #INTERFACE ## "_SWIGInterfaceUpcast()" %typemap(javain) CTYPE *, CTYPE *const&, CTYPE [] "($javainput == null) ? 0 : $javainput." ## #INTERFACE ## "_GetInterfaceCPtr()"
%typemap(javaout) CTYPE { %typemap(javaout) CTYPE {
return ($&interfacename)new $&javaclassname($jnicall, true); return ($&javainterfacename)new $&javaclassname($jnicall, true);
} }
%typemap(javaout) CTYPE & { %typemap(javaout) CTYPE & {
return ($interfacename)new $javaclassname($jnicall, $owner); return ($javainterfacename)new $javaclassname($jnicall, $owner);
} }
%typemap(javaout) CTYPE *, CTYPE [] { %typemap(javaout) CTYPE *, CTYPE [] {
long cPtr = $jnicall; long cPtr = $jnicall;
return (cPtr == 0) ? null : ($interfacename)new $javaclassname(cPtr, $owner); return (cPtr == 0) ? null : ($javainterfacename)new $javaclassname(cPtr, $owner);
} }
%typemap(javaout) CTYPE *const& { %typemap(javaout) CTYPE *const& {
long cPtr = $jnicall; long cPtr = $jnicall;
return (cPtr == 0) ? null : ($interfacename)new $javaclassname(cPtr, $owner); return (cPtr == 0) ? null : ($javainterfacename)new $javaclassname(cPtr, $owner);
} }
%typemap(javadirectorin) CTYPE "($&interfacename)new $&javaclassname($jniinput, false)" %typemap(javadirectorin) CTYPE "($&javainterfacename)new $&javaclassname($jniinput, false)"
%typemap(javadirectorin) CTYPE & "($interfacename)new $javaclassname($jniinput, false)" %typemap(javadirectorin) CTYPE & "($javainterfacename)new $javaclassname($jniinput, false)"
%typemap(javadirectorin) CTYPE *, CTYPE [] "($jniinput == 0) ? null : ($interfacename)new $javaclassname($jniinput, false)" %typemap(javadirectorin) CTYPE *, CTYPE [] "($jniinput == 0) ? null : ($javainterfacename)new $javaclassname($jniinput, false)"
%typemap(javadirectorin) CTYPE *const& "($jniinput == 0) ? null : ($*interfacename)new $*javaclassname($jniinput, false)" %typemap(javadirectorin) CTYPE *const& "($jniinput == 0) ? null : ($*javainterfacename)new $*javaclassname($jniinput, false)"
%typemap(javadirectorout) CTYPE, CTYPE *, CTYPE *const&, CTYPE [], CTYPE & "$javacall." ## #INTERFACE ## "_SWIGInterfaceUpcast()" %typemap(javadirectorout) CTYPE, CTYPE *, CTYPE *const&, CTYPE [], CTYPE & "$javacall." ## #INTERFACE ## "_GetInterfaceCPtr()"
%typemap(directorin,descriptor="L$packagepath/$&interfacename;") CTYPE %typemap(directorin,descriptor="L$packagepath/$&javainterfacename;") CTYPE
%{ $input = 0; %{ $input = 0;
*(($&1_ltype*)&$input) = &$1; %} *(($&1_ltype*)&$input) = &$1; %}
%typemap(directorin,descriptor="L$packagepath/$interfacename;") CTYPE *, CTYPE [] %typemap(directorin,descriptor="L$packagepath/$javainterfacename;") CTYPE *, CTYPE []
%{ *(($&1_ltype)&$input) = ($1_ltype) $1; %} %{ *(($&1_ltype)&$input) = ($1_ltype) $1; %}
%typemap(directorin,descriptor="L$packagepath/$interfacename;") CTYPE & %typemap(directorin,descriptor="L$packagepath/$javainterfacename;") CTYPE &
%{ *($&1_ltype)&$input = ($1_ltype) &$1; %} %{ *($&1_ltype)&$input = ($1_ltype) &$1; %}
%typemap(directorin,descriptor="L$packagepath/$*interfacename;") CTYPE *const& %typemap(directorin,descriptor="L$packagepath/$*javainterfacename;") CTYPE *const&
%{ *($&1_ltype)&$input = ($1_ltype) &$1; %} %{ *($&1_ltype)&$input = ($1_ltype) &$1; %}
%typemap(javainterfacecode, declaration=" long " ## #INTERFACE ## "_SWIGInterfaceUpcast();\n", cptrmethod=#INTERFACE ## "_SWIGInterfaceUpcast") CTYPE %{ %typemap(javainterfacecode, declaration=" long " ## #INTERFACE ## "_GetInterfaceCPtr();\n", cptrmethod=#INTERFACE ## "_GetInterfaceCPtr") CTYPE %{
public long INTERFACE##_SWIGInterfaceUpcast() { public long INTERFACE##_GetInterfaceCPtr() {
return $imclassname.$javaclazzname##INTERFACE##_SWIGInterfaceUpcast(swigCPtr); return $imclassname.$javaclazzname##INTERFACE##_GetInterfaceCPtr(swigCPtr);
} }
%} %}
%enddef %enddef

View file

@ -1655,7 +1655,7 @@ public:
String *ret = Getattr(n, "interface:qname"); String *ret = Getattr(n, "interface:qname");
if (!ret) { if (!ret) {
String *nspace = Getattr(n, "sym:nspace"); String *nspace = Getattr(n, "sym:nspace");
String *interface_name = Getattr(n, "feature:interface:name"); String *interface_name = Getattr(n, "interface:name");
if (nspace) { if (nspace) {
if (namespce) if (namespce)
ret = NewStringf("%s.%s.%s", namespce, nspace, interface_name); ret = NewStringf("%s.%s.%s", namespce, nspace, interface_name);
@ -1677,7 +1677,7 @@ public:
String *interface_name = NULL; String *interface_name = NULL;
if (proxy_flag) { if (proxy_flag) {
Node *n = classLookup(t); Node *n = classLookup(t);
if (n && Getattr(n, "feature:interface:name")) if (n && Getattr(n, "interface:name"))
interface_name = getQualifiedInterfaceName(n); interface_name = getQualifiedInterfaceName(n);
} }
return interface_name; return interface_name;
@ -2003,7 +2003,7 @@ public:
for (Iterator base = First(baselist); base.item; base = Next(base)) { for (Iterator base = First(baselist); base.item; base = Next(base)) {
if (GetFlag(base.item, "feature:ignore") || !Getattr(base.item, "feature:interface")) if (GetFlag(base.item, "feature:ignore") || !Getattr(base.item, "feature:interface"))
continue; // TODO: warn about skipped non-interface bases continue; // TODO: warn about skipped non-interface bases
String *base_iname = Getattr(base.item, "feature:interface:name"); String *base_iname = Getattr(base.item, "interface:name");
if (!bases) if (!bases)
bases = NewStringf(" : %s", base_iname); bases = NewStringf(" : %s", base_iname);
else { else {
@ -2133,8 +2133,7 @@ public:
if (Getattr(n, "feature:interface")) { if (Getattr(n, "feature:interface")) {
interface_class_code = NewString(""); interface_class_code = NewString("");
String *interface_name = Getattr(n, "feature:interface:name"); String *interface_name = Getattr(n, "interface:name");
// TODO check feature:interface:name is not missing
String *output_directory = outputDirectory(nspace); String *output_directory = outputDirectory(nspace);
f_interface = getOutputFile(output_directory, interface_name); f_interface = getOutputFile(output_directory, interface_name);
addOpenNamespace(nspace, f_interface); addOpenNamespace(nspace, f_interface);
@ -3400,25 +3399,25 @@ public:
substitution_performed = true; substitution_performed = true;
Delete(classnametype); Delete(classnametype);
} }
if (Strstr(tm, "$interfacename")) { if (Strstr(tm, "$csinterfacename")) {
SwigType *interfacenametype = Copy(strippedtype); SwigType *interfacenametype = Copy(strippedtype);
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$interfacename"); substituteInterfacenameSpecialVariable(interfacenametype, tm, "$csinterfacename");
substitution_performed = true; substitution_performed = true;
Delete(interfacenametype); Delete(interfacenametype);
} }
if (Strstr(tm, "$*interfacename")) { if (Strstr(tm, "$*csinterfacename")) {
SwigType *interfacenametype = Copy(strippedtype); SwigType *interfacenametype = Copy(strippedtype);
Delete(SwigType_pop(interfacenametype)); Delete(SwigType_pop(interfacenametype));
if (Len(interfacenametype) > 0) { if (Len(interfacenametype) > 0) {
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$*interfacename"); substituteInterfacenameSpecialVariable(interfacenametype, tm, "$*csinterfacename");
substitution_performed = true; substitution_performed = true;
} }
Delete(interfacenametype); Delete(interfacenametype);
} }
if (Strstr(tm, "$&interfacename")) { if (Strstr(tm, "$&csinterfacename")) {
SwigType *interfacenametype = Copy(strippedtype); SwigType *interfacenametype = Copy(strippedtype);
SwigType_add_pointer(interfacenametype); SwigType_add_pointer(interfacenametype);
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$&interfacename"); substituteInterfacenameSpecialVariable(interfacenametype, tm, "$&csinterfacename");
substitution_performed = true; substitution_performed = true;
Delete(interfacenametype); Delete(interfacenametype);
} }

View file

@ -1737,7 +1737,7 @@ public:
String *ret = Getattr(n, "interface:qname"); String *ret = Getattr(n, "interface:qname");
if (!ret) { if (!ret) {
String *nspace = Getattr(n, "sym:nspace"); String *nspace = Getattr(n, "sym:nspace");
String *symname = Getattr(n, "feature:interface:name"); String *symname = Getattr(n, "interface:name");
if (nspace) { if (nspace) {
if (package) if (package)
ret = NewStringf("%s.%s.%s", package, nspace, symname); ret = NewStringf("%s.%s.%s", package, nspace, symname);
@ -1759,7 +1759,7 @@ public:
String *interface_name = NULL; String *interface_name = NULL;
if (proxy_flag) { if (proxy_flag) {
Node *n = classLookup(t); Node *n = classLookup(t);
if (n && Getattr(n, "feature:interface:name")) if (n && Getattr(n, "interface:name"))
interface_name = getQualifiedInterfaceName(n); interface_name = getQualifiedInterfaceName(n);
} }
return interface_name; return interface_name;
@ -1774,7 +1774,7 @@ public:
for (Iterator it = First(keys); it.item; it = Next(it)) { for (Iterator it = First(keys); it.item; it = Next(it)) {
Node *base = Getattr(base_list, it.item); Node *base = Getattr(base_list, it.item);
String *c_baseclass = SwigType_namestr(Getattr(base, "name")); String *c_baseclass = SwigType_namestr(Getattr(base, "name"));
String *interface_name = Getattr(base, "feature:interface:name"); String *interface_name = Getattr(base, "interface:name");
if (Len(interface_list)) if (Len(interface_list))
Append(interface_list, ", "); Append(interface_list, ", ");
Append(interface_list, interface_name); Append(interface_list, interface_name);
@ -2041,7 +2041,7 @@ public:
for (Iterator base = First(baselist); base.item; base = Next(base)) { for (Iterator base = First(baselist); base.item; base = Next(base)) {
if (GetFlag(base.item, "feature:ignore") || !Getattr(base.item, "feature:interface")) if (GetFlag(base.item, "feature:ignore") || !Getattr(base.item, "feature:interface"))
continue; // TODO: warn about skipped non-interface bases continue; // TODO: warn about skipped non-interface bases
String *base_iname = Getattr(base.item, "feature:interface:name"); String *base_iname = Getattr(base.item, "interface:name");
if (!bases) if (!bases)
bases = Copy(base_iname); bases = Copy(base_iname);
else { else {
@ -2185,8 +2185,7 @@ public:
if (Getattr(n, "feature:interface")) { if (Getattr(n, "feature:interface")) {
interface_class_code = NewString(""); interface_class_code = NewString("");
String *interface_name = Getattr(n, "feature:interface:name"); String *interface_name = Getattr(n, "interface:name");
// TODO check feature:interface:name is not missing
String *output_directory = outputDirectory(nspace); String *output_directory = outputDirectory(nspace);
String *filen = NewStringf("%s%s.java", output_directory, interface_name); String *filen = NewStringf("%s%s.java", output_directory, interface_name);
f_interface = NewFile(filen, "w", SWIG_output_files()); f_interface = NewFile(filen, "w", SWIG_output_files());
@ -3270,25 +3269,25 @@ public:
substitution_performed = true; substitution_performed = true;
Delete(classnametype); Delete(classnametype);
} }
if (Strstr(tm, "$interfacename")) { if (Strstr(tm, "$javainterfacename")) {
SwigType *interfacenametype = Copy(strippedtype); SwigType *interfacenametype = Copy(strippedtype);
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$interfacename", jnidescriptor); substituteInterfacenameSpecialVariable(interfacenametype, tm, "$javainterfacename", jnidescriptor);
substitution_performed = true; substitution_performed = true;
Delete(interfacenametype); Delete(interfacenametype);
} }
if (Strstr(tm, "$*interfacename")) { if (Strstr(tm, "$*javainterfacename")) {
SwigType *interfacenametype = Copy(strippedtype); SwigType *interfacenametype = Copy(strippedtype);
Delete(SwigType_pop(interfacenametype)); Delete(SwigType_pop(interfacenametype));
if (Len(interfacenametype) > 0) { if (Len(interfacenametype) > 0) {
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$*interfacename", jnidescriptor); substituteInterfacenameSpecialVariable(interfacenametype, tm, "$*javainterfacename", jnidescriptor);
substitution_performed = true; substitution_performed = true;
} }
Delete(interfacenametype); Delete(interfacenametype);
} }
if (Strstr(tm, "$&interfacename")) { if (Strstr(tm, "$&javainterfacename")) {
SwigType *interfacenametype = Copy(strippedtype); SwigType *interfacenametype = Copy(strippedtype);
SwigType_add_pointer(interfacenametype); SwigType_add_pointer(interfacenametype);
substituteInterfacenameSpecialVariable(interfacenametype, tm, "$&interfacename", jnidescriptor); substituteInterfacenameSpecialVariable(interfacenametype, tm, "$&javainterfacename", jnidescriptor);
substitution_performed = true; substitution_performed = true;
Delete(interfacenametype); Delete(interfacenametype);
} }

View file

@ -3857,7 +3857,7 @@ static List *collect_interface_methods(Node *n) {
static void collect_interface_bases(Hash *bases, Node *n) { static void collect_interface_bases(Hash *bases, Node *n) {
if (Getattr(n, "feature:interface")) { if (Getattr(n, "feature:interface")) {
String *name = Getattr(n, "feature:interface:name"); String *name = Getattr(n, "interface:name");
if (!Getattr(bases, name)) if (!Getattr(bases, name))
Setattr(bases, name, n); Setattr(bases, name, n);
} }
@ -3884,10 +3884,6 @@ static void collect_interface_bases(Hash *bases, Node *n) {
static void collect_interface_base_classes(Node *n) { static void collect_interface_base_classes(Node *n) {
if (Getattr(n, "feature:interface")) { if (Getattr(n, "feature:interface")) {
if (!Getattr(n, "feature:interface:name")) {
Swig_error(Getfile(n), Getline(n), "The interface feature for '%s' is missing the name attribute.\n", SwigType_namestr(Getattr(n, "name")));
SWIG_exit(EXIT_FAILURE);
}
// check all bases are also interfaces // check all bases are also interfaces
if (List *baselist = Getattr(n, "bases")) { if (List *baselist = Getattr(n, "bases")) {
for (Iterator base = First(baselist); base.item; base = Next(base)) { for (Iterator base = First(baselist); base.item; base = Next(base)) {
@ -3909,6 +3905,26 @@ static void collect_interface_base_classes(Node *n) {
Setattr(n, "interface:bases", interface_bases); Setattr(n, "interface:bases", interface_bases);
} }
/* -----------------------------------------------------------------------------
* process_interface_name()
* ----------------------------------------------------------------------------- */
void process_interface_name(Node *n) {
if (Getattr(n, "feature:interface")) {
String *interface_name = Getattr(n, "feature:interface:name");
if (!Len(interface_name)) {
Swig_error(Getfile(n), Getline(n), "The interface feature for '%s' is missing the name attribute.\n", SwigType_namestr(Getattr(n, "name")));
SWIG_exit(EXIT_FAILURE);
}
if (Strchr(interface_name, '%')) {
String *name = NewStringf(interface_name, Getattr(n, "sym:name"));
Setattr(n, "interface:name", name);
} else {
Setattr(n, "interface:name", interface_name);
}
}
}
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
* Swig_propagate_interface_methods() * Swig_propagate_interface_methods()
* *
@ -3919,6 +3935,7 @@ static void collect_interface_base_classes(Node *n) {
* ----------------------------------------------------------------------------- */ * ----------------------------------------------------------------------------- */
void Swig_propagate_interface_methods(Node *n) { void Swig_propagate_interface_methods(Node *n) {
process_interface_name(n);
collect_interface_base_classes(n); collect_interface_base_classes(n);
List *methods = collect_interface_methods(n); List *methods = collect_interface_methods(n);
bool is_interface = Getattr(n, "feature:interface") != 0; bool is_interface = Getattr(n, "feature:interface") != 0;