summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSwati Sharma <itawswati@gmail.com>2012-08-05 11:03:03 +0000
committerSwati Sharma <itawswati@gmail.com>2012-08-05 11:03:03 +0000
commitfe7ef9c5ea915594281ba3736956b55673a55a7e (patch)
tree5e5fa87eb9f970a19463f1f88f259abcbca2d59b
parente740e8fe602b5116d867ee29e79eec082cb43bdd (diff)
downloadswig-fe7ef9c5ea915594281ba3736956b55673a55a7e.tar.gz
Indented Objective C Module code.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-objc@13515 626c5289-ae23-0410-ae9c-e8d60b6d4f22
-rw-r--r--Source/Modules/objc.cxx2946
1 files changed, 1456 insertions, 1490 deletions
diff --git a/Source/Modules/objc.cxx b/Source/Modules/objc.cxx
index 3f765c92f..5b9088693 100644
--- a/Source/Modules/objc.cxx
+++ b/Source/Modules/objc.cxx
@@ -1,171 +1,164 @@
#include "swigmod.h"
#include <ctype.h>
-class OBJECTIVEC : public Language {
+class OBJECTIVEC:public Language {
private:
- /* Files and file sections containing generated code. */
- File *f_wrap_h; // Wrapper header file
- File *f_wrap_mm; // Wrapper source file
- File *f_proxy_h; // Proxy header file
- File *f_proxy_mm; // Proxy source file
- File *f_runtime;
- File *f_header; /* General DOH objects used for holding the sections of wrapper source */
- File *f_wrappers;
- File *f_init;
-
- /* Strings temporarily holding the generated C++ code. */
- String *wrap_h_code; // Code to be written in wrap_h.
- String *wrap_mm_code; // Code to be written in wrap_mm.
- String *proxy_h_code; // Code to be written in proxy_h.
- String *proxy_mm_code; // Code to be written in proxy_mm.
- String *swigtypes_h_code; // Code for Objective-C typewrapper classes header.
- String *swigtypes_mm_code; // Code for Objective-C typewrapper classes implementation.
-
-
- /* Various flags controlling the code generation. */
- bool proxy_flag; // flag: determine should the proxy files be generated or not
-
- /* State variables which indicate what is being wrapped at the moment. */
- bool member_variable_flag; // flag: wrapping member variables
- bool static_member_variable_flag; // flag: wrapping static member variables
- bool global_variable_flag; // flag: wrapping global variables
- bool global_func_flag; // flag: wrapping global functions
- bool static_member_func_flag; // flag: wrapping static member functions
- bool member_func_flag; // flag: wrapping member functions
- bool member_constant_flag; // flag: wrapping member constants
-
- /* Helper strings used in the code */
- String *current_class_name; // String representing name of the current class.
- String *current_class_type; // Current class when used as a type. This represents the complete name of the class including the scope prefix
- String *variable_name; // String representing the current variable name.
-
-
- /* ObjectiveC data for the current proxy class:
- * These strings are mainly used to temporarily accumulate code from the
- * various member handling functions while a single class is processed and are
- * no longer relevant once that class has been finished, i.e. after
- * classHandler() has returned. */
- String *proxy_class_name; // The unqualified name of the current proxy class.
- String *proxy_class_qname; // The name of the current proxy class, qualified with the name of the namespace it is in, if any.
- // TODO: Add this when nspaces are handled. Not now!
-
- String *proxy_class_decl_code; // The proxy class declaration code.This goes in the proxy_h file if proxy_flag is true.
- String *proxy_class_defn_code; // The proxy class definition code.This goes in the proxy_mm file if proxy_flag is true.
- String *proxy_class_imports; // The import directives for the current proxy class. This goes in the proxy_h file if proxy_flag is true.
-
- String *proxy_class_enums_code; // Code for enumerations nested in the current proxy class. Is emitted globally and earlier
- // than the rest of the body to work around forward referencing-issues.
-
- String *proxy_class_function_decls; // Code for the proxy class member functions declaration.
- String *proxy_class_function_defns; // Code for the proxy class member functions definition.
- String *proxy_global_function_decls;// Code for the proxy class member functions declaration.
- String *proxy_global_function_defns;// Code for the proxy class member functions definition.
- String *destrcutor_call; // Contains an ObjectiveC call to the function wrapping the C++ destructor of the
- // current class (if there is a public C++ destructor).
-
-
- /* SWIG types data: Collects information about encountered types SWIG does not know about (e.g.
- * incomplete types). This is used later to generate type wrapper proxy.
- * classes for the unknown types. */
- Hash *unknown_types;
-
- /* Strings used at different places in the code. */
- static const char *const usage; // Usage message
- const String *empty_string; // Empty string used at different places in the code
-
-
+ /* Files and file sections containing generated code. */
+ File *f_wrap_h; // Wrapper header file
+ File *f_wrap_mm; // Wrapper source file
+ File *f_proxy_h; // Proxy header file
+ File *f_proxy_mm; // Proxy source file
+ File *f_runtime;
+ File *f_header; /* General DOH objects used for holding the sections of wrapper source */
+ File *f_wrappers;
+ File *f_init;
+
+ /* Strings temporarily holding the generated C++ code. */
+ String *wrap_h_code; // Code to be written in wrap_h.
+ String *wrap_mm_code; // Code to be written in wrap_mm.
+ String *proxy_h_code; // Code to be written in proxy_h.
+ String *proxy_mm_code; // Code to be written in proxy_mm.
+ String *swigtypes_h_code; // Code for Objective-C typewrapper classes header.
+ String *swigtypes_mm_code; // Code for Objective-C typewrapper classes implementation.
+
+
+ /* Various flags controlling the code generation. */
+ bool proxy_flag; // flag: determine should the proxy files be generated or not
+
+ /* State variables which indicate what is being wrapped at the moment. */
+ bool member_variable_flag; // flag: wrapping member variables
+ bool static_member_variable_flag; // flag: wrapping static member variables
+ bool global_variable_flag; // flag: wrapping global variables
+ bool global_func_flag; // flag: wrapping global functions
+ bool static_member_func_flag; // flag: wrapping static member functions
+ bool member_func_flag; // flag: wrapping member functions
+ bool member_constant_flag; // flag: wrapping member constants
+
+ /* Helper strings used in the code */
+ String *current_class_name; // String representing name of the current class.
+ String *current_class_type; // Current class when used as a type. This represents the complete name of the class including the scope prefix
+ String *variable_name; // String representing the current variable name.
+
+
+ /* ObjectiveC data for the current proxy class:
+ * These strings are mainly used to temporarily accumulate code from the
+ * various member handling functions while a single class is processed and are
+ * no longer relevant once that class has been finished, i.e. after
+ * classHandler() has returned. */
+ String *proxy_class_name; // The unqualified name of the current proxy class.
+ String *proxy_class_qname; // The name of the current proxy class, qualified with the name of the namespace it is in, if any.
+ // TODO: Add this when nspaces are handled. Not now!
+
+ String *proxy_class_decl_code; // The proxy class declaration code.This goes in the proxy_h file if proxy_flag is true.
+ String *proxy_class_defn_code; // The proxy class definition code.This goes in the proxy_mm file if proxy_flag is true.
+ String *proxy_class_imports; // The import directives for the current proxy class. This goes in the proxy_h file if proxy_flag is true.
+
+ String *proxy_class_enums_code; // Code for enumerations nested in the current proxy class. Is emitted globally and earlier
+ // than the rest of the body to work around forward referencing-issues.
+
+ String *proxy_class_function_decls; // Code for the proxy class member functions declaration.
+ String *proxy_class_function_defns; // Code for the proxy class member functions definition.
+ String *proxy_global_function_decls; // Code for the proxy class member functions declaration.
+ String *proxy_global_function_defns; // Code for the proxy class member functions definition.
+ String *destrcutor_call; // Contains an ObjectiveC call to the function wrapping the C++ destructor of the
+ // current class (if there is a public C++ destructor).
+
+
+ /* SWIG types data: Collects information about encountered types SWIG does not know about (e.g.
+ * incomplete types). This is used later to generate type wrapper proxy.
+ * classes for the unknown types. */
+ Hash *unknown_types;
+
+ /* Strings used at different places in the code. */
+ static const char *const usage; // Usage message
+ const String *empty_string; // Empty string used at different places in the code
+
+
public:
- OBJECTIVEC():f_wrap_h(NULL),
- f_wrap_mm(NULL),
- f_proxy_h(NULL),
- f_proxy_mm(NULL),
- f_runtime(NULL),
- f_header(NULL),
- f_wrappers(NULL),
- f_init(NULL),
- wrap_h_code(NULL),
- wrap_mm_code(NULL),
- proxy_h_code(NULL),
- proxy_mm_code(NULL),
- swigtypes_h_code(NULL),
- swigtypes_mm_code(NULL),
- proxy_flag(true),
- member_variable_flag(false),
- static_member_variable_flag(false),
- global_variable_flag(false),
- global_func_flag(false),
- static_member_func_flag(false),
- member_func_flag(false),
- member_constant_flag(false),
- current_class_name(NULL),
- current_class_type(NULL),
- variable_name(NULL),
- proxy_class_name(NULL),
- proxy_class_qname(NULL),
- proxy_class_decl_code(NULL),
- proxy_class_defn_code(NULL),
- proxy_class_imports(NULL),
- proxy_class_enums_code(NULL),
- proxy_class_function_decls(NULL),
- proxy_class_function_defns(NULL),
- proxy_global_function_decls(NULL),
- proxy_global_function_defns(NULL),
- destrcutor_call(NULL),
- unknown_types(NULL),
- empty_string(NewString(""))
- {
- }
-
- virtual void main(int argc, char *argv[]);
- virtual int top(Node *n);
-
- /* Function handlers */
- virtual int functionHandler(Node *n);
- virtual int globalfunctionHandler(Node *n);
- virtual int memberfunctionHandler(Node *n);
- virtual int staticmemberfunctionHandler(Node *n);
- virtual int callbackfunctionHandler(Node *n);
-
- /* Variable handlers */
- virtual int variableHandler(Node *n);
- virtual int globalvariableHandler(Node *n);
- virtual int membervariableHandler(Node *n);
- virtual int staticmembervariableHandler(Node *n);
-
- /* C++ handlers */
- virtual int memberconstantHandler(Node *n);
- virtual int constructorHandler(Node *n);
- virtual int copyconstructorHandler(Node *n);
- virtual int destructorHandler(Node *n);
- virtual int classHandler(Node *n);
-
- /* C/C++ Parsing */
- virtual int enumDeclaration(Node *n);
- virtual int enumvalueDeclaration(Node *n);
-
- /* Low-level code generation */
- virtual int constantWrapper(Node *n);
- virtual int variableWrapper(Node *n);
- virtual int functionWrapper(Node *n);
- virtual int nativeWrapper(Node *n);
-
- /* Proxy class code generators */
- void emitProxyGlobalFunctions(Node *n);
- void emitProxyClassFunction(Node *n);
- void emitProxyClassConstructor(Node *n);
- void emitProxyClass(Node *n);
- void emitTypeWrapperClass(String *classname, SwigType *type);
-
- /* Helper functions */
- bool substituteClassname(String *tm, SwigType *pt);
- void substituteClassnameVariable(String *tm, const char *classnamevariable, SwigType *type);
- Parm *skipIgnoredArgs(Parm *p);
- void marshalInputArgs(ParmList *parmlist, Wrapper *wrapper);
- void makeParameterList(ParmList *parmlist, Wrapper *wrapper);
- String *makeParameterName(Node *n, Parm *p, int arg_num, bool setter)const;
- void marshalOutput(Node *n, String *actioncode, Wrapper *wrapper);
- String *createProxyName(SwigType *t);
- const String *typemapLookup(Node *n, const_String_or_char_ptr tmap_method, SwigType *type, int warning, Node *typemap_attributes = 0);
+ OBJECTIVEC():f_wrap_h(NULL),
+ f_wrap_mm(NULL),
+ f_proxy_h(NULL),
+ f_proxy_mm(NULL),
+ f_runtime(NULL),
+ f_header(NULL),
+ f_wrappers(NULL),
+ f_init(NULL),
+ wrap_h_code(NULL),
+ wrap_mm_code(NULL),
+ proxy_h_code(NULL),
+ proxy_mm_code(NULL),
+ swigtypes_h_code(NULL),
+ swigtypes_mm_code(NULL),
+ proxy_flag(true),
+ member_variable_flag(false),
+ static_member_variable_flag(false),
+ global_variable_flag(false),
+ global_func_flag(false),
+ static_member_func_flag(false),
+ member_func_flag(false),
+ member_constant_flag(false),
+ current_class_name(NULL),
+ current_class_type(NULL),
+ variable_name(NULL),
+ proxy_class_name(NULL),
+ proxy_class_qname(NULL),
+ proxy_class_decl_code(NULL),
+ proxy_class_defn_code(NULL),
+ proxy_class_imports(NULL),
+ proxy_class_enums_code(NULL),
+ proxy_class_function_decls(NULL),
+ proxy_class_function_defns(NULL),
+ proxy_global_function_decls(NULL), proxy_global_function_defns(NULL), destrcutor_call(NULL), unknown_types(NULL), empty_string(NewString("")) {
+ } virtual void main(int argc, char *argv[]);
+ virtual int top(Node *n);
+
+ /* Function handlers */
+ virtual int functionHandler(Node *n);
+ virtual int globalfunctionHandler(Node *n);
+ virtual int memberfunctionHandler(Node *n);
+ virtual int staticmemberfunctionHandler(Node *n);
+ virtual int callbackfunctionHandler(Node *n);
+
+ /* Variable handlers */
+ virtual int variableHandler(Node *n);
+ virtual int globalvariableHandler(Node *n);
+ virtual int membervariableHandler(Node *n);
+ virtual int staticmembervariableHandler(Node *n);
+
+ /* C++ handlers */
+ virtual int memberconstantHandler(Node *n);
+ virtual int constructorHandler(Node *n);
+ virtual int copyconstructorHandler(Node *n);
+ virtual int destructorHandler(Node *n);
+ virtual int classHandler(Node *n);
+
+ /* C/C++ Parsing */
+ virtual int enumDeclaration(Node *n);
+ virtual int enumvalueDeclaration(Node *n);
+
+ /* Low-level code generation */
+ virtual int constantWrapper(Node *n);
+ virtual int variableWrapper(Node *n);
+ virtual int functionWrapper(Node *n);
+ virtual int nativeWrapper(Node *n);
+
+ /* Proxy class code generators */
+ void emitProxyGlobalFunctions(Node *n);
+ void emitProxyClassFunction(Node *n);
+ void emitProxyClassConstructor(Node *n);
+ void emitProxyClass(Node *n);
+ void emitTypeWrapperClass(String *classname, SwigType *type);
+
+ /* Helper functions */
+ bool substituteClassname(String *tm, SwigType *pt);
+ void substituteClassnameVariable(String *tm, const char *classnamevariable, SwigType *type);
+ Parm *skipIgnoredArgs(Parm *p);
+ void marshalInputArgs(ParmList *parmlist, Wrapper *wrapper);
+ void makeParameterList(ParmList *parmlist, Wrapper *wrapper);
+ String *makeParameterName(Node *n, Parm *p, int arg_num, bool setter) const;
+ void marshalOutput(Node *n, String *actioncode, Wrapper *wrapper);
+ String *createProxyName(SwigType *t);
+ const String *typemapLookup(Node *n, const_String_or_char_ptr tmap_method, SwigType *type, int warning, Node *typemap_attributes = 0);
};
/* ---------------------------------------------------------------------
@@ -175,29 +168,29 @@ public:
* --------------------------------------------------------------------- */
void OBJECTIVEC::main(int argc, char *argv[]) {
- // Set language-specific subdirectory in SWIG library
- SWIG_library_directory("objc");
-
- // Process command line options
- for (int i = 1; i < argc; i++) {
- if (argv[i]) {
- if (strcmp(argv[i], "-noproxy") == 0) {
- Swig_mark_arg(i);
- proxy_flag = false;
- } else if (strcmp(argv[i], "-help") == 0) {
- Printf(stdout, "%s\n", usage);
- }
- }
+ // Set language-specific subdirectory in SWIG library
+ SWIG_library_directory("objc");
+
+ // Process command line options
+ for (int i = 1; i < argc; i++) {
+ if (argv[i]) {
+ if (strcmp(argv[i], "-noproxy") == 0) {
+ Swig_mark_arg(i);
+ proxy_flag = false;
+ } else if (strcmp(argv[i], "-help") == 0) {
+ Printf(stdout, "%s\n", usage);
+ }
}
+ }
+
+ // Set language-specific preprocessing symbol
+ Preprocessor_define("SWIGOBJECTIVEC 1", 0);
- // Set language-specific preprocessing symbol
- Preprocessor_define("SWIGOBJECTIVEC 1", 0);
+ // Set language-specific configuration file
+ SWIG_config_file("objc.swg");
- // Set language-specific configuration file
- SWIG_config_file("objc.swg");
-
- // Set typemap language (historical)
- SWIG_typemap_lang("objc");
+ // Set typemap language (historical)
+ SWIG_typemap_lang("objc");
}
/* ---------------------------------------------------------------------
@@ -208,191 +201,188 @@ void OBJECTIVEC::main(int argc, char *argv[]) {
* --------------------------------------------------------------------- */
int OBJECTIVEC::top(Node *n) {
- /* Get the module name */
- String *module = Getattr(n,"name");
-
- /* Initialize I/O */
-
- // Create the _wrap files
- String *wrapfile_h = NewStringf("%s_wrap.h", module);
- f_wrap_h = NewFile(wrapfile_h, "w", SWIG_output_files());
- if (!f_wrap_h) {
- FileErrorDisplay(wrapfile_h);
- SWIG_exit(EXIT_FAILURE);
+ /* Get the module name */
+ String *module = Getattr(n, "name");
+
+ /* Initialize I/O */
+
+ // Create the _wrap files
+ String *wrapfile_h = NewStringf("%s_wrap.h", module);
+ f_wrap_h = NewFile(wrapfile_h, "w", SWIG_output_files());
+ if (!f_wrap_h) {
+ FileErrorDisplay(wrapfile_h);
+ SWIG_exit(EXIT_FAILURE);
+ }
+ String *wrapfile_mm = NewStringf("%s_wrap.mm", module);
+ f_wrap_mm = NewFile(wrapfile_mm, "w", SWIG_output_files());
+ if (!f_wrap_mm) {
+ FileErrorDisplay(wrapfile_mm);
+ SWIG_exit(EXIT_FAILURE);
+ }
+ Delete(wrapfile_h);
+ Delete(wrapfile_mm);
+
+ // Create the _proxy files if proxy flag is true
+ if (proxy_flag) {
+ String *proxyfile_h = NewStringf("%s_proxy.h", module);
+ f_proxy_h = NewFile(proxyfile_h, "w", SWIG_output_files());
+ if (!f_proxy_h) {
+ FileErrorDisplay(proxyfile_h);
+ SWIG_exit(EXIT_FAILURE);
}
- String *wrapfile_mm = NewStringf("%s_wrap.mm", module);
- f_wrap_mm = NewFile(wrapfile_mm, "w", SWIG_output_files());
- if (!f_wrap_mm) {
- FileErrorDisplay(wrapfile_mm);
- SWIG_exit(EXIT_FAILURE);
+ String *proxyfile_mm = NewStringf("%s_proxy.mm", module);
+ f_proxy_mm = NewFile(proxyfile_mm, "w", SWIG_output_files());
+ if (!f_proxy_mm) {
+ FileErrorDisplay(proxyfile_mm);
+ SWIG_exit(EXIT_FAILURE);
}
- Delete(wrapfile_h);
- Delete(wrapfile_mm);
-
- // Create the _proxy files if proxy flag is true
- if(proxy_flag) {
- String *proxyfile_h = NewStringf("%s_proxy.h", module);
- f_proxy_h = NewFile(proxyfile_h, "w", SWIG_output_files());
- if (!f_proxy_h) {
- FileErrorDisplay(proxyfile_h);
- SWIG_exit(EXIT_FAILURE);
- }
- String *proxyfile_mm = NewStringf("%s_proxy.mm", module);
- f_proxy_mm = NewFile(proxyfile_mm, "w", SWIG_output_files());
- if (!f_proxy_mm) {
- FileErrorDisplay(proxyfile_mm);
- SWIG_exit(EXIT_FAILURE);
- }
- Delete(proxyfile_h);
- Delete(proxyfile_mm);
+ Delete(proxyfile_h);
+ Delete(proxyfile_mm);
+ }
+
+ f_runtime = NewString("");
+ f_init = NewString("");
+ f_header = NewString("");
+ f_wrappers = NewString("");
+
+
+ // Register file targets with the SWIG file handler
+ Swig_register_filebyname("begin", f_wrap_mm);
+ Swig_register_filebyname("header", f_header);
+ Swig_register_filebyname("wrapper", f_wrappers);
+ Swig_register_filebyname("runtime", f_runtime);
+ Swig_register_filebyname("init", f_init);
+
+ // Output module initialization code
+ Swig_banner(f_wrap_h);
+ Printf(f_wrap_h, "\n");
+ Printf(f_wrap_h, "#ifndef %(upper)s_WRAP_H\n", module);
+ Printf(f_wrap_h, "#define %(upper)s_WRAP_H\n\n", module);
+ Printf(f_wrap_h, "\n#ifdef __cplusplus\n");
+ Printf(f_wrap_h, "extern \"C\" {\n");
+ Printf(f_wrap_h, "#endif\n\n");
+
+ Swig_banner(f_wrap_mm);
+ Printf(f_header, "#include \"%s_wrap.h\"\n", module);
+
+ if (proxy_flag) {
+ Swig_banner(f_proxy_h);
+ Printf(f_proxy_h, "\n#import <Foundation/Foundation.h>\n\n");
+
+ // ObjectiveC will understand the C code.
+ Printf(f_proxy_h, "\n#ifdef __cplusplus\n");
+ Printf(f_proxy_h, "extern \"C\" {\n");
+ Printf(f_proxy_h, "#endif\n\n");
+
+ Swig_banner(f_proxy_mm);
+ Printf(f_proxy_mm, "#include \"%s_proxy.h\"\n", module);
+ Printf(f_proxy_mm, "#include \"%s_wrap.h\"\n\n", module);
+ }
+ // Create strings for holding the generated code. These will be dumped
+ // to the generated files at the end of the top function.
+ wrap_h_code = NewString("");
+ wrap_mm_code = NewString("");
+ if (proxy_flag) {
+ proxy_h_code = NewString("");
+ proxy_mm_code = NewString("");
+ swigtypes_h_code = NewString("");
+ swigtypes_mm_code = NewString("");
+
+ proxy_class_decl_code = NewString("");
+ proxy_class_defn_code = NewString("");
+ proxy_class_enums_code = NewString("");
+ proxy_class_function_decls = NewString("");
+ proxy_class_function_defns = NewString("");
+ proxy_global_function_decls = NewString("");
+ proxy_global_function_defns = NewString("");
+ proxy_class_imports = NewString("");
+
+ destrcutor_call = NewString("");
+ unknown_types = NewHash();
+ }
+
+ /* Emit code for children */
+ Language::top(n);
+
+ // Write to the wrap_h
+ Dump(wrap_h_code, f_wrap_h);
+ Printf(f_wrap_h, "\n#ifdef __cplusplus\n");
+ Printf(f_wrap_h, "}\n");
+ Printf(f_wrap_h, "#endif\n");
+ Printf(f_wrap_h, "\n#endif\n\n");
+
+ // Write to the wrap_mm
+ Dump(f_runtime, f_wrap_mm);
+ Dump(f_header, f_wrap_mm);
+ Printf(f_wrap_mm, "\n#ifdef __cplusplus\n");
+ Printf(f_wrap_mm, "extern \"C\" {\n");
+ Printf(f_wrap_mm, "#endif\n\n");
+ Dump(f_wrappers, f_wrap_mm);
+ Dump(wrap_mm_code, f_wrap_mm);
+ Wrapper_pretty_print(f_init, f_wrap_mm);
+ Printf(f_wrap_mm, "\n#ifdef __cplusplus\n");
+ Printf(f_wrap_mm, "}\n");
+ Printf(f_wrap_mm, "#endif\n");
+
+ // Write to the proxy.h, if required
+ if (proxy_flag) {
+
+ for (Iterator swig_type = First(unknown_types); swig_type.key; swig_type = Next(swig_type)) {
+ emitTypeWrapperClass(swig_type.key, swig_type.item);
}
-
- f_runtime = NewString("");
- f_init = NewString("");
- f_header = NewString("");
- f_wrappers = NewString("");
-
-
- // Register file targets with the SWIG file handler
- Swig_register_filebyname("begin", f_wrap_mm);
- Swig_register_filebyname("header", f_header);
- Swig_register_filebyname("wrapper", f_wrappers);
- Swig_register_filebyname("runtime", f_runtime);
- Swig_register_filebyname("init", f_init);
-
- // Output module initialization code
- Swig_banner(f_wrap_h);
- Printf(f_wrap_h, "\n");
- Printf(f_wrap_h, "#ifndef %(upper)s_WRAP_H\n", module);
- Printf(f_wrap_h, "#define %(upper)s_WRAP_H\n\n", module);
- Printf(f_wrap_h, "\n#ifdef __cplusplus\n");
- Printf(f_wrap_h, "extern \"C\" {\n");
- Printf(f_wrap_h, "#endif\n\n");
-
- Swig_banner(f_wrap_mm);
- Printf(f_header, "#include \"%s_wrap.h\"\n",module);
-
- if(proxy_flag) {
- Swig_banner(f_proxy_h);
- Printf(f_proxy_h, "\n#import <Foundation/Foundation.h>\n\n");
-
- // ObjectiveC will understand the C code.
- Printf(f_proxy_h, "\n#ifdef __cplusplus\n");
- Printf(f_proxy_h, "extern \"C\" {\n");
- Printf(f_proxy_h, "#endif\n\n");
-
- Swig_banner(f_proxy_mm);
- Printf(f_proxy_mm, "#include \"%s_proxy.h\"\n", module);
- Printf(f_proxy_mm, "#include \"%s_wrap.h\"\n\n", module);
- }
-
- // Create strings for holding the generated code. These will be dumped
- // to the generated files at the end of the top function.
- wrap_h_code = NewString("");
- wrap_mm_code = NewString("");
- if(proxy_flag) {
- proxy_h_code = NewString("");
- proxy_mm_code = NewString("");
- swigtypes_h_code = NewString("");
- swigtypes_mm_code = NewString("");
-
- proxy_class_decl_code = NewString("");
- proxy_class_defn_code = NewString("");
- proxy_class_enums_code = NewString("");
- proxy_class_function_decls = NewString("");
- proxy_class_function_defns = NewString("");
- proxy_global_function_decls = NewString("");
- proxy_global_function_defns = NewString("");
- proxy_class_imports = NewString("");
-
- destrcutor_call = NewString("");
- unknown_types = NewHash();
- }
-
- /* Emit code for children */
- Language::top(n);
-
- // Write to the wrap_h
- Dump(wrap_h_code, f_wrap_h);
- Printf(f_wrap_h, "\n#ifdef __cplusplus\n");
- Printf(f_wrap_h, "}\n");
- Printf(f_wrap_h, "#endif\n");
- Printf(f_wrap_h, "\n#endif\n\n");
-
- // Write to the wrap_mm
- Dump(f_runtime, f_wrap_mm);
- Dump(f_header, f_wrap_mm);
- Printf(f_wrap_mm, "\n#ifdef __cplusplus\n");
- Printf(f_wrap_mm, "extern \"C\" {\n");
- Printf(f_wrap_mm, "#endif\n\n");
- Dump(f_wrappers, f_wrap_mm);
- Dump(wrap_mm_code, f_wrap_mm);
- Wrapper_pretty_print(f_init, f_wrap_mm);
- Printf(f_wrap_mm, "\n#ifdef __cplusplus\n");
- Printf(f_wrap_mm, "}\n");
- Printf(f_wrap_mm, "#endif\n");
-
- // Write to the proxy.h, if required
- if(proxy_flag) {
-
- for (Iterator swig_type = First(unknown_types); swig_type.key; swig_type = Next(swig_type)) {
- emitTypeWrapperClass(swig_type.key, swig_type.item);
- }
-
- Dump(swigtypes_h_code, f_proxy_h);
- Dump(proxy_h_code, f_proxy_h);
- Printf(f_proxy_h, "\n#ifdef __cplusplus\n");
- Printf(f_proxy_h, "}\n");
- Printf(f_proxy_h, "#endif\n\n");
- }
-
- // Write to proxy.mm, if required
- if(proxy_flag) {
+
+ Dump(swigtypes_h_code, f_proxy_h);
+ Dump(proxy_h_code, f_proxy_h);
+ Printf(f_proxy_h, "\n#ifdef __cplusplus\n");
+ Printf(f_proxy_h, "}\n");
+ Printf(f_proxy_h, "#endif\n\n");
+ }
+ // Write to proxy.mm, if required
+ if (proxy_flag) {
// Printf(f_proxy_mm, "\n#ifdef __cplusplus\n");
// Printf(f_proxy_mm, "extern \"C\" {\n");
// Printf(f_proxy_mm, "#endif\n\n");
- Dump(swigtypes_mm_code, f_proxy_mm);
- Dump(proxy_mm_code, f_proxy_mm);
+ Dump(swigtypes_mm_code, f_proxy_mm);
+ Dump(proxy_mm_code, f_proxy_mm);
// Printf(f_proxy_mm, "\n#ifdef __cplusplus\n");
// Printf(f_proxy_mm, "}\n");
// Printf(f_proxy_mm, "#endif\n");
- }
-
- // Cleanup
- Delete(wrap_h_code);
- Delete(wrap_mm_code);
- Close(f_wrap_h);
- Close(f_wrap_mm);
- Delete(f_runtime);
- Delete(f_init);
- Delete(f_header);
- Delete(f_wrappers);
- Delete(f_wrap_h);
- Delete(f_wrap_mm);
-
- if(proxy_flag) {
- Delete(proxy_class_decl_code);
- Delete(proxy_class_defn_code);
- Delete(proxy_class_enums_code);
- Delete(proxy_class_function_decls);
- Delete(proxy_class_function_defns);
- Delete(proxy_global_function_decls);
- Delete(proxy_global_function_defns);
- Delete(proxy_class_imports);
- Delete(destrcutor_call);
- Delete(unknown_types);
-
- Delete(swigtypes_h_code);
- Delete(swigtypes_mm_code);
- Delete(proxy_h_code);
- Delete(proxy_mm_code);
- Close(f_proxy_h);
- Close(f_proxy_mm);
- Delete(f_proxy_h);
- Delete(f_proxy_mm);
- }
-
- return SWIG_OK;
+ }
+ // Cleanup
+ Delete(wrap_h_code);
+ Delete(wrap_mm_code);
+ Close(f_wrap_h);
+ Close(f_wrap_mm);
+ Delete(f_runtime);
+ Delete(f_init);
+ Delete(f_header);
+ Delete(f_wrappers);
+ Delete(f_wrap_h);
+ Delete(f_wrap_mm);
+
+ if (proxy_flag) {
+ Delete(proxy_class_decl_code);
+ Delete(proxy_class_defn_code);
+ Delete(proxy_class_enums_code);
+ Delete(proxy_class_function_decls);
+ Delete(proxy_class_function_defns);
+ Delete(proxy_global_function_decls);
+ Delete(proxy_global_function_defns);
+ Delete(proxy_class_imports);
+ Delete(destrcutor_call);
+ Delete(unknown_types);
+
+ Delete(swigtypes_h_code);
+ Delete(swigtypes_mm_code);
+ Delete(proxy_h_code);
+ Delete(proxy_mm_code);
+ Close(f_proxy_h);
+ Close(f_proxy_mm);
+ Delete(f_proxy_h);
+ Delete(f_proxy_mm);
+ }
+
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -401,9 +391,9 @@ int OBJECTIVEC::top(Node *n) {
* Function handler for generating wrappers for functions
* --------------------------------------------------------------------- */
-int OBJECTIVEC::functionHandler(Node *n) {
- Language::functionHandler(n);
- return SWIG_OK;
+int OBJECTIVEC::functionHandler(Node *n) {
+ Language::functionHandler(n);
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -413,11 +403,11 @@ int OBJECTIVEC::functionHandler(Node *n) {
* --------------------------------------------------------------------- */
int OBJECTIVEC::globalfunctionHandler(Node *n) {
- global_func_flag = true;
- Language::globalfunctionHandler(n);
- global_func_flag = false;
+ global_func_flag = true;
+ Language::globalfunctionHandler(n);
+ global_func_flag = false;
- return SWIG_OK;
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -427,11 +417,11 @@ int OBJECTIVEC::globalfunctionHandler(Node *n) {
* --------------------------------------------------------------------- */
int OBJECTIVEC::memberfunctionHandler(Node *n) {
- member_func_flag = true;
- Language::memberfunctionHandler(n);
- member_func_flag = false;
+ member_func_flag = true;
+ Language::memberfunctionHandler(n);
+ member_func_flag = false;
- return SWIG_OK;
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -441,11 +431,11 @@ int OBJECTIVEC::memberfunctionHandler(Node *n) {
* --------------------------------------------------------------------- */
int OBJECTIVEC::staticmemberfunctionHandler(Node *n) {
- static_member_func_flag = true;
- Language::staticmemberfunctionHandler(n);
- static_member_func_flag = false;
-
- return SWIG_OK;
+ static_member_func_flag = true;
+ Language::staticmemberfunctionHandler(n);
+ static_member_func_flag = false;
+
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -455,8 +445,8 @@ int OBJECTIVEC::staticmemberfunctionHandler(Node *n) {
* --------------------------------------------------------------------- */
int OBJECTIVEC::callbackfunctionHandler(Node *n) {
- Language::callbackfunctionHandler(n);
- return SWIG_OK;
+ Language::callbackfunctionHandler(n);
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -466,8 +456,8 @@ int OBJECTIVEC::callbackfunctionHandler(Node *n) {
* --------------------------------------------------------------------- */
int OBJECTIVEC::variableHandler(Node *n) {
- Language::variableHandler(n);
- return SWIG_OK;
+ Language::variableHandler(n);
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -477,14 +467,14 @@ int OBJECTIVEC::variableHandler(Node *n) {
* --------------------------------------------------------------------- */
int OBJECTIVEC::globalvariableHandler(Node *n) {
- String *symname = Getattr(n, "sym:name");
- variable_name = symname;
- global_variable_flag = true;
-
- Language::globalvariableHandler(n);
-
- global_variable_flag = false;
- return SWIG_OK;
+ String *symname = Getattr(n, "sym:name");
+ variable_name = symname;
+ global_variable_flag = true;
+
+ Language::globalvariableHandler(n);
+
+ global_variable_flag = false;
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -494,14 +484,14 @@ int OBJECTIVEC::globalvariableHandler(Node *n) {
* --------------------------------------------------------------------- */
int OBJECTIVEC::membervariableHandler(Node *n) {
- String *symname = Getattr(n, "sym:name");
- variable_name = symname;
- member_variable_flag = true;
-
- Language::membervariableHandler(n);
-
- member_variable_flag = false;
- return SWIG_OK;
+ String *symname = Getattr(n, "sym:name");
+ variable_name = symname;
+ member_variable_flag = true;
+
+ Language::membervariableHandler(n);
+
+ member_variable_flag = false;
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -511,14 +501,14 @@ int OBJECTIVEC::membervariableHandler(Node *n) {
* --------------------------------------------------------------------- */
int OBJECTIVEC::staticmembervariableHandler(Node *n) {
- String *symname = Getattr(n, "sym:name");
- variable_name = symname;
- static_member_variable_flag = true;
-
- Language::staticmembervariableHandler(n);
-
- static_member_variable_flag = false;
- return SWIG_OK;
+ String *symname = Getattr(n, "sym:name");
+ variable_name = symname;
+ static_member_variable_flag = true;
+
+ Language::staticmembervariableHandler(n);
+
+ static_member_variable_flag = false;
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -528,14 +518,14 @@ int OBJECTIVEC::staticmembervariableHandler(Node *n) {
* --------------------------------------------------------------------- */
int OBJECTIVEC::memberconstantHandler(Node *n) {
- String *symname = Getattr(n, "sym:name");
- variable_name = symname;
- member_constant_flag = true;
-
- Language::memberconstantHandler(n);
-
- member_constant_flag = false;
- return SWIG_OK;
+ String *symname = Getattr(n, "sym:name");
+ variable_name = symname;
+ member_constant_flag = true;
+
+ Language::memberconstantHandler(n);
+
+ member_constant_flag = false;
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -545,8 +535,8 @@ int OBJECTIVEC::memberconstantHandler(Node *n) {
* --------------------------------------------------------------------- */
int OBJECTIVEC::constructorHandler(Node *n) {
- Language::constructorHandler(n);
- return SWIG_OK;
+ Language::constructorHandler(n);
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -556,8 +546,8 @@ int OBJECTIVEC::constructorHandler(Node *n) {
* --------------------------------------------------------------------- */
int OBJECTIVEC::copyconstructorHandler(Node *n) {
- Language::copyconstructorHandler(n);
- return SWIG_OK;
+ Language::copyconstructorHandler(n);
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -566,11 +556,11 @@ int OBJECTIVEC::copyconstructorHandler(Node *n) {
* Function handler for generating wrappers for functions
* --------------------------------------------------------------------- */
-int OBJECTIVEC::destructorHandler(Node *n) {
- Language::destructorHandler(n);
- String *symname = Getattr(n, "sym:name");
- Printv(destrcutor_call, Swig_name_wrapper(Swig_name_destroy(getNSpace(),symname)), "((void*)swigCPtr)", NIL);
- return SWIG_OK;
+int OBJECTIVEC::destructorHandler(Node *n) {
+ Language::destructorHandler(n);
+ String *symname = Getattr(n, "sym:name");
+ Printv(destrcutor_call, Swig_name_wrapper(Swig_name_destroy(getNSpace(), symname)), "((void*)swigCPtr)", NIL);
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -580,45 +570,45 @@ int OBJECTIVEC::destructorHandler(Node *n) {
* --------------------------------------------------------------------- */
int OBJECTIVEC::classHandler(Node *n) {
- if (proxy_flag) {
- proxy_class_name = Copy(Getattr(n, "sym:name"));
-
- if (!addSymbol(proxy_class_name, n))
- return SWIG_ERROR;
-
- Clear(proxy_class_imports);
- Clear(proxy_class_function_decls);
- Clear(proxy_class_function_defns);
- Clear(proxy_global_function_decls);
- Clear(proxy_global_function_defns);
- Clear(proxy_class_enums_code);
- Clear(proxy_class_decl_code);
- Clear(proxy_class_defn_code);
- Clear(destrcutor_call);
- }
-
- Language::classHandler(n);
-
- if (proxy_flag) {
- // Write the code for proxy class
- emitProxyClass(n);
-
- // Apply the necessary substitutions
- Replaceall(proxy_class_decl_code, "$objcclassname", proxy_class_name);
- Replaceall(proxy_class_defn_code, "$objcclassname", proxy_class_name);
-
- // And, dump everything to the proxy files
- Printv(proxy_h_code, proxy_class_decl_code, NIL);
- Printv(proxy_mm_code, proxy_class_defn_code, NIL);
-
- // Tidy up
- Delete(proxy_class_qname);
- proxy_class_qname = NULL;
- Delete(proxy_class_name);
- proxy_class_name = NULL;
- }
-
- return SWIG_OK;
+ if (proxy_flag) {
+ proxy_class_name = Copy(Getattr(n, "sym:name"));
+
+ if (!addSymbol(proxy_class_name, n))
+ return SWIG_ERROR;
+
+ Clear(proxy_class_imports);
+ Clear(proxy_class_function_decls);
+ Clear(proxy_class_function_defns);
+ Clear(proxy_global_function_decls);
+ Clear(proxy_global_function_defns);
+ Clear(proxy_class_enums_code);
+ Clear(proxy_class_decl_code);
+ Clear(proxy_class_defn_code);
+ Clear(destrcutor_call);
+ }
+
+ Language::classHandler(n);
+
+ if (proxy_flag) {
+ // Write the code for proxy class
+ emitProxyClass(n);
+
+ // Apply the necessary substitutions
+ Replaceall(proxy_class_decl_code, "$objcclassname", proxy_class_name);
+ Replaceall(proxy_class_defn_code, "$objcclassname", proxy_class_name);
+
+ // And, dump everything to the proxy files
+ Printv(proxy_h_code, proxy_class_decl_code, NIL);
+ Printv(proxy_mm_code, proxy_class_defn_code, NIL);
+
+ // Tidy up
+ Delete(proxy_class_qname);
+ proxy_class_qname = NULL;
+ Delete(proxy_class_name);
+ proxy_class_name = NULL;
+ }
+
+ return SWIG_OK;
}
/* ----------------------------------------------------------------------
@@ -628,55 +618,53 @@ int OBJECTIVEC::classHandler(Node *n) {
* ---------------------------------------------------------------------- */
int OBJECTIVEC::enumDeclaration(Node *n) {
- if (ImportMode)
- return SWIG_OK;
-
- if (getCurrentClass() && (cplus_mode != PUBLIC))
- return SWIG_NOWRAP;
-
- String *typemap_lookup_type = Getattr(n, "name");
- String *symname = Getattr(n, "sym:name");
- String *enumname;
+ if (ImportMode)
+ return SWIG_OK;
- Node *p = parentNode(n);
- if (p && !Strcmp(nodeType(p), "class")) { // This is a nested enum, prefix the class name
- String *parentname = Getattr(p, "sym:name");
- enumname = NewStringf("%s_%s", parentname, symname);
- }
- else {
- enumname = Copy(symname);
- }
-
- if (proxy_flag) {
- if (typemap_lookup_type) {
- // Copy-paste the C/C++ enum as an Objective-C enum
- Printv(proxy_h_code, "enum ", enumname, " {\n", NIL);
- } else {
- // Handle anonymous enums.
- Printv(proxy_h_code, "\nenum {\n", NIL);
- }
- }
-
- // Emit each enum item
- Language::enumDeclaration(n);
-
- if (!GetFlag(n, "nonempty")) {
- // Do not wrap empty enums;
- return SWIG_NOWRAP;
+ if (getCurrentClass() && (cplus_mode != PUBLIC))
+ return SWIG_NOWRAP;
+
+ String *typemap_lookup_type = Getattr(n, "name");
+ String *symname = Getattr(n, "sym:name");
+ String *enumname;
+
+ Node *p = parentNode(n);
+ if (p && !Strcmp(nodeType(p), "class")) { // This is a nested enum, prefix the class name
+ String *parentname = Getattr(p, "sym:name");
+ enumname = NewStringf("%s_%s", parentname, symname);
+ } else {
+ enumname = Copy(symname);
+ }
+
+ if (proxy_flag) {
+ if (typemap_lookup_type) {
+ // Copy-paste the C/C++ enum as an Objective-C enum
+ Printv(proxy_h_code, "enum ", enumname, " {\n", NIL);
+ } else {
+ // Handle anonymous enums.
+ Printv(proxy_h_code, "\nenum {\n", NIL);
}
-
- if (proxy_flag) {
- if (typemap_lookup_type) {
- // Finish the enum declaration
- Printv(proxy_h_code, "\n};\n\n", NIL);
- } else {
- // Handle anonymous enums.
- Printv(proxy_h_code, "\n};\n\n", NIL);
- }
+ }
+ // Emit each enum item
+ Language::enumDeclaration(n);
+
+ if (!GetFlag(n, "nonempty")) {
+ // Do not wrap empty enums;
+ return SWIG_NOWRAP;
+ }
+
+ if (proxy_flag) {
+ if (typemap_lookup_type) {
+ // Finish the enum declaration
+ Printv(proxy_h_code, "\n};\n\n", NIL);
+ } else {
+ // Handle anonymous enums.
+ Printv(proxy_h_code, "\n};\n\n", NIL);
}
-
- Delete(enumname);
- return SWIG_OK;
+ }
+
+ Delete(enumname);
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------------
@@ -685,37 +673,36 @@ int OBJECTIVEC::enumDeclaration(Node *n) {
* Genrerates the enum item for the Objective C enums
* --------------------------------------------------------------------------- */
int OBJECTIVEC::enumvalueDeclaration(Node *n) {
- if (getCurrentClass() && (cplus_mode != PUBLIC))
- return SWIG_NOWRAP;
-
- Swig_require("enumvalueDeclaration", n, "*name", "?value", NIL);
- String *symname = Getattr(n, "sym:name");
- String *value = Getattr(n,"enumvalue");
- Node *parent = parentNode(n);
- Node *pparent=parentNode(parent);
- String *enumname;
- if (pparent && !Strcmp(nodeType(pparent), "class")) { // This is a nested enum, prefix the class name
- String *classname = Getattr(pparent, "sym:name");
- enumname = NewStringf("%s_%s", classname, symname);
- }
- else {
- enumname = Copy(symname);
- }
- if (proxy_flag) { // Emit the enum item
- if (!GetFlag(n, "firstenumitem"))
- Printf(proxy_h_code, ",\n");
- Printf(proxy_h_code, " %s", enumname);
- if (value){
- value = Getattr(n, "enumvalue") ? Copy(Getattr(n, "enumvalue")) : Copy(Getattr(n, "enumvalueex"));
- Printf(proxy_h_code, " = %s", value);
+ if (getCurrentClass() && (cplus_mode != PUBLIC))
+ return SWIG_NOWRAP;
+
+ Swig_require("enumvalueDeclaration", n, "*name", "?value", NIL);
+ String *symname = Getattr(n, "sym:name");
+ String *value = Getattr(n, "enumvalue");
+ Node *parent = parentNode(n);
+ Node *pparent = parentNode(parent);
+ String *enumname;
+ if (pparent && !Strcmp(nodeType(pparent), "class")) { // This is a nested enum, prefix the class name
+ String *classname = Getattr(pparent, "sym:name");
+ enumname = NewStringf("%s_%s", classname, symname);
+ } else {
+ enumname = Copy(symname);
+ }
+ if (proxy_flag) { // Emit the enum item
+ if (!GetFlag(n, "firstenumitem"))
+ Printf(proxy_h_code, ",\n");
+ Printf(proxy_h_code, " %s", enumname);
+ if (value) {
+ value = Getattr(n, "enumvalue") ? Copy(Getattr(n, "enumvalue")) : Copy(Getattr(n, "enumvalueex"));
+ Printf(proxy_h_code, " = %s", value);
}
- }
- // Keep track that the currently processed enum has at least one value
- SetFlag(parent, "nonempty");
-
- Swig_restore(n);
- Delete(enumname);
- return SWIG_OK;
+ }
+ // Keep track that the currently processed enum has at least one value
+ SetFlag(parent, "nonempty");
+
+ Swig_restore(n);
+ Delete(enumname);
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -724,95 +711,93 @@ int OBJECTIVEC::enumvalueDeclaration(Node *n) {
* Low level code generator for constants
* --------------------------------------------------------------------- */
-int OBJECTIVEC::constantWrapper(Node *n) {
- SwigType *type = Getattr(n, "type");
- String *symname = Getattr(n, "sym:name");
- String *value = Getattr(n, "value");
- String *typestring = SwigType_str(type, 0);
- String *tm;
-
- String *crettype = NewString("");
- String *constants_h_code = NewString("");
- String *constants_mm_code = NewString("");
- bool is_func_ptr = SwigType_isfunctionpointer(type);
-
- if (!addSymbol(symname, n))
- return SWIG_ERROR;
-
- // Get the corresponding ObjectiveC type or the intermediate type. "imtype" if no proxy and "objctype" if proxy_flag is true.
- if(!is_func_ptr) {
- if(proxy_flag) {
- if ((tm = Swig_typemap_lookup("objctype", n, "", 0))) {
- substituteClassname(tm, type);
- Printf(crettype, "%s", tm);
- } else {
- Swig_warning(WARN_OBJC_TYPEMAP_OBJCTYPE_UNDEF, input_file, line_number, "No objctype typemap defined for %s\n", typestring);
- }
- } else {
- if ((tm = Swig_typemap_lookup("imtype", n, "", 0))) {
- Printf(crettype, "%s", tm);
- } else {
- Swig_warning(WARN_OBJC_TYPEMAP_IMTYPE_UNDEF, input_file, line_number, "No imtype typemap defined for %s\n", typestring);
- }
- }
- }
- else {
- if(proxy_flag) {
- if ((tm = Swig_typemap_lookup("objctype", n, "", 0))) {
- substituteClassname(tm, type);
- Printf(crettype, "%s", tm);
- } else {
- Swig_warning(WARN_OBJC_TYPEMAP_OBJCTYPE_UNDEF, input_file, line_number, "No objctype typemap defined for %s\n", typestring);
- }
- } else {
- Printf(crettype, "%s", SwigType_str(type, symname));
- }
+int OBJECTIVEC::constantWrapper(Node *n) {
+ SwigType *type = Getattr(n, "type");
+ String *symname = Getattr(n, "sym:name");
+ String *value = Getattr(n, "value");
+ String *typestring = SwigType_str(type, 0);
+ String *tm;
+
+ String *crettype = NewString("");
+ String *constants_h_code = NewString("");
+ String *constants_mm_code = NewString("");
+ bool is_func_ptr = SwigType_isfunctionpointer(type);
+
+ if (!addSymbol(symname, n))
+ return SWIG_ERROR;
+
+ // Get the corresponding ObjectiveC type or the intermediate type. "imtype" if no proxy and "objctype" if proxy_flag is true.
+ if (!is_func_ptr) {
+ if (proxy_flag) {
+ if ((tm = Swig_typemap_lookup("objctype", n, "", 0))) {
+ substituteClassname(tm, type);
+ Printf(crettype, "%s", tm);
+ } else {
+ Swig_warning(WARN_OBJC_TYPEMAP_OBJCTYPE_UNDEF, input_file, line_number, "No objctype typemap defined for %s\n", typestring);
+ }
+ } else {
+ if ((tm = Swig_typemap_lookup("imtype", n, "", 0))) {
+ Printf(crettype, "%s", tm);
+ } else {
+ Swig_warning(WARN_OBJC_TYPEMAP_IMTYPE_UNDEF, input_file, line_number, "No imtype typemap defined for %s\n", typestring);
+ }
}
-
- if(is_func_ptr) {
- variableWrapper(n);
- Printf(constants_h_code,"extern %s %s;\n", crettype, symname);
- //Printf(constants_mm_code, "%s %s = (%s)%s();\n", crettype, symname, typestring, Swig_name_wrapper(Swig_name_get(getNSpace(), symname)));
- // Transform return type used in low level accessor to the type used in Objective-C constant definition
- String *imcall = NewStringf("%s()", Swig_name_wrapper(Swig_name_get(getNSpace(), symname)));
- if ((tm = Swig_typemap_lookup("objcvarout", n, "", 0))) {
- substituteClassname(tm, type);
- Replaceall(tm, "$objcvarname", symname);
- Replaceall(tm, "$imcall", imcall);
- } else {
- Swig_warning(WARN_OBJC_TYPEMAP_OBJCOUT_UNDEF, input_file, line_number, "No objcout typemap defined for %s\n", crettype);
- }
- Printf(constants_mm_code, "%s\n", tm);
- Delete(imcall);
+ } else {
+ if (proxy_flag) {
+ if ((tm = Swig_typemap_lookup("objctype", n, "", 0))) {
+ substituteClassname(tm, type);
+ Printf(crettype, "%s", tm);
+ } else {
+ Swig_warning(WARN_OBJC_TYPEMAP_OBJCTYPE_UNDEF, input_file, line_number, "No objctype typemap defined for %s\n", typestring);
+ }
} else {
- if (SwigType_type(type) == T_STRING) {
- // http://stackoverflow.com/questions/538996/constants-in-objective-c/539191#539191
- Printf(constants_h_code,"extern %s const %s;\n", crettype, symname);
- Printf(constants_mm_code, "%s const %s= @\"%s\";\n", crettype, symname, value);
- } else if (SwigType_type(type) == T_CHAR) {
- Printf(constants_h_code,"extern %s %s;\n", crettype, symname);
- Printf(constants_mm_code, "%s %s= \'%s\';\n", crettype, symname, value);
- }
- else {
- Printf(constants_h_code,"extern %s %s;\n", crettype, symname);
- Printf(constants_mm_code, "%s %s= %s;\n", crettype, symname, value);
- }
+ Printf(crettype, "%s", SwigType_str(type, symname));
}
-
- // Dump to generated files
- if(proxy_flag) { // write to the proxy files
- Printv(proxy_h_code, constants_h_code, NIL);
- Printv(proxy_mm_code, constants_mm_code, NIL);
- } else { // write to the wrap files
- Printv(wrap_h_code, constants_h_code, NIL);
- Printv(wrap_mm_code, constants_mm_code, NIL);
+ }
+
+ if (is_func_ptr) {
+ variableWrapper(n);
+ Printf(constants_h_code, "extern %s %s;\n", crettype, symname);
+ //Printf(constants_mm_code, "%s %s = (%s)%s();\n", crettype, symname, typestring, Swig_name_wrapper(Swig_name_get(getNSpace(), symname)));
+ // Transform return type used in low level accessor to the type used in Objective-C constant definition
+ String *imcall = NewStringf("%s()", Swig_name_wrapper(Swig_name_get(getNSpace(), symname)));
+ if ((tm = Swig_typemap_lookup("objcvarout", n, "", 0))) {
+ substituteClassname(tm, type);
+ Replaceall(tm, "$objcvarname", symname);
+ Replaceall(tm, "$imcall", imcall);
+ } else {
+ Swig_warning(WARN_OBJC_TYPEMAP_OBJCOUT_UNDEF, input_file, line_number, "No objcout typemap defined for %s\n", crettype);
}
-
- // Cleanup
- Delete(crettype);
- Delete(constants_h_code);
- Delete(constants_mm_code);
- return SWIG_OK;
+ Printf(constants_mm_code, "%s\n", tm);
+ Delete(imcall);
+ } else {
+ if (SwigType_type(type) == T_STRING) {
+ // http://stackoverflow.com/questions/538996/constants-in-objective-c/539191#539191
+ Printf(constants_h_code, "extern %s const %s;\n", crettype, symname);
+ Printf(constants_mm_code, "%s const %s= @\"%s\";\n", crettype, symname, value);
+ } else if (SwigType_type(type) == T_CHAR) {
+ Printf(constants_h_code, "extern %s %s;\n", crettype, symname);
+ Printf(constants_mm_code, "%s %s= \'%s\';\n", crettype, symname, value);
+ } else {
+ Printf(constants_h_code, "extern %s %s;\n", crettype, symname);
+ Printf(constants_mm_code, "%s %s= %s;\n", crettype, symname, value);
+ }
+ }
+
+ // Dump to generated files
+ if (proxy_flag) { // write to the proxy files
+ Printv(proxy_h_code, constants_h_code, NIL);
+ Printv(proxy_mm_code, constants_mm_code, NIL);
+ } else { // write to the wrap files
+ Printv(wrap_h_code, constants_h_code, NIL);
+ Printv(wrap_mm_code, constants_mm_code, NIL);
+ }
+
+ // Cleanup
+ Delete(crettype);
+ Delete(constants_h_code);
+ Delete(constants_mm_code);
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -821,9 +806,9 @@ int OBJECTIVEC::constantWrapper(Node *n) {
* Low level code generator for variables
* --------------------------------------------------------------------- */
-int OBJECTIVEC::variableWrapper(Node *n) {
- Language::variableWrapper(n);
- return SWIG_OK;
+int OBJECTIVEC::variableWrapper(Node *n) {
+ Language::variableWrapper(n);
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -834,119 +819,118 @@ int OBJECTIVEC::variableWrapper(Node *n) {
* declaration in the wrap files
* --------------------------------------------------------------------- */
-int OBJECTIVEC::functionWrapper(Node *n) {
- // Get some useful attributes of this function
- String *symname = Getattr(n,"sym:name");
- SwigType *type = Getattr(n,"type");
- ParmList *parmlist = Getattr(n,"parms");
- String *crettype = SwigType_str(type, 0);
- String *imrettype = NewString("");
- String *tm;
- bool is_void_return = (Cmp(crettype, "void") == 0);
- bool is_constructor = (Cmp(nodeType(n), "constructor") == 0);
- bool is_destructor = (Cmp(nodeType(n), "destructor") == 0);
- bool is_constant = (Cmp(nodeType(n), "constant") == 0);
-
- if (!Getattr(n, "sym:overloaded")) {
- if (!addSymbol(Getattr(n, "sym:name"), n))
- return SWIG_ERROR;
- }
-
- // Create the function's wrappered name
- String *wname = Swig_name_wrapper(symname);
-
- // Create the wrapper function object
- Wrapper *wrapper = NewWrapper();
-
- // Retrieve the intermediate return type for this function
- if ((tm = Swig_typemap_lookup("imtype", n, "", 0))) {
- Printf(imrettype, "%s", tm);
- } else {
- Swig_warning(WARN_OBJC_TYPEMAP_IMTYPE_UNDEF, input_file, line_number, "No imtype typemap defined for %s\n", crettype);
- }
-
- // Deal with overloading
-
- /* Write the wrapper function declaration and definition */
-
- // Begin the first line of the function definition
- Printv(wrapper->def, imrettype," ", wname, "(", NIL);
-
- // Make the param list with the intermediate parameter types
- makeParameterList(parmlist, wrapper);
-
- // End the first line of the function definition
- Printv(wrapper->def, ")", NIL);
-
- // Write the function declaration to the wrap_h
- Printv(wrap_h_code, wrapper->def, ";\n", NIL);
-
- // Now write the function definition to the wrap_cpp
- Printv(wrapper->def, "\n{", NIL);
-
- // Emit all of the local variables for holding arguments
- emit_parameter_variables(parmlist, wrapper);
-
- // If any additional local variable needed, add them now
- if (!is_void_return) Wrapper_add_localv(wrapper, "imresult", imrettype, "imresult = 0", NIL);
-
- // Attach the standard typemaps to the parameter list
- emit_attach_parmmaps(parmlist, wrapper);
- Setattr(n, "wrap:parms", parmlist);
-
- // Now walk the function parameter list and generate code to get arguments.
- marshalInputArgs(parmlist, wrapper);
-
- // Emit the function call
- if (is_constant) { // Wrapping a constant hack.
- Swig_save("functionWrapper", n, "wrap:action", NIL);
-
- // below based on Swig_VargetToFunction()
- SwigType *ty = Swig_wrapped_var_type(Getattr(n, "type"), use_naturalvar_mode(n));
- Setattr(n, "wrap:action", NewStringf("%s = (%s) %s;", Swig_cresult_name(), SwigType_lstr(ty, 0), Getattr(n, "value")));
- }
-
- Setattr(n, "wrap:name", wname);
- String *actioncode = emit_action(n);
-
- if (Cmp(nodeType(n), "constant") == 0)
- Swig_restore(n);
-
- // Write typemaps(out) and return value if necessary.
- marshalOutput(n, actioncode, wrapper);
-
- // Close the function
- if (!is_void_return) Printv(wrapper->code, "return imresult;\n", NIL);
- Printv(wrapper->code, "}", NIL);
-
- // Final substititions if applicable.
-
- // Dump the function out.
- Wrapper_print(wrapper,wrap_mm_code);
-
- /* Create the proxy functions if proxy_flag is true. */
- if (proxy_flag && is_constructor) { // Handle constructor
- Setattr(n, "imfunctionname", wname);
- emitProxyClassConstructor(n);
- } else if (proxy_flag && is_destructor) { // Handle destructor
- // TODO: Do it here instead in emitProxyClass function
- }
- // globalFunctionHandler is called for static member functions as well hence setting global_func_flag to true.
- // To route the call to the appropriate proxy generator, we check for !static_member_func_flag here.
- if (proxy_flag && (global_variable_flag || global_func_flag) && !static_member_func_flag) { // Handle globals
- Setattr(n, "imfunctionname", wname);
- emitProxyGlobalFunctions(n);
- } else if (proxy_flag && (member_variable_flag || static_member_variable_flag || member_constant_flag ||
- member_func_flag || static_member_func_flag)) { // Handle members
- Setattr(n, "imfunctionname", wname);
- emitProxyClassFunction(n);
- }
+int OBJECTIVEC::functionWrapper(Node *n) {
+ // Get some useful attributes of this function
+ String *symname = Getattr(n, "sym:name");
+ SwigType *type = Getattr(n, "type");
+ ParmList *parmlist = Getattr(n, "parms");
+ String *crettype = SwigType_str(type, 0);
+ String *imrettype = NewString("");
+ String *tm;
+ bool is_void_return = (Cmp(crettype, "void") == 0);
+ bool is_constructor = (Cmp(nodeType(n), "constructor") == 0);
+ bool is_destructor = (Cmp(nodeType(n), "destructor") == 0);
+ bool is_constant = (Cmp(nodeType(n), "constant") == 0);
- // Tidy up
- Delete(imrettype);
- Delete(wname);
- DelWrapper(wrapper);
- return SWIG_OK;
+ if (!Getattr(n, "sym:overloaded")) {
+ if (!addSymbol(Getattr(n, "sym:name"), n))
+ return SWIG_ERROR;
+ }
+ // Create the function's wrappered name
+ String *wname = Swig_name_wrapper(symname);
+
+ // Create the wrapper function object
+ Wrapper *wrapper = NewWrapper();
+
+ // Retrieve the intermediate return type for this function
+ if ((tm = Swig_typemap_lookup("imtype", n, "", 0))) {
+ Printf(imrettype, "%s", tm);
+ } else {
+ Swig_warning(WARN_OBJC_TYPEMAP_IMTYPE_UNDEF, input_file, line_number, "No imtype typemap defined for %s\n", crettype);
+ }
+
+ // Deal with overloading
+
+ /* Write the wrapper function declaration and definition */
+
+ // Begin the first line of the function definition
+ Printv(wrapper->def, imrettype, " ", wname, "(", NIL);
+
+ // Make the param list with the intermediate parameter types
+ makeParameterList(parmlist, wrapper);
+
+ // End the first line of the function definition
+ Printv(wrapper->def, ")", NIL);
+
+ // Write the function declaration to the wrap_h
+ Printv(wrap_h_code, wrapper->def, ";\n", NIL);
+
+ // Now write the function definition to the wrap_cpp
+ Printv(wrapper->def, "\n{", NIL);
+
+ // Emit all of the local variables for holding arguments
+ emit_parameter_variables(parmlist, wrapper);
+
+ // If any additional local variable needed, add them now
+ if (!is_void_return)
+ Wrapper_add_localv(wrapper, "imresult", imrettype, "imresult = 0", NIL);
+
+ // Attach the standard typemaps to the parameter list
+ emit_attach_parmmaps(parmlist, wrapper);
+ Setattr(n, "wrap:parms", parmlist);
+
+ // Now walk the function parameter list and generate code to get arguments.
+ marshalInputArgs(parmlist, wrapper);
+
+ // Emit the function call
+ if (is_constant) { // Wrapping a constant hack.
+ Swig_save("functionWrapper", n, "wrap:action", NIL);
+
+ // below based on Swig_VargetToFunction()
+ SwigType *ty = Swig_wrapped_var_type(Getattr(n, "type"), use_naturalvar_mode(n));
+ Setattr(n, "wrap:action", NewStringf("%s = (%s) %s;", Swig_cresult_name(), SwigType_lstr(ty, 0), Getattr(n, "value")));
+ }
+
+ Setattr(n, "wrap:name", wname);
+ String *actioncode = emit_action(n);
+
+ if (Cmp(nodeType(n), "constant") == 0)
+ Swig_restore(n);
+
+ // Write typemaps(out) and return value if necessary.
+ marshalOutput(n, actioncode, wrapper);
+
+ // Close the function
+ if (!is_void_return)
+ Printv(wrapper->code, "return imresult;\n", NIL);
+ Printv(wrapper->code, "}", NIL);
+
+ // Final substititions if applicable.
+
+ // Dump the function out.
+ Wrapper_print(wrapper, wrap_mm_code);
+
+ /* Create the proxy functions if proxy_flag is true. */
+ if (proxy_flag && is_constructor) { // Handle constructor
+ Setattr(n, "imfunctionname", wname);
+ emitProxyClassConstructor(n);
+ } else if (proxy_flag && is_destructor) { // Handle destructor
+ // TODO: Do it here instead in emitProxyClass function
+ }
+ // globalFunctionHandler is called for static member functions as well hence setting global_func_flag to true.
+ // To route the call to the appropriate proxy generator, we check for !static_member_func_flag here.
+ if (proxy_flag && (global_variable_flag || global_func_flag) && !static_member_func_flag) { // Handle globals
+ Setattr(n, "imfunctionname", wname);
+ emitProxyGlobalFunctions(n);
+ } else if (proxy_flag && (member_variable_flag || static_member_variable_flag || member_constant_flag || member_func_flag || static_member_func_flag)) { // Handle members
+ Setattr(n, "imfunctionname", wname);
+ emitProxyClassFunction(n);
+ }
+ // Tidy up
+ Delete(imrettype);
+ Delete(wname);
+ DelWrapper(wrapper);
+ return SWIG_OK;
}
/* ---------------------------------------------------------------------
@@ -955,9 +939,9 @@ int OBJECTIVEC::functionWrapper(Node *n) {
*
* --------------------------------------------------------------------- */
-int OBJECTIVEC::nativeWrapper(Node *n) {
- Language::nativeWrapper(n);
- return SWIG_OK;
+int OBJECTIVEC::nativeWrapper(Node *n) {
+ Language::nativeWrapper(n);
+ return SWIG_OK;
}
/* -----------------------------------------------------------------------------
@@ -970,140 +954,139 @@ int OBJECTIVEC::nativeWrapper(Node *n) {
* ----------------------------------------------------------------------------- */
void OBJECTIVEC::emitProxyGlobalFunctions(Node *n) {
- if (!proxy_flag)
- return;
-
- // Get some useful attributes of this function
- String *symname = Getattr(n,"sym:name");
- SwigType *type = Getattr(n,"type");
- ParmList *parmlist = Getattr(n,"parms");
- String *crettype = SwigType_str(type, 0);
- String *objcrettype = NewString("");
- String *imcall = NewString("");
- String *function_defn = NewString("");
- String *function_decl = NewString("");
- String *tm;
- String *imfunctionname = Getattr(n, "imfunctionname");
- String *proxyfunctionname;
- bool setter_flag = false;
-
- // Retrieve the ObjectiveC return type for this function
- if ((tm = Swig_typemap_lookup("objctype", n, "", 0))) {
- substituteClassname(tm, type);
- Printf(objcrettype, "%s", tm);
- } else {
- Swig_warning(WARN_OBJC_TYPEMAP_OBJCTYPE_UNDEF, input_file, line_number, "No objctype typemap defined for %s\n", crettype);
- }
-
- // Deal with overloading
-
- // Change the function name for global variables
- if (proxy_flag && global_variable_flag) {
- proxyfunctionname = NewString("");
- setter_flag = (Cmp(symname, Swig_name_set(getNSpace(), variable_name)) == 0);
- if (setter_flag)
- Printf(proxyfunctionname, "set");
- else
- Printf(proxyfunctionname, "get");
-
- // Capitalize the first letter in the variable to create an ObjectiveC proxy function name
- Putc(toupper((int) *Char(variable_name)), proxyfunctionname);
- Printf(proxyfunctionname, "%s", Char(variable_name) + 1);
+ if (!proxy_flag)
+ return;
+
+ // Get some useful attributes of this function
+ String *symname = Getattr(n, "sym:name");
+ SwigType *type = Getattr(n, "type");
+ ParmList *parmlist = Getattr(n, "parms");
+ String *crettype = SwigType_str(type, 0);
+ String *objcrettype = NewString("");
+ String *imcall = NewString("");
+ String *function_defn = NewString("");
+ String *function_decl = NewString("");
+ String *tm;
+ String *imfunctionname = Getattr(n, "imfunctionname");
+ String *proxyfunctionname;
+ bool setter_flag = false;
+
+ // Retrieve the ObjectiveC return type for this function
+ if ((tm = Swig_typemap_lookup("objctype", n, "", 0))) {
+ substituteClassname(tm, type);
+ Printf(objcrettype, "%s", tm);
+ } else {
+ Swig_warning(WARN_OBJC_TYPEMAP_OBJCTYPE_UNDEF, input_file, line_number, "No objctype typemap defined for %s\n", crettype);
+ }
+
+ // Deal with overloading
+
+ // Change the function name for global variables
+ if (proxy_flag && global_variable_flag) {
+ proxyfunctionname = NewString("");
+ setter_flag = (Cmp(symname, Swig_name_set(getNSpace(), variable_name)) == 0);
+ if (setter_flag)
+ Printf(proxyfunctionname, "set");
+ else
+ Printf(proxyfunctionname, "get");
+
+ // Capitalize the first letter in the variable to create an ObjectiveC proxy function name
+ Putc(toupper((int) *Char(variable_name)), proxyfunctionname);
+ Printf(proxyfunctionname, "%s", Char(variable_name) + 1);
+ } else {
+ proxyfunctionname = NewString("Objc");
+ // Capitalize the first letter
+ Putc(toupper((int) *Char(symname)), proxyfunctionname);
+ Printf(proxyfunctionname, "%s", Char(symname) + 1);
+ }
+
+ /* Write the proxy global function declaration and definition */
+
+ // Begin the first line of the function
+ Printv(function_decl, objcrettype, " ", proxyfunctionname, "(", NIL);
+
+ // Prepare the call to intermediate function
+ Printf(imcall, "%s(", imfunctionname);
+
+ // Attach the non-standard typemaps to the parameter list
+ Swig_typemap_attach_parms("in", parmlist, NULL);
+ Swig_typemap_attach_parms("objctype", parmlist, NULL);
+ Swig_typemap_attach_parms("objcin", parmlist, NULL);
+
+ Parm *p;
+ int i = 0;
+ int gencomma = 0;
+
+ for (p = parmlist; p; p = nextSibling(p), i++) {
+ p = skipIgnoredArgs(p);
+ SwigType *pt = Getattr(p, "type");
+ String *ln = Getattr(p, "lname");
+
+ String *objcparmtype = NewString("");
+
+ // Get the ObjectiveC parameter type for this parameter
+ if ((tm = Getattr(p, "tmap:objctype"))) {
+ substituteClassname(tm, pt);
+ Printf(objcparmtype, "%s", tm);
} else {
- proxyfunctionname = NewString("Objc");
- // Capitalize the first letter
- Putc(toupper((int) *Char(symname)), proxyfunctionname);
- Printf(proxyfunctionname, "%s", Char(symname) + 1);
+ Swig_warning(WARN_OBJC_TYPEMAP_OBJCTYPE_UNDEF, input_file, line_number, "No objctype typemap defined for %s\n", SwigType_str(pt, 0));
}
-
- /* Write the proxy global function declaration and definition */
-
- // Begin the first line of the function
- Printv(function_decl, objcrettype , " ", proxyfunctionname, "(", NIL);
-
- // Prepare the call to intermediate function
- Printf(imcall, "%s(", imfunctionname);
-
- // Attach the non-standard typemaps to the parameter list
- Swig_typemap_attach_parms("in", parmlist, NULL);
- Swig_typemap_attach_parms("objctype", parmlist, NULL);
- Swig_typemap_attach_parms("objcin", parmlist, NULL);
-
- Parm *p;
- int i = 0;
- int gencomma = 0;
-
- for (p = parmlist; p; p = nextSibling(p), i++)
- {
- p = skipIgnoredArgs(p);
- SwigType *pt = Getattr(p, "type");
- String *ln = Getattr(p, "lname");
-
- String *objcparmtype = NewString("");
-
- // Get the ObjectiveC parameter type for this parameter
- if ((tm = Getattr(p, "tmap:objctype"))) {
- substituteClassname(tm, pt);
- Printf(objcparmtype, "%s", tm);
- } else {
- Swig_warning(WARN_OBJC_TYPEMAP_OBJCTYPE_UNDEF, input_file, line_number, "No objctype typemap defined for %s\n", SwigType_str(pt, 0));
- }
-
- if (gencomma)
- Printf(imcall, ", ");
-
- String *arg = makeParameterName(n, p, i, setter_flag);
-
- // Use typemaps to transform the type used in Objective-C proxy function to the one used in intermediate code.
- if ((tm = Getattr(p, "tmap:objcin"))) {
- substituteClassname(tm, pt);
- Replaceall(tm, "$objcinput", arg);
- Printv(imcall, tm, NIL);
- } else {
- Swig_warning(WARN_OBJC_TYPEMAP_OBJCIN_UNDEF, input_file, line_number, "No objcin typemap defined for %s\n", SwigType_str(pt, 0));
- }
-
- // Add parameter to proxy function
- if (gencomma >= 2)
- Printf(function_decl, ", ");
- gencomma = 2;
- Printf(function_decl, "%s %s", objcparmtype, arg);
-
- Delete(arg);
- Delete(objcparmtype);
- }
-
- // End the first line of the function
- Printv(function_decl, ")", NIL); // or
- //Printv(function_decl, paramstring, ")", NIL);
-
- Printv(function_defn, function_decl, "\n{\n", NIL);
- Printf(function_decl, ";");
-
- // End the call to the intermediate function
- Printv(imcall, ")", NIL);
-
- // Transform return type used in low level accessor to type used in Objective-C proxy function
- if ((tm = Swig_typemap_lookup("objcout", n, "", 0))) {
- substituteClassname(tm, type);
- Replaceall(tm, "$imcall", imcall);
+
+ if (gencomma)
+ Printf(imcall, ", ");
+
+ String *arg = makeParameterName(n, p, i, setter_flag);
+
+ // Use typemaps to transform the type used in Objective-C proxy function to the one used in intermediate code.
+ if ((tm = Getattr(p, "tmap:objcin"))) {
+ substituteClassname(tm, pt);
+ Replaceall(tm, "$objcinput", arg);
+ Printv(imcall, tm, NIL);
} else {
- Swig_warning(WARN_OBJC_TYPEMAP_OBJCOUT_UNDEF, input_file, line_number, "No objcout typemap defined for %s\n", crettype);
+ Swig_warning(WARN_OBJC_TYPEMAP_OBJCIN_UNDEF, input_file, line_number, "No objcin typemap defined for %s\n", SwigType_str(pt, 0));
}
-
- Printf(function_defn, " %s\n}\n", tm? (const String *)tm : empty_string);
-
- /* Write the function declaration to the proxy_h_code
+
+ // Add parameter to proxy function
+ if (gencomma >= 2)
+ Printf(function_decl, ", ");
+ gencomma = 2;
+ Printf(function_decl, "%s %s", objcparmtype, arg);
+
+ Delete(arg);
+ Delete(objcparmtype);
+ }
+
+ // End the first line of the function
+ Printv(function_decl, ")", NIL); // or
+ //Printv(function_decl, paramstring, ")", NIL);
+
+ Printv(function_defn, function_decl, "\n{\n", NIL);
+ Printf(function_decl, ";");
+
+ // End the call to the intermediate function
+ Printv(imcall, ")", NIL);
+
+ // Transform return type used in low level accessor to type used in Objective-C proxy function
+ if ((tm = Swig_typemap_lookup("objcout", n, "", 0))) {
+ substituteClassname(tm, type);
+ Replaceall(tm, "$imcall", imcall);
+ } else {
+ Swig_warning(WARN_OBJC_TYPEMAP_OBJCOUT_UNDEF, input_file, line_number, "No objcout typemap defined for %s\n", crettype);
+ }
+
+ Printf(function_defn, " %s\n}\n", tm ? (const String *) tm : empty_string);
+
+ /* Write the function declaration to the proxy_h_code
and function definition to the proxy_mm_code */
- Printv(proxy_h_code, function_decl, "\n", NIL);
- Printv(proxy_mm_code, function_defn, "\n", NIL);
-
- //Delete(paramstring);
- Delete(proxyfunctionname);
- Delete(objcrettype);
- Delete(imcall);
- Delete(function_decl);
- Delete(function_defn);
+ Printv(proxy_h_code, function_decl, "\n", NIL);
+ Printv(proxy_mm_code, function_defn, "\n", NIL);
+
+ //Delete(paramstring);
+ Delete(proxyfunctionname);
+ Delete(objcrettype);
+ Delete(imcall);
+ Delete(function_decl);
+ Delete(function_defn);
}
@@ -1118,151 +1101,149 @@ void OBJECTIVEC::emitProxyGlobalFunctions(Node *n) {
* ----------------------------------------------------------------------------- */
void OBJECTIVEC::emitProxyClassFunction(Node *n) {
- if (!proxy_flag)
- return;
-
- // Get some useful attributes of this function
- String *symname = Getattr(n,"sym:name");
- String *name = Getattr(n,"name");
- SwigType *type = Getattr(n,"type");
- ParmList *parmlist = Getattr(n,"parms");
- String *crettype = SwigType_str(type, 0);
- String *objcrettype = NewString("");
- String *imcall = NewString("");
- String *function_defn = NewString("");
- String *function_decl = NewString("");
- String *tm;
-
- String *imfunctionname = Getattr(n, "imfunctionname");
- String *proxyfunctionname;
-
- bool setter_flag = false;
- bool static_flag = (static_member_func_flag || static_member_variable_flag);
-
- // Retrieve the ObjectiveC return type for this function
- if ((tm = Swig_typemap_lookup("objctype", n, "", 0))) {
- substituteClassname(tm, type);
- Printf(objcrettype, "%s", tm);
+ if (!proxy_flag)
+ return;
+
+ // Get some useful attributes of this function
+ String *symname = Getattr(n, "sym:name");
+ String *name = Getattr(n, "name");
+ SwigType *type = Getattr(n, "type");
+ ParmList *parmlist = Getattr(n, "parms");
+ String *crettype = SwigType_str(type, 0);
+ String *objcrettype = NewString("");
+ String *imcall = NewString("");
+ String *function_defn = NewString("");
+ String *function_decl = NewString("");
+ String *tm;
+
+ String *imfunctionname = Getattr(n, "imfunctionname");
+ String *proxyfunctionname;
+
+ bool setter_flag = false;
+ bool static_flag = (static_member_func_flag || static_member_variable_flag);
+
+ // Retrieve the ObjectiveC return type for this function
+ if ((tm = Swig_typemap_lookup("objctype", n, "", 0))) {
+ substituteClassname(tm, type);
+ Printf(objcrettype, "%s", tm);
+ } else {
+ Swig_warning(WARN_OBJC_TYPEMAP_OBJCTYPE_UNDEF, input_file, line_number, "No objctype typemap defined for %s\n", crettype);
+ }
+
+ if (member_variable_flag || static_member_variable_flag || member_constant_flag) {
+ proxyfunctionname = NewString("");
+ setter_flag = Cmp(symname, Swig_name_set(getNSpace(), Swig_name_member(0, proxy_class_name, variable_name))) == 0;
+ if (setter_flag)
+ Printf(proxyfunctionname, "set");
+ else
+ Printf(proxyfunctionname, "get");
+ // Capitalize the first letter in the variable to create an ObjectiveC proxy function name
+ Putc(toupper((int) *Char(variable_name)), proxyfunctionname);
+ Printf(proxyfunctionname, "%s", Char(variable_name) + 1);
+
+ } else if (member_func_flag) {
+ proxyfunctionname = Copy(symname);
+ } else {
+ proxyfunctionname = Swig_scopename_last(name);
+ }
+
+ // Deal with overloading
+
+ /* Write the proxy function declaration and definition */
+
+ // Begin the first line of the function declaration
+ if (static_flag)
+ Printv(function_decl, "+(", objcrettype, ")", proxyfunctionname, NIL);
+ else
+ Printv(function_decl, "-(", objcrettype, ")", proxyfunctionname, NIL);
+
+ // Prepare the call to intermediate function
+ Printv(imcall, imfunctionname, "(", NIL);
+
+ // Attach the non-standard typemaps to the parameter list
+ Swig_typemap_attach_parms("in", parmlist, NULL);
+ Swig_typemap_attach_parms("objctype", parmlist, NULL);
+ Swig_typemap_attach_parms("objcin", parmlist, NULL);
+
+ Parm *p;
+ int i = 0;
+ int gencomma = 0;
+
+ for (p = parmlist; p; p = nextSibling(p), i++) {
+ p = skipIgnoredArgs(p);
+ SwigType *pt = Getattr(p, "type");
+ String *ln = Getattr(p, "lname");
+ String *objcparmtype = NewString("");
+
+ // Get the ObjectiveC parameter type for this parameter
+ if ((tm = Getattr(p, "tmap:objctype"))) {
+ substituteClassname(tm, pt);
+ Printf(objcparmtype, "%s", tm);
} else {
- Swig_warning(WARN_OBJC_TYPEMAP_OBJCTYPE_UNDEF, input_file, line_number, "No objctype typemap defined for %s\n", crettype);
+ Swig_warning(WARN_OBJC_TYPEMAP_OBJCTYPE_UNDEF, input_file, line_number, "No objctype typemap defined for %s\n", SwigType_str(pt, 0));
}
-
- if (member_variable_flag || static_member_variable_flag || member_constant_flag) {
- proxyfunctionname = NewString("");
- setter_flag = Cmp(symname, Swig_name_set(getNSpace(),Swig_name_member(0, proxy_class_name, variable_name))) == 0;
- if (setter_flag)
- Printf(proxyfunctionname, "set");
- else
- Printf(proxyfunctionname, "get");
- // Capitalize the first letter in the variable to create an ObjectiveC proxy function name
- Putc(toupper((int) *Char(variable_name)), proxyfunctionname);
- Printf(proxyfunctionname, "%s", Char(variable_name) + 1);
-
- } else if (member_func_flag) {
- proxyfunctionname = Copy(symname);
+
+ if (gencomma)
+ Printf(imcall, ", ");
+
+ String *arg = makeParameterName(n, p, i, setter_flag);
+
+ // Use typemaps to transform type used in Objective-C proxy function to the one used in intermediate code.
+ if ((tm = Getattr(p, "tmap:objcin"))) {
+ substituteClassname(tm, pt);
+ Replaceall(tm, "$objcinput", arg);
+ Printv(imcall, tm, NIL);
} else {
- proxyfunctionname = Swig_scopename_last(name);
+ Swig_warning(WARN_OBJC_TYPEMAP_OBJCIN_UNDEF, input_file, line_number, "No objcin typemap defined for %s\n", SwigType_str(pt, 0));
}
-
- // Deal with overloading
-
- /* Write the proxy function declaration and definition */
-
- // Begin the first line of the function declaration
- if (static_flag)
- Printv(function_decl, "+(", objcrettype , ")", proxyfunctionname, NIL);
- else
- Printv(function_decl, "-(", objcrettype , ")", proxyfunctionname, NIL);
-
- // Prepare the call to intermediate function
- Printv(imcall, imfunctionname, "(", NIL);
-
- // Attach the non-standard typemaps to the parameter list
- Swig_typemap_attach_parms("in", parmlist, NULL);
- Swig_typemap_attach_parms("objctype", parmlist, NULL);
- Swig_typemap_attach_parms("objcin", parmlist, NULL);
-
- Parm *p;
- int i = 0;
- int gencomma = 0;
-
- for (p = parmlist; p; p = nextSibling(p), i++)
- {
- p = skipIgnoredArgs(p);
- SwigType *pt = Getattr(p, "type");
- String *ln = Getattr(p, "lname");
- String *objcparmtype = NewString("");
-
- // Get the ObjectiveC parameter type for this parameter
- if ((tm = Getattr(p, "tmap:objctype"))) {
- substituteClassname(tm, pt);
- Printf(objcparmtype, "%s", tm);
- } else {
- Swig_warning(WARN_OBJC_TYPEMAP_OBJCTYPE_UNDEF, input_file, line_number, "No objctype typemap defined for %s\n", SwigType_str(pt, 0));
- }
-
- if (gencomma)
- Printf(imcall, ", ");
-
- String *arg = makeParameterName(n, p, i, setter_flag);
-
- // Use typemaps to transform type used in Objective-C proxy function to the one used in intermediate code.
- if ((tm = Getattr(p, "tmap:objcin"))) {
- substituteClassname(tm, pt);
- Replaceall(tm, "$objcinput", arg);
- Printv(imcall, tm, NIL);
- } else {
- Swig_warning(WARN_OBJC_TYPEMAP_OBJCIN_UNDEF, input_file, line_number, "No objcin typemap defined for %s\n", SwigType_str(pt, 0));
- }
-
- // Add parameter to proxy function
- if(static_flag) {
- if (gencomma == 0)
- Printf(function_decl, ": (%s)%s", objcparmtype, arg);
- else if(gencomma >=1)
- Printf(function_decl, " %s: (%s)%s", arg, objcparmtype, arg);
- }
- else {
- if (gencomma == 1)
- Printf(function_decl, ": (%s)%s", objcparmtype, arg);
- else if (gencomma >=2)
- Printf(function_decl, " %s: (%s)%s", arg, objcparmtype, arg);
- }
-gencomma++;
-
- Delete(arg);
- Delete(objcparmtype);
- }
-
- // First line of function definition
- Printv(function_defn, function_decl, "\n{\n", NIL);
- Printf(function_decl, ";");
-
- // End the call to the intermediate function
- Printv(imcall, ")", NIL);
-
- // Transform return type used in low level accessor to type used in Objective-C proxy function
- if ((tm = Swig_typemap_lookup("objcout", n, "", 0))) {
- substituteClassname(tm, type);
- Replaceall(tm, "$imcall", imcall);
+
+ // Add parameter to proxy function
+ if (static_flag) {
+ if (gencomma == 0)
+ Printf(function_decl, ": (%s)%s", objcparmtype, arg);
+ else if (gencomma >= 1)
+ Printf(function_decl, " %s: (%s)%s", arg, objcparmtype, arg);
} else {
- Swig_warning(WARN_OBJC_TYPEMAP_OBJCOUT_UNDEF, input_file, line_number, "No objcout typemap defined for %s\n", crettype);
+ if (gencomma == 1)
+ Printf(function_decl, ": (%s)%s", objcparmtype, arg);
+ else if (gencomma >= 2)
+ Printf(function_decl, " %s: (%s)%s", arg, objcparmtype, arg);
}
-
- Printf(function_defn, " %s\n}\n", tm? (const String *)tm : empty_string);
+ gencomma++;
+
+ Delete(arg);
+ Delete(objcparmtype);
+ }
+
+ // First line of function definition
+ Printv(function_defn, function_decl, "\n{\n", NIL);
+ Printf(function_decl, ";");
-
- /* Write the function declaration to the proxy_class_function_decls
+ // End the call to the intermediate function
+ Printv(imcall, ")", NIL);
+
+ // Transform return type used in low level accessor to type used in Objective-C proxy function
+ if ((tm = Swig_typemap_lookup("objcout", n, "", 0))) {
+ substituteClassname(tm, type);
+ Replaceall(tm, "$imcall", imcall);
+ } else {
+ Swig_warning(WARN_OBJC_TYPEMAP_OBJCOUT_UNDEF, input_file, line_number, "No objcout typemap defined for %s\n", crettype);
+ }
+
+ Printf(function_defn, " %s\n}\n", tm ? (const String *) tm : empty_string);
+
+
+ /* Write the function declaration to the proxy_class_function_decls
and function definition to the proxy_class_function_defns */
- Printv(proxy_class_function_decls, function_decl, "\n", NIL);
- Printv(proxy_class_function_defns, function_defn, "\n", NIL);
-
- //Delete(paramstring);
- Delete(proxyfunctionname);
- Delete(objcrettype);
- Delete(imcall);
- Delete(function_decl);
- Delete(function_defn);
+ Printv(proxy_class_function_decls, function_decl, "\n", NIL);
+ Printv(proxy_class_function_defns, function_defn, "\n", NIL);
+
+ //Delete(paramstring);
+ Delete(proxyfunctionname);
+ Delete(objcrettype);
+ Delete(imcall);
+ Delete(function_decl);
+ Delete(function_defn);
}
/* -----------------------------------------------------------------------------
@@ -1274,119 +1255,117 @@ gencomma++;
* ----------------------------------------------------------------------------- */
void OBJECTIVEC::emitProxyClassConstructor(Node *n) {
- if (!proxy_flag)
- return;
-
- // Get some useful attributes of the constructor
- String *name = Getattr(n,"name");
- SwigType *type = Getattr(n,"type");
- ParmList *parmlist = Getattr(n,"parms");
- String *imcall = NewString("");
- String *constructor_defn = NewString("");
- String *constructor_decl = NewString("");
- String *tm;
- String *objcrettype = NewString("id");
-
- String *imfunctionname = Getattr(n, "imfunctionname");
- String *proxyfunctionname = NewString("init");
-
- // Deal with overloading
-
- /* Write the proxy class constructor declaration and definition */
-
- // Begin the first line of the constructor
- Printv(constructor_decl, "-(", objcrettype , ")", proxyfunctionname, NIL);
-
- // Prepare the call to intermediate function
- Printv(imcall, imfunctionname, "(", NIL);
-
- // Attach the non-standard typemaps to the parameter list
- Swig_typemap_attach_parms("in", parmlist, NULL);
- Swig_typemap_attach_parms("objctype", parmlist, NULL);
- Swig_typemap_attach_parms("objcin", parmlist, NULL);
-
- Parm *p;
- int i = 0;
- int gencomma = 0;
-
- for (p = parmlist; p; p = nextSibling(p), i++)
- {
- p = skipIgnoredArgs(p);
- SwigType *pt = Getattr(p, "type");
- String *ln = Getattr(p, "lname");
- String *objcparmtype = NewString("");
-
- // Get the ObjectiveC parameter type for this parameter
- if ((tm = Getattr(p, "tmap:objctype"))) {
- substituteClassname(tm, pt);
- Printf(objcparmtype, "%s", tm);
- } else {
- Swig_warning(WARN_OBJC_TYPEMAP_OBJCTYPE_UNDEF, input_file, line_number, "No objctype typemap defined for %s\n", SwigType_str(pt, 0));
- }
-
- if (gencomma)
- Printf(imcall, ", ");
-
- String *arg = makeParameterName(n, p, i, false);
-
- // Use typemaps to transform type used in Objective-C proxy function to the one used in intermediate code.
- if ((tm = Getattr(p, "tmap:objcin"))) {
- substituteClassname(tm, pt);
- Replaceall(tm, "$objcinput", arg);
- Printv(imcall, tm, NIL);
- } else {
- Swig_warning(WARN_OBJC_TYPEMAP_OBJCIN_UNDEF, input_file, line_number, "No objcin typemap defined for %s\n", SwigType_str(pt, 0));
- }
-
- // Add parameter to proxy function
- if (gencomma >= 1) { // Subsequent arguments.
- Printf(constructor_decl, " %s:", arg);
- }
- else { // First valid argument, prefix it with 'With' and capitalize the first letter
- Printf(constructor_decl, "With");
- Putc(toupper((int) *Char(arg)), constructor_decl);
- Printf(constructor_decl, "%s:", (Char(arg) + 1));
- }
-
- Printf(constructor_decl, " (%s)%s", objcparmtype, arg);
- gencomma++;
-
- Delete(arg);
- Delete(objcparmtype);
-
- }
-
- // First line of function definition
- Printv(constructor_defn, constructor_decl, "\n{\n", NIL);
- Printf(constructor_decl, ";");
-
- // End the call to the intermediate function
- Printv(imcall, ")", NIL);
-
- // Insert the objcconstructor typemap
- Hash *attributes = NewHash();
- String *constructor_code = NewString("");
- const String *construct_tm = typemapLookup(n, "objcconstructor", name, WARN_NONE, attributes);
- if (construct_tm) {
- Printv(constructor_code, construct_tm, NIL);
- Replaceall(constructor_code, "$imcall", imcall);
+ if (!proxy_flag)
+ return;
+
+ // Get some useful attributes of the constructor
+ String *name = Getattr(n, "name");
+ SwigType *type = Getattr(n, "type");
+ ParmList *parmlist = Getattr(n, "parms");
+ String *imcall = NewString("");
+ String *constructor_defn = NewString("");
+ String *constructor_decl = NewString("");
+ String *tm;
+ String *objcrettype = NewString("id");
+
+ String *imfunctionname = Getattr(n, "imfunctionname");
+ String *proxyfunctionname = NewString("init");
+
+ // Deal with overloading
+
+ /* Write the proxy class constructor declaration and definition */
+
+ // Begin the first line of the constructor
+ Printv(constructor_decl, "-(", objcrettype, ")", proxyfunctionname, NIL);
+
+ // Prepare the call to intermediate function
+ Printv(imcall, imfunctionname, "(", NIL);
+
+ // Attach the non-standard typemaps to the parameter list
+ Swig_typemap_attach_parms("in", parmlist, NULL);
+ Swig_typemap_attach_parms("objctype", parmlist, NULL);
+ Swig_typemap_attach_parms("objcin", parmlist, NULL);
+
+ Parm *p;
+ int i = 0;
+ int gencomma = 0;
+
+ for (p = parmlist; p; p = nextSibling(p), i++) {
+ p = skipIgnoredArgs(p);
+ SwigType *pt = Getattr(p, "type");
+ String *ln = Getattr(p, "lname");
+ String *objcparmtype = NewString("");
+
+ // Get the ObjectiveC parameter type for this parameter
+ if ((tm = Getattr(p, "tmap:objctype"))) {
+ substituteClassname(tm, pt);
+ Printf(objcparmtype, "%s", tm);
+ } else {
+ Swig_warning(WARN_OBJC_TYPEMAP_OBJCTYPE_UNDEF, input_file, line_number, "No objctype typemap defined for %s\n", SwigType_str(pt, 0));
}
- Printf(constructor_defn, " %s\n}\n", constructor_code);
-
- Delete(attributes);
- Delete(constructor_code);
-
- /* Write the function declaration to the proxy_class_function_decls
+
+ if (gencomma)
+ Printf(imcall, ", ");
+
+ String *arg = makeParameterName(n, p, i, false);
+
+ // Use typemaps to transform type used in Objective-C proxy function to the one used in intermediate code.
+ if ((tm = Getattr(p, "tmap:objcin"))) {
+ substituteClassname(tm, pt);
+ Replaceall(tm, "$objcinput", arg);
+ Printv(imcall, tm, NIL);
+ } else {
+ Swig_warning(WARN_OBJC_TYPEMAP_OBJCIN_UNDEF, input_file, line_number, "No objcin typemap defined for %s\n", SwigType_str(pt, 0));
+ }
+
+ // Add parameter to proxy function
+ if (gencomma >= 1) { // Subsequent arguments.
+ Printf(constructor_decl, " %s:", arg);
+ } else { // First valid argument, prefix it with 'With' and capitalize the first letter
+ Printf(constructor_decl, "With");
+ Putc(toupper((int) *Char(arg)), constructor_decl);
+ Printf(constructor_decl, "%s:", (Char(arg) + 1));
+ }
+
+ Printf(constructor_decl, " (%s)%s", objcparmtype, arg);
+ gencomma++;
+
+ Delete(arg);
+ Delete(objcparmtype);
+
+ }
+
+ // First line of function definition
+ Printv(constructor_defn, constructor_decl, "\n{\n", NIL);
+ Printf(constructor_decl, ";");
+
+ // End the call to the intermediate function
+ Printv(imcall, ")", NIL);
+
+ // Insert the objcconstructor typemap
+ Hash *attributes = NewHash();
+ String *constructor_code = NewString("");
+ const String *construct_tm = typemapLookup(n, "objcconstructor", name, WARN_NONE, attributes);
+ if (construct_tm) {
+ Printv(constructor_code, construct_tm, NIL);
+ Replaceall(constructor_code, "$imcall", imcall);
+ }
+ Printf(constructor_defn, " %s\n}\n", constructor_code);
+
+ Delete(attributes);
+ Delete(constructor_code);
+
+ /* Write the function declaration to the proxy_class_function_decls
and function definition to the proxy_class_function_defns */
- Printv(proxy_class_function_decls, constructor_decl, "\n", NIL);
- Printv(proxy_class_function_defns, constructor_defn, "\n", NIL);
-
- //Delete(paramstring);
- Delete(proxyfunctionname);
- Delete(objcrettype);
- Delete(imcall);
- Delete(constructor_decl);
- Delete(constructor_defn);
+ Printv(proxy_class_function_decls, constructor_decl, "\n", NIL);
+ Printv(proxy_class_function_defns, constructor_defn, "\n", NIL);
+
+ //Delete(paramstring);
+ Delete(proxyfunctionname);
+ Delete(objcrettype);
+ Delete(imcall);
+ Delete(constructor_decl);
+ Delete(constructor_defn);
}
@@ -1400,173 +1379,166 @@ void OBJECTIVEC::emitProxyClassConstructor(Node *n) {
* Inputs:
* n – The class node currently processed.
* --------------------------------------------------------------------------- */
-void OBJECTIVEC::emitProxyClass(Node *n) {
- if (!proxy_flag)
- return;
-
- SwigType *typemap_lookup_type = Getattr(n, "classtypeobj");
-
- /*
- * Handle inheriting from ObjectiveC and C++ classes.
- */
- String *baseclass = NULL;
- String *c_baseclassname = NULL;
-
- // Inheritance from pure ObjectiveC classes.
- Node *attributes = NewHash();
- const String *pure_baseclass = typemapLookup(n, "objcbase", typemap_lookup_type, WARN_NONE, attributes);
- bool purebase_replace = GetFlag(attributes, "tmap:objcbase:replace") ? true : false;
- bool purebase_notderived = GetFlag(attributes, "tmap:objcbase:notderived") ? true : false;
- Delete(attributes);
-
- // C++ inheritance.
- if (!purebase_replace) {
- List *baselist = Getattr(n, "bases");
- if (baselist) {
- Iterator base = First(baselist);
- while (base.item && GetFlag(base.item, "feature:ignore")) {
- base = Next(base);
- }
- if (base.item) {
- c_baseclassname = Getattr(base.item, "name");
- baseclass = Copy(createProxyName(c_baseclassname));
- base = Next(base);
- /* Warn about multiple inheritance for additional base class(es) */
- while (base.item) {
- if (GetFlag(base.item, "feature:ignore")) {
- base = Next(base);
- continue;
- }
- String *proxyclassname = SwigType_str(Getattr(n, "classtypeobj"), 0);
- String *baseclassname = SwigType_str(Getattr(base.item, "name"), 0);
- Swig_warning(WARN_OBJC_MULTIPLE_INHERITANCE, Getfile(n), Getline(n),
- "Base %s of class %s ignored: multiple inheritance is not supported in ObjectiveC.\n",
- baseclassname, proxyclassname);
- base = Next(base);
- }
- }
- }
- }
-
- bool derived = baseclass && createProxyName(c_baseclassname);
- if (derived && purebase_notderived) {
- pure_baseclass = empty_string;
+void OBJECTIVEC::emitProxyClass(Node *n) {
+ if (!proxy_flag)
+ return;
+
+ SwigType *typemap_lookup_type = Getattr(n, "classtypeobj");
+
+ /*
+ * Handle inheriting from ObjectiveC and C++ classes.
+ */
+ String *baseclass = NULL;
+ String *c_baseclassname = NULL;
+
+ // Inheritance from pure ObjectiveC classes.
+ Node *attributes = NewHash();
+ const String *pure_baseclass = typemapLookup(n, "objcbase", typemap_lookup_type, WARN_NONE, attributes);
+ bool purebase_replace = GetFlag(attributes, "tmap:objcbase:replace") ? true : false;
+ bool purebase_notderived = GetFlag(attributes, "tmap:objcbase:notderived") ? true : false;
+ Delete(attributes);
+
+ // C++ inheritance.
+ if (!purebase_replace) {
+ List *baselist = Getattr(n, "bases");
+ if (baselist) {
+ Iterator base = First(baselist);
+ while (base.item && GetFlag(base.item, "feature:ignore")) {
+ base = Next(base);
+ }
+ if (base.item) {
+ c_baseclassname = Getattr(base.item, "name");
+ baseclass = Copy(createProxyName(c_baseclassname));
+ base = Next(base);
+ /* Warn about multiple inheritance for additional base class(es) */
+ while (base.item) {
+ if (GetFlag(base.item, "feature:ignore")) {
+ base = Next(base);
+ continue;
+ }
+ String *proxyclassname = SwigType_str(Getattr(n, "classtypeobj"), 0);
+ String *baseclassname = SwigType_str(Getattr(base.item, "name"), 0);
+ Swig_warning(WARN_OBJC_MULTIPLE_INHERITANCE, Getfile(n), Getline(n),
+ "Base %s of class %s ignored: multiple inheritance is not supported in ObjectiveC.\n", baseclassname, proxyclassname);
+ base = Next(base);
+ }
+ }
}
- const String *wanted_base = baseclass ? baseclass : pure_baseclass;
-
- if (purebase_replace) {
- wanted_base = pure_baseclass;
- derived = false;
- Delete(baseclass);
- baseclass = NULL;
- if (purebase_notderived) {
- Swig_error(Getfile(n), Getline(n),
- "The objcbase typemap for proxy %s must contain just one of the 'replace' or 'notderived' attributes.\n",
- typemap_lookup_type);
- }
- } else if (Len(pure_baseclass) > 0 && Len(baseclass) > 0) {
- Swig_warning(WARN_OBJC_MULTIPLE_INHERITANCE, Getfile(n), Getline(n),
- "Warning for %s proxy: Base class %s ignored. Multiple inheritance is not supported in ObjectiveC. "
- "Perhaps you need one of the 'replace' or 'notderived' attributes in the objcbase typemap?\n", typemap_lookup_type, pure_baseclass);
+ }
+
+ bool derived = baseclass && createProxyName(c_baseclassname);
+ if (derived && purebase_notderived) {
+ pure_baseclass = empty_string;
+ }
+ const String *wanted_base = baseclass ? baseclass : pure_baseclass;
+
+ if (purebase_replace) {
+ wanted_base = pure_baseclass;
+ derived = false;
+ Delete(baseclass);
+ baseclass = NULL;
+ if (purebase_notderived) {
+ Swig_error(Getfile(n), Getline(n),
+ "The objcbase typemap for proxy %s must contain just one of the 'replace' or 'notderived' attributes.\n", typemap_lookup_type);
}
-
- /* Destructor handling */
- // If the C++ destructor is accessible (public), it is wrapped by the
- // dealloc() method in ObjectiveC. If it is not accessible, dealloc() method is written and throws an exception.
- String *destructor_decl = NewString("");
- String *destructor_defn = NewString("");
- const String *tm = NULL;
-
- String *destructor_methodname;
- String *destructor_methodmodifiers;
- attributes = NewHash();
-
- tm = typemapLookup(n, "objcdestructor", typemap_lookup_type, WARN_NONE, attributes);
- destructor_methodname = Getattr(attributes, "tmap:objcdestructor:methodname");
- destructor_methodmodifiers = Getattr(attributes, "tmap:objcdestructor:methodmodifiers");
-
- if (tm && *Char(tm)) {
- if (!destructor_methodname) {
- Swig_error(Getfile(n), Getline(n),
- "No methodname attribute defined in the objcdestructor typemap for %s\n", proxy_class_name);
- }
- if (!destructor_methodmodifiers) {
- Swig_error(Getfile(n), Getline(n),
- "No methodmodifiers attribute defined in objcdestructor typemap for %s.\n", proxy_class_name);
- }
+ } else if (Len(pure_baseclass) > 0 && Len(baseclass) > 0) {
+ Swig_warning(WARN_OBJC_MULTIPLE_INHERITANCE, Getfile(n), Getline(n),
+ "Warning for %s proxy: Base class %s ignored. Multiple inheritance is not supported in ObjectiveC. "
+ "Perhaps you need one of the 'replace' or 'notderived' attributes in the objcbase typemap?\n", typemap_lookup_type, pure_baseclass);
+ }
+
+ /* Destructor handling */
+ // If the C++ destructor is accessible (public), it is wrapped by the
+ // dealloc() method in ObjectiveC. If it is not accessible, dealloc() method is written and throws an exception.
+ String *destructor_decl = NewString("");
+ String *destructor_defn = NewString("");
+ const String *tm = NULL;
+
+ String *destructor_methodname;
+ String *destructor_methodmodifiers;
+ attributes = NewHash();
+
+ tm = typemapLookup(n, "objcdestructor", typemap_lookup_type, WARN_NONE, attributes);
+ destructor_methodname = Getattr(attributes, "tmap:objcdestructor:methodname");
+ destructor_methodmodifiers = Getattr(attributes, "tmap:objcdestructor:methodmodifiers");
+
+ if (tm && *Char(tm)) {
+ if (!destructor_methodname) {
+ Swig_error(Getfile(n), Getline(n), "No methodname attribute defined in the objcdestructor typemap for %s\n", proxy_class_name);
}
-
- if (tm) {
- // Write the dealloc() method declaration for the proxy interface
- Printv(destructor_decl, "\n", "-(void)", destructor_methodname, ";\n", NIL);
-
- // And, the dealloc() method definition for the proxy implementation
- String *destructor_code = NewString("");
- Printv(destructor_code, tm, NIL);
-
- if (*Char(destrcutor_call)) {
- Replaceall(destructor_code, "$imcall", destrcutor_call);
- } else {
- Replaceall(destructor_code, "$imcall",
- "[NSException raise:@\"UnsupportedOperationException\" format: @\"%@\", \
- @\"C++ destructor does not have public access\"]");
- }
-
- if (*Char(destructor_code)) {
- Printv(destructor_defn, "\n", "-(void)", destructor_methodname, "{\n", destructor_code, "\n}\n", NIL);
- }
-
- Delete(destructor_code);
+ if (!destructor_methodmodifiers) {
+ Swig_error(Getfile(n), Getline(n), "No methodmodifiers attribute defined in objcdestructor typemap for %s.\n", proxy_class_name);
}
+ }
+
+ if (tm) {
+ // Write the dealloc() method declaration for the proxy interface
+ Printv(destructor_decl, "\n", "-(void)", destructor_methodname, ";\n", NIL);
+
+ // And, the dealloc() method definition for the proxy implementation
+ String *destructor_code = NewString("");
+ Printv(destructor_code, tm, NIL);
-
- /* Write the proxy class declaration */
- // Class modifiers.
- const String *objcinterfacemodifier = typemapLookup(n, "objcinterfacemodifier", typemap_lookup_type, WARN_OBJC_INTERFACE_MOD);
-
- // User-defined protocols.
- const String *protocols = typemapLookup(n, derived ? "objcprotocols_derived" : "objcprotocols", typemap_lookup_type, WARN_NONE);
-
- // Default interface code
- const String *objcinterfacecode;
- if (derived) {
- objcinterfacecode = typemapLookup(n, "objcinterfacecode_derived", typemap_lookup_type, WARN_NONE);
+ if (*Char(destrcutor_call)) {
+ Replaceall(destructor_code, "$imcall", destrcutor_call);
} else {
- objcinterfacecode = typemapLookup(n, "objcinterfacecode", typemap_lookup_type, WARN_NONE);
+ Replaceall(destructor_code, "$imcall", "[NSException raise:@\"UnsupportedOperationException\" format: @\"%@\", \
+ @\"C++ destructor does not have public access\"]");
}
-
- // the class interface
- Printv(proxy_class_decl_code, proxy_class_imports, proxy_class_enums_code,
- objcinterfacemodifier, " $objcclassname",
- (*Char(wanted_base) || *Char(protocols)) ? " : " : "", wanted_base,
- (*Char(wanted_base) && *Char(protocols)) ? ", " : "", protocols,
- objcinterfacecode, proxy_class_function_decls,
- destructor_decl, "\n", typemapLookup(n, "objcclassclose", typemap_lookup_type, WARN_NONE), "\n\n", NIL);
-
-
- /* Write the proxy class definition */
- // Class modifiers.
- const String *objccimplementationmodifier = typemapLookup(n, "objcimplementationmodifier", typemap_lookup_type, WARN_OBJC_IMPLEMENTATION_MOD);
-
- // Default implementationcode code
- const String *objcimplementationcode;
- if (derived) {
- objcimplementationcode = typemapLookup(n, "objcimplementationcode_derived", typemap_lookup_type, WARN_NONE);
- } else {
- objcimplementationcode = typemapLookup(n, "objcimplementationcode", typemap_lookup_type, WARN_NONE);
+
+ if (*Char(destructor_code)) {
+ Printv(destructor_defn, "\n", "-(void)", destructor_methodname, "{\n", destructor_code, "\n}\n", NIL);
}
-
- // the class implementation
- Printv(proxy_class_defn_code, "\n", objccimplementationmodifier, " $objcclassname", objcimplementationcode, "\n",
- proxy_class_function_defns,
- destructor_defn, "\n", typemapLookup(n, "objcclassclose", typemap_lookup_type, WARN_NONE), "\n\n", NIL);
- Replaceall(proxy_class_decl_code, "$objcbaseclass", proxy_class_name);
- Replaceall(proxy_class_defn_code, "$objcbaseclass", proxy_class_name);
+ Delete(destructor_code);
+ }
- Delete(baseclass);
- Delete(destructor_decl);
- Delete(destructor_defn);
+
+ /* Write the proxy class declaration */
+ // Class modifiers.
+ const String *objcinterfacemodifier = typemapLookup(n, "objcinterfacemodifier", typemap_lookup_type, WARN_OBJC_INTERFACE_MOD);
+
+ // User-defined protocols.
+ const String *protocols = typemapLookup(n, derived ? "objcprotocols_derived" : "objcprotocols", typemap_lookup_type, WARN_NONE);
+
+ // Default interface code
+ const String *objcinterfacecode;
+ if (derived) {
+ objcinterfacecode = typemapLookup(n, "objcinterfacecode_derived", typemap_lookup_type, WARN_NONE);
+ } else {
+ objcinterfacecode = typemapLookup(n, "objcinterfacecode", typemap_lookup_type, WARN_NONE);
+ }
+
+ // the class interface
+ Printv(proxy_class_decl_code, proxy_class_imports, proxy_class_enums_code,
+ objcinterfacemodifier, " $objcclassname",
+ (*Char(wanted_base) || *Char(protocols)) ? " : " : "", wanted_base,
+ (*Char(wanted_base) && *Char(protocols)) ? ", " : "", protocols,
+ objcinterfacecode, proxy_class_function_decls, destructor_decl, "\n", typemapLookup(n, "objcclassclose", typemap_lookup_type, WARN_NONE), "\n\n", NIL);
+
+
+ /* Write the proxy class definition */
+ // Class modifiers.
+ const String *objccimplementationmodifier = typemapLookup(n, "objcimplementationmodifier", typemap_lookup_type, WARN_OBJC_IMPLEMENTATION_MOD);
+
+ // Default implementationcode code
+ const String *objcimplementationcode;
+ if (derived) {
+ objcimplementationcode = typemapLookup(n, "objcimplementationcode_derived", typemap_lookup_type, WARN_NONE);
+ } else {
+ objcimplementationcode = typemapLookup(n, "objcimplementationcode", typemap_lookup_type, WARN_NONE);
+ }
+
+ // the class implementation
+ Printv(proxy_class_defn_code, "\n", objccimplementationmodifier, " $objcclassname", objcimplementationcode, "\n",
+ proxy_class_function_defns, destructor_defn, "\n", typemapLookup(n, "objcclassclose", typemap_lookup_type, WARN_NONE), "\n\n", NIL);
+
+ Replaceall(proxy_class_decl_code, "$objcbaseclass", proxy_class_name);
+ Replaceall(proxy_class_defn_code, "$objcbaseclass", proxy_class_name);
+
+ Delete(baseclass);
+ Delete(destructor_decl);
+ Delete(destructor_defn);
}
@@ -1574,41 +1546,40 @@ void OBJECTIVEC::emitProxyClass(Node *n) {
* emitTypeWrapperClass()
* --------------------------------------------------------------------------- */
void OBJECTIVEC::emitTypeWrapperClass(String *classname, SwigType *type) {
- Node *n = NewHash();
- Setfile(n, input_file);
- Setline(n, line_number);
-
- // Pure ObjectiveC baseclass and interfaces.
- const String *pure_baseclass = typemapLookup(n, "objcbase", type, WARN_NONE);
- const String *pure_interfaces = typemapLookup(n, "objcprotocols", type, WARN_NONE);
-
- /* Write the type wrapper class declaration */
- // Class modifiers.
- const String *objcinterfacemodifier = typemapLookup(n, "objcinterfacemodifier", type, WARN_OBJC_INTERFACE_MOD);
-
- // Default interface code
- const String *objcinterfacecode = typemapLookup(n, "objcinterfacecode", type, WARN_NONE);
-
- Printv(swigtypes_h_code, objcinterfacemodifier, " $objcclassname",
- (*Char(pure_baseclass) || *Char(pure_interfaces)) ? " : " : "", pure_baseclass,
- (*Char(pure_baseclass) && *Char(pure_interfaces)) ? ", " : "", pure_interfaces,
- objcinterfacecode,
- "\n", typemapLookup(n, "objcclassclose", type, WARN_NONE), "\n\n", NIL);
-
- /* Write the type wrapper class definition */
- // Class modifiers.
- const String *objccimplementationmodifier = typemapLookup(n, "objcimplementationmodifier", type, WARN_OBJC_IMPLEMENTATION_MOD);
-
- // Default implementationcode code
- const String *objcimplementationcode= typemapLookup(n, "objcimplementationcode", type, WARN_NONE);
-
- Printv(swigtypes_mm_code, "\n", objccimplementationmodifier, " $objcclassname", objcimplementationcode,
- "\n", typemapLookup(n, "objcclassclose", type, WARN_NONE), "\n\n", NIL);
-
- Replaceall(swigtypes_h_code, "$objcclassname", classname);
- Replaceall(swigtypes_mm_code, "$objcclassname", classname);
-
- Delete(n);
+ Node *n = NewHash();
+ Setfile(n, input_file);
+ Setline(n, line_number);
+
+ // Pure ObjectiveC baseclass and interfaces.
+ const String *pure_baseclass = typemapLookup(n, "objcbase", type, WARN_NONE);
+ const String *pure_interfaces = typemapLookup(n, "objcprotocols", type, WARN_NONE);
+
+ /* Write the type wrapper class declaration */
+ // Class modifiers.
+ const String *objcinterfacemodifier = typemapLookup(n, "objcinterfacemodifier", type, WARN_OBJC_INTERFACE_MOD);
+
+ // Default interface code
+ const String *objcinterfacecode = typemapLookup(n, "objcinterfacecode", type, WARN_NONE);
+
+ Printv(swigtypes_h_code, objcinterfacemodifier, " $objcclassname",
+ (*Char(pure_baseclass) || *Char(pure_interfaces)) ? " : " : "", pure_baseclass,
+ (*Char(pure_baseclass) && *Char(pure_interfaces)) ? ", " : "", pure_interfaces,
+ objcinterfacecode, "\n", typemapLookup(n, "objcclassclose", type, WARN_NONE), "\n\n", NIL);
+
+ /* Write the type wrapper class definition */
+ // Class modifiers.
+ const String *objccimplementationmodifier = typemapLookup(n, "objcimplementationmodifier", type, WARN_OBJC_IMPLEMENTATION_MOD);
+
+ // Default implementationcode code
+ const String *objcimplementationcode = typemapLookup(n, "objcimplementationcode", type, WARN_NONE);
+
+ Printv(swigtypes_mm_code, "\n", objccimplementationmodifier, " $objcclassname", objcimplementationcode,
+ "\n", typemapLookup(n, "objcclassclose", type, WARN_NONE), "\n\n", NIL);
+
+ Replaceall(swigtypes_h_code, "$objcclassname", classname);
+ Replaceall(swigtypes_mm_code, "$objcclassname", classname);
+
+ Delete(n);
}
@@ -1631,35 +1602,35 @@ void OBJECTIVEC::emitTypeWrapperClass(String *classname, SwigType *type) {
* ----------------------------------------------------------------------------- */
bool OBJECTIVEC::substituteClassname(String *tm, SwigType *pt) {
- bool substitution_performed = false;
- SwigType *type = Copy(SwigType_typedef_resolve_all(pt));
- SwigType *strippedtype = SwigType_strip_qualifiers(type);
-
- if (Strstr(tm, "$objcclassname")) {
- SwigType *type = Copy(strippedtype);
- substituteClassnameVariable(tm, "$objcclassname", type);
- substitution_performed = true;
- Delete(type);
- }
- if (Strstr(tm, "$*objcclassname")) {
- SwigType *type = Copy(strippedtype);
- Delete(SwigType_pop(type));
- substituteClassnameVariable(tm, "$*objcclassname", type);
- substitution_performed = true;
- Delete(type);
- }
- if (Strstr(tm, "$&objcclassname")) {
- SwigType *type = Copy(strippedtype);
- SwigType_add_pointer(type);
- substituteClassnameVariable(tm, "$&objcclassname", type);
- substitution_performed = true;
- Delete(type);
- }
-
- Delete(strippedtype);
+ bool substitution_performed = false;
+ SwigType *type = Copy(SwigType_typedef_resolve_all(pt));
+ SwigType *strippedtype = SwigType_strip_qualifiers(type);
+
+ if (Strstr(tm, "$objcclassname")) {
+ SwigType *type = Copy(strippedtype);
+ substituteClassnameVariable(tm, "$objcclassname", type);
+ substitution_performed = true;
+ Delete(type);
+ }
+ if (Strstr(tm, "$*objcclassname")) {
+ SwigType *type = Copy(strippedtype);
+ Delete(SwigType_pop(type));
+ substituteClassnameVariable(tm, "$*objcclassname", type);
+ substitution_performed = true;
Delete(type);
-
- return substitution_performed;
+ }
+ if (Strstr(tm, "$&objcclassname")) {
+ SwigType *type = Copy(strippedtype);
+ SwigType_add_pointer(type);
+ substituteClassnameVariable(tm, "$&objcclassname", type);
+ substitution_performed = true;
+ Delete(type);
+ }
+
+ Delete(strippedtype);
+ Delete(type);
+
+ return substitution_performed;
}
/* -----------------------------------------------------------------------------
@@ -1667,37 +1638,36 @@ bool OBJECTIVEC::substituteClassname(String *tm, SwigType *pt) {
* ----------------------------------------------------------------------------- */
void OBJECTIVEC::substituteClassnameVariable(String *tm, const char *classnamevariable, SwigType *type) {
- String *type_name;
-
- if (SwigType_isenum(type)) {
- Node *n = enumLookup(type);
- String *enum_name = Getattr(n, "sym:name");
- Node *p = parentNode(n);
- if (p && !Strcmp(nodeType(p), "class")) {
- // This is a nested enum.
- String *parent_name = Getattr(p, "sym:name");
- type_name = NewStringf("enum %s_%s", parent_name, enum_name);
- }
- else {
- type_name = NewStringf("enum %s", enum_name);
- }
+ String *type_name;
+
+ if (SwigType_isenum(type)) {
+ Node *n = enumLookup(type);
+ String *enum_name = Getattr(n, "sym:name");
+ Node *p = parentNode(n);
+ if (p && !Strcmp(nodeType(p), "class")) {
+ // This is a nested enum.
+ String *parent_name = Getattr(p, "sym:name");
+ type_name = NewStringf("enum %s_%s", parent_name, enum_name);
+ } else {
+ type_name = NewStringf("enum %s", enum_name);
+ }
+ } else {
+ String *class_name = createProxyName(type);
+ if (class_name) {
+ type_name = Copy(class_name);
} else {
- String *class_name = createProxyName(type);
- if (class_name) {
- type_name = Copy(class_name);
- } else {
- // SWIG does not know anything about the type (after resolving typedefs).
- // Just mangle the type name string like $descriptor(type) would do.
- String *descriptor = NewStringf("SWIGTYPE%s", SwigType_manglestr(type));
- type_name = Copy(descriptor);
-
- // Add to hash table so that the type wrapper classes can be created later
- Setattr(unknown_types, descriptor, type);
- Delete(descriptor);
- }
- }
- Replaceall(tm, classnamevariable, type_name);
- Delete(type_name);
+ // SWIG does not know anything about the type (after resolving typedefs).
+ // Just mangle the type name string like $descriptor(type) would do.
+ String *descriptor = NewStringf("SWIGTYPE%s", SwigType_manglestr(type));
+ type_name = Copy(descriptor);
+
+ // Add to hash table so that the type wrapper classes can be created later
+ Setattr(unknown_types, descriptor, type);
+ Delete(descriptor);
+ }
+ }
+ Replaceall(tm, classnamevariable, type_name);
+ Delete(type_name);
}
/* ---------------------------------------------------------------------
@@ -1705,10 +1675,10 @@ void OBJECTIVEC::substituteClassnameVariable(String *tm, const char *classnameva
*
* --------------------------------------------------------------------- */
Parm *OBJECTIVEC::skipIgnoredArgs(Parm *p) {
- while (checkAttribute(p, "tmap:in:numinputs", "0")) {
- p = Getattr(p, "tmap:in:next");
- }
- return p;
+ while (checkAttribute(p, "tmap:in:numinputs", "0")) {
+ p = Getattr(p, "tmap:in:next");
+ }
+ return p;
}
/* ---------------------------------------------------------------------
@@ -1719,32 +1689,30 @@ Parm *OBJECTIVEC::skipIgnoredArgs(Parm *p) {
* --------------------------------------------------------------------- */
void OBJECTIVEC::marshalInputArgs(ParmList *parmlist, Wrapper *wrapper) {
- String *tm;
- Parm *p;
- int i = 0;
-
- for (p = parmlist; p; p = nextSibling(p), i++)
- {
- p = skipIgnoredArgs(p);
- SwigType *pt = Getattr(p, "type");
- String *ln = Getattr(p, "lname");
-
- String *arg = NewString("");
- Printf(arg, "imarg%d", i+1);
-
- // Get the "in" typemap for this argument and add to the wrapper->code
- if ((tm = Getattr(p, "tmap:in")))
- {
- Replaceall(tm, "$input", arg);
- Setattr(p, "emit:input", arg);
- Printf(wrapper->code, "%s\n", tm);
- } else {
- Swig_warning(WARN_TYPEMAP_IN_UNDEF, input_file, line_number, "Unable to use type %s as a function argument.\n", SwigType_str(pt, 0));
- p = nextSibling(p);
- }
- Delete(arg);
- }
-
+ String *tm;
+ Parm *p;
+ int i = 0;
+
+ for (p = parmlist; p; p = nextSibling(p), i++) {
+ p = skipIgnoredArgs(p);
+ SwigType *pt = Getattr(p, "type");
+ String *ln = Getattr(p, "lname");
+
+ String *arg = NewString("");
+ Printf(arg, "imarg%d", i + 1);
+
+ // Get the "in" typemap for this argument and add to the wrapper->code
+ if ((tm = Getattr(p, "tmap:in"))) {
+ Replaceall(tm, "$input", arg);
+ Setattr(p, "emit:input", arg);
+ Printf(wrapper->code, "%s\n", tm);
+ } else {
+ Swig_warning(WARN_TYPEMAP_IN_UNDEF, input_file, line_number, "Unable to use type %s as a function argument.\n", SwigType_str(pt, 0));
+ p = nextSibling(p);
+ }
+ Delete(arg);
+ }
+
}
/* ---------------------------------------------------------------------
@@ -1753,41 +1721,40 @@ void OBJECTIVEC::marshalInputArgs(ParmList *parmlist, Wrapper *wrapper) {
* --------------------------------------------------------------------- */
void OBJECTIVEC::makeParameterList(ParmList *parmlist, Wrapper *wrapper) {
-
- // Attach the non-standard typemaps to the parameter list
- Swig_typemap_attach_parms("imtype", parmlist, wrapper);
-
- String *tm;
- Parm *p;
- int i = 0;
- int gencomma = 0;
-
- for (p = parmlist; p; p = nextSibling(p), i++)
- {
- p = skipIgnoredArgs(p);
- SwigType *pt = Getattr(p, "type");
- String *ln = Getattr(p, "lname");
-
- String *imparmtype = NewString("");
- String *arg = NewString("");
-
- Printf(arg, "imarg%d", i+1);
-
- // Get the intermediate parameter type for this parameter
- if ((tm = Getattr(p, "tmap:imtype"))) {
- Printv(imparmtype, tm, NIL);
- if (gencomma)
- Printf(wrapper->def, ", ");
- Printv(wrapper->def, imparmtype, " ", arg, NIL); // Add parameter to the function signature (wrapper->def)
- ++gencomma;
- } else {
- Swig_warning(WARN_OBJC_TYPEMAP_IMTYPE_UNDEF, input_file, line_number, "No imtype typemap defined for %s\n", SwigType_str(pt, 0));
- p = nextSibling(p);
- }
-
- Delete(imparmtype);
- Delete(arg);
- }
+
+ // Attach the non-standard typemaps to the parameter list
+ Swig_typemap_attach_parms("imtype", parmlist, wrapper);
+
+ String *tm;
+ Parm *p;
+ int i = 0;
+ int gencomma = 0;
+
+ for (p = parmlist; p; p = nextSibling(p), i++) {
+ p = skipIgnoredArgs(p);
+ SwigType *pt = Getattr(p, "type");
+ String *ln = Getattr(p, "lname");
+
+ String *imparmtype = NewString("");
+ String *arg = NewString("");
+
+ Printf(arg, "imarg%d", i + 1);
+
+ // Get the intermediate parameter type for this parameter
+ if ((tm = Getattr(p, "tmap:imtype"))) {
+ Printv(imparmtype, tm, NIL);
+ if (gencomma)
+ Printf(wrapper->def, ", ");
+ Printv(wrapper->def, imparmtype, " ", arg, NIL); // Add parameter to the function signature (wrapper->def)
+ ++gencomma;
+ } else {
+ Swig_warning(WARN_OBJC_TYPEMAP_IMTYPE_UNDEF, input_file, line_number, "No imtype typemap defined for %s\n", SwigType_str(pt, 0));
+ p = nextSibling(p);
+ }
+
+ Delete(imparmtype);
+ Delete(arg);
+ }
}
/* ---------------------------------------------------------------------
@@ -1799,20 +1766,19 @@ void OBJECTIVEC::makeParameterList(ParmList *parmlist, Wrapper *wrapper) {
* --------------------------------------------------------------------- */
void OBJECTIVEC::marshalOutput(Node *n, String *actioncode, Wrapper *wrapper) {
- SwigType *type = Getattr(n, "type");
- // Emit the out typemap
- String *tm;
- if ((tm = Swig_typemap_lookup_out("out", n, "result", wrapper, actioncode)))
- {
- Replaceall(tm, "$result", "imresult");
- Printf(wrapper->code, "%s", tm);
- if (Len(tm))
- Printf(wrapper->code, "\n");
- } else {
- Swig_warning(WARN_TYPEMAP_OUT_UNDEF, input_file, line_number, "Unable to use return type %s in function %s.\n", SwigType_str(type, 0), Getattr(n, "name"));
- }
- // Emits a variable declaration for a function return value
- emit_return_variable(n, type, wrapper);
+ SwigType *type = Getattr(n, "type");
+ // Emit the out typemap
+ String *tm;
+ if ((tm = Swig_typemap_lookup_out("out", n, "result", wrapper, actioncode))) {
+ Replaceall(tm, "$result", "imresult");
+ Printf(wrapper->code, "%s", tm);
+ if (Len(tm))
+ Printf(wrapper->code, "\n");
+ } else {
+ Swig_warning(WARN_TYPEMAP_OUT_UNDEF, input_file, line_number, "Unable to use return type %s in function %s.\n", SwigType_str(type, 0), Getattr(n, "name"));
+ }
+ // Emits a variable declaration for a function return value
+ emit_return_variable(n, type, wrapper);
}
@@ -1828,31 +1794,31 @@ void OBJECTIVEC::marshalOutput(Node *n, String *actioncode, Wrapper *wrapper) {
* arg - a unique parameter name
* --------------------------------------------------------------------------- */
String *OBJECTIVEC::makeParameterName(Node *n, Parm *p, int argnumber, bool setter) const {
- String *arg = 0;
- String *pn = Getattr(p, "name");
-
- // Use C parameter name unless it is a duplicate or an empty parameter name
- int count = 0;
- ParmList *plist = Getattr(n, "parms");
- while (plist) {
- if ((Cmp(pn, Getattr(plist, "name")) == 0))
- count++;
- plist = nextSibling(plist);
- }
- String *wrn = pn ? Swig_name_warning(p, 0, pn, 0) : 0;
- arg = (!pn || (count > 1) || wrn) ? NewStringf("arg%d", argnumber) : Copy(pn);
-
- if (setter && Cmp(arg, "self") != 0) {
- // In theory, we could use the normal parameter name for setter functions.
- // Unfortunately, it is set to "Class::VariableName" for static public
- // members by the parser, which is not legal ObjectiveC syntax. Thus, we just force
- // it to "value".
- Delete(arg);
- arg = NewString("value");
- }
-
-
- return arg;
+ String *arg = 0;
+ String *pn = Getattr(p, "name");
+
+ // Use C parameter name unless it is a duplicate or an empty parameter name
+ int count = 0;
+ ParmList *plist = Getattr(n, "parms");
+ while (plist) {
+ if ((Cmp(pn, Getattr(plist, "name")) == 0))
+ count++;
+ plist = nextSibling(plist);
+ }
+ String *wrn = pn ? Swig_name_warning(p, 0, pn, 0) : 0;
+ arg = (!pn || (count > 1) || wrn) ? NewStringf("arg%d", argnumber) : Copy(pn);
+
+ if (setter && Cmp(arg, "self") != 0) {
+ // In theory, we could use the normal parameter name for setter functions.
+ // Unfortunately, it is set to "Class::VariableName" for static public
+ // members by the parser, which is not legal ObjectiveC syntax. Thus, we just force
+ // it to "value".
+ Delete(arg);
+ arg = NewString("value");
+ }
+
+
+ return arg;
}
@@ -1863,14 +1829,14 @@ String *OBJECTIVEC::makeParameterName(Node *n, Parm *p, int argnumber, bool sett
* proxy class, NULL otherwise.
* ----------------------------------------------------------------------------- */
-String *OBJECTIVEC::createProxyName(SwigType *t) { // TODO: See this once more for nspaces.
- if (proxy_flag) {
- Node *n = classLookup(t);
- if (n) {
- return Getattr(n, "sym:name");
- }
+String *OBJECTIVEC::createProxyName(SwigType *t) { // TODO: See this once more for nspaces.
+ if (proxy_flag) {
+ Node *n = classLookup(t);
+ if (n) {
+ return Getattr(n, "sym:name");
}
- return NULL;
+ }
+ return NULL;
}
/* -----------------------------------------------------------------------------
@@ -1885,19 +1851,19 @@ String *OBJECTIVEC::createProxyName(SwigType *t) { // TODO: See this once more
* ----------------------------------------------------------------------------- */
const String *OBJECTIVEC::typemapLookup(Node *n, const_String_or_char_ptr tmap_method, SwigType *type, int warning, Node *typemap_attributes) {
- Node *node = !typemap_attributes ? NewHash() : typemap_attributes;
- Setattr(node, "type", type);
- Setfile(node, Getfile(n));
- Setline(node, Getline(n));
- const String *tm = Swig_typemap_lookup(tmap_method, node, "", 0);
- if (!tm) {
- tm = empty_string;
- if (warning != WARN_NONE)
- Swig_warning(warning, Getfile(n), Getline(n), "No %s typemap defined for %s\n", tmap_method, SwigType_str(type, 0));
- }
- if (!typemap_attributes)
- Delete(node);
- return tm;
+ Node *node = !typemap_attributes ? NewHash() : typemap_attributes;
+ Setattr(node, "type", type);
+ Setfile(node, Getfile(n));
+ Setline(node, Getline(n));
+ const String *tm = Swig_typemap_lookup(tmap_method, node, "", 0);
+ if (!tm) {
+ tm = empty_string;
+ if (warning != WARN_NONE)
+ Swig_warning(warning, Getfile(n), Getline(n), "No %s typemap defined for %s\n", tmap_method, SwigType_str(type, 0));
+ }
+ if (!typemap_attributes)
+ Delete(node);
+ return tm;
}
@@ -1917,7 +1883,7 @@ extern "C" Language *swig_objectivec(void) {
* ----------------------------------------------------------------------------- */
// Usage message.
-const char * const OBJECTIVEC::usage = (char *) "\
+const char *const OBJECTIVEC::usage = (char *) "\
ObjectiveC options (available with -objc)\n\
-noproxy - Do not generate proxy files (Only C wrappers will be generated) \n\
-help - This message \n\