From 9be3235988d73cc9445e633105d0146bb3c4acf5 Mon Sep 17 00:00:00 2001 From: Jesus Lopez Date: Mon, 15 Apr 2013 09:31:23 -0700 Subject: [PATCH] Support $descriptor() macro in fragments Closes #36 --- .../python/special_variable_macros_runme.py | 2 ++ Examples/test-suite/special_variable_macros.i | 19 +++++++++++++++++++ Source/Swig/fragment.c | 2 ++ 3 files changed, 23 insertions(+) diff --git a/Examples/test-suite/python/special_variable_macros_runme.py b/Examples/test-suite/python/special_variable_macros_runme.py index 07e60dfa2..eaf9c1858 100644 --- a/Examples/test-suite/python/special_variable_macros_runme.py +++ b/Examples/test-suite/python/special_variable_macros_runme.py @@ -9,6 +9,8 @@ if special_variable_macros.testJill(name) != "jilly": raise "test failed" if special_variable_macros.testMary(name) != "SWIGTYPE_p_NameWrap": raise "test failed" +if special_variable_macros.testJames(name) != "SWIGTYPE_Name": + raise "test failed" if special_variable_macros.testJim(name) != "multiname num": raise "test failed" if special_variable_macros.testJohn(special_variable_macros.PairIntBool(10, False)) != 123: diff --git a/Examples/test-suite/special_variable_macros.i b/Examples/test-suite/special_variable_macros.i index 65f5496eb..ddd068cc0 100644 --- a/Examples/test-suite/special_variable_macros.i +++ b/Examples/test-suite/special_variable_macros.i @@ -62,6 +62,14 @@ private: /*%typemap(in) NameWrap *NAMEWRAP end */ %} +// check $descriptor gets expanded properly when used in a fragment +%fragment("nameDescriptor", "header") +%{ +/*%fragment("getNameDescriptor", "header") start */ +static const char *nameDescriptor = "$descriptor(Name)"; +/*%fragment("getNameDescriptor", "header") end */ +%} + ////////////////////////////////////////////////////////////////////////////////////// @@ -86,6 +94,14 @@ $typemap(in, NameWrap *NAMEWRAP) // %typemap(in) Name *mary end } +%typemap(in, fragment="nameDescriptor") Name *james (Name temp) { + // %typemap(in) Name *james start + temp = Name(nameDescriptor); + (void)$input; + $1 = &temp; + // %typemap(in) Name *james end +} + %inline %{ const char * testFred(Name *fred) { return fred->getName(); @@ -99,6 +115,9 @@ const char * testJill(Name *jill) { const char * testMary(Name *mary) { return mary->getName(); } +const char * testJames(Name *james) { + return james->getName(); +} %} ////////////////////////////////////////////////////////////////////////////////////// diff --git a/Source/Swig/fragment.c b/Source/Swig/fragment.c index 15f701ae4..025994a84 100644 --- a/Source/Swig/fragment.c +++ b/Source/Swig/fragment.c @@ -60,6 +60,8 @@ void Swig_fragment_register(Node *fragment) { } Setfile(ccode, Getfile(fragment)); Setline(ccode, Getline(fragment)); + /* Replace $descriptor() macros */ + Swig_cparse_replace_descriptor(ccode); Setattr(fragments, name, ccode); if (debug) Printf(stdout, "registering fragment %s %s\n", name, section);