From: <je...@us...> - 2008-07-21 18:20:54
|
Revision: 10695 http://swig.svn.sourceforge.net/swig/?rev=10695&view=rev Author: jezabek Date: 2008-07-21 18:20:51 +0000 (Mon, 21 Jul 2008) Log Message: ----------- Fix minor bug when wrapping opaque types - SWIG_wrap<type> now takes an additional cMemOwn parameter. Modified Paths: -------------- branches/gsoc2008-jezabek/Source/Modules/com.cxx Modified: branches/gsoc2008-jezabek/Source/Modules/com.cxx =================================================================== --- branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-07-21 15:52:30 UTC (rev 10694) +++ branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-07-21 18:20:51 UTC (rev 10695) @@ -1304,7 +1304,7 @@ Replaceall(proxy_class_forward_def, "$module", module_class_name); Replaceall(proxy_class_def, "$module", module_class_name); - Printf(f_vtable_defs, "void * (SWIGSTDCALL * SWIG_wrap%s)(void *) = SWIG_wrap_opaque;\n", classname); + Printf(f_vtable_defs, "void * (SWIGSTDCALL * SWIG_wrap%s)(void *, int) = SWIG_wrap_opaque;\n", classname); Printv(f_proxy_forward_defs, proxy_class_forward_def, NIL); Printv(f_proxy, proxy_class_def, NIL); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <je...@us...> - 2008-07-22 18:19:07
|
Revision: 10698 http://swig.svn.sourceforge.net/swig/?rev=10698&view=rev Author: jezabek Date: 2008-07-22 18:19:03 +0000 (Tue, 22 Jul 2008) Log Message: ----------- Allow users to specify GUIDs for the typelib, module class (IID and CLSID) and proxy classes (IID and CLSID). If no GUIDs are given generate them using procedure v5 from RFC4122 (using SHA-1). Modified Paths: -------------- branches/gsoc2008-jezabek/Source/Modules/com.cxx Modified: branches/gsoc2008-jezabek/Source/Modules/com.cxx =================================================================== --- branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-07-21 18:55:52 UTC (rev 10697) +++ branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-07-22 18:19:03 UTC (rev 10698) @@ -19,6 +19,136 @@ unsigned char Data4[8]; } GUID, UUID; +bool isNilGUID(GUID *arg) { + if (arg->Data1 != 0 || arg->Data2 != 0 || arg->Data3 != 0) + return false; + + for (int i = 0; i < 8; ++i) + if (arg->Data4[i] != 0) + return false; + + return true; +} + +typedef struct { + unsigned char octets[20]; +} SHA1_hash; + +/* Rotate left a 32-bit number */ +unsigned int leftrot(unsigned int a, unsigned int pos) { + return (a << pos) | ((a >> (32 - pos)) & ((1 << pos) - 1)); +} + +/* Implementation of SHA1. Needs unsigned int with at least 32 bits */ +SHA1_hash SHA1(char *input_bytes, int input_len) { + unsigned int h0 = 0x67452301; + unsigned int h1 = 0xEFCDAB89; + unsigned int h2 = 0x98BADCFE; + unsigned int h3 = 0x10325476; + unsigned int h4 = 0xC3D2E1F0; + + /* + * Preprocessing: a '1'-bit is appended, followed by '0'-bits + * until the number of bits % 512 == 448. Then the input's length + * in bits is appended as a 64-bit number. The preprocessed input's + * length is a multiple of 512 bits (64 bytes). Please note + * that below the counting is in bytes instead of bits. + */ + unsigned int padding = ((64 + 56) - (input_len + 1) % 64) % 64; + unsigned int total_len = input_len + 1 + padding + 8; + /* Preprocessed input */ + unsigned char *prep = new unsigned char[total_len]; + + /* Copy the input to prep */ + for (unsigned int i = 0; i < input_len; ++i) + prep[i] = input_bytes[i]; + + /* Marker with single '1'-bit in most significant position */ + prep[input_len] = 0x80; + + /* Pad with 0's */ + for (unsigned int i = 0; i < padding; ++i) + prep[input_len + 1 + i] = 0; + + /* Finally append 8 * input_len as a 64-bit number in big-endian format */ + unsigned int high_dword = (input_len >> 29) & 7; + unsigned int low_dword = (input_len & ((1 << 29) - 1)) << 3; + + prep[total_len - 8] = high_dword >> 24; + prep[total_len - 7] = (high_dword >> 16) & 0xff; + prep[total_len - 6] = (high_dword >> 8) & 0xff; + prep[total_len - 5] = high_dword & 0xff; + prep[total_len - 4] = low_dword >> 24; + prep[total_len - 3] = (low_dword >> 16) & 0xff; + prep[total_len - 2] = (low_dword >> 8) & 0xff; + prep[total_len - 1] = low_dword & 0xff; + + /* Divide preprocessed input into 512 bit chunks */ + for (unsigned int chunk = 0; chunk < total_len / 64; ++chunk) { + unsigned int w[80]; + + for (int i = 0; i < 16; ++i) { + w[i] = ((unsigned int) prep[64 * chunk + 4 * i] << 24) | + ((unsigned int) prep[64 * chunk + 4 * i + 1] << 16) | + ((unsigned int) prep[64 * chunk + 4 * i + 2] << 8) | + (unsigned int) prep[64 * chunk + 4 * i + 3]; + } + + for (int i = 16; i < 80; ++i) { + w[i] = leftrot(w[i-3] ^ w[i-8] ^ w[i-14] ^ w[i-16], 1); + } + + unsigned int a = h0; + unsigned int b = h1; + unsigned int c = h2; + unsigned int d = h3; + unsigned int e = h4; + + for (int i = 0; i < 80; ++i) { + unsigned int f, k; + + if (i < 20) { + f = (b & c) | (~b & d); + k = 0x5A827999; + } else if (i < 40) { + f = b ^ c ^ d; + k = 0x6ED9EBA1; + } else if (i < 60) { + f = (b & c) | (b & d) | (c & d); + k = 0x8F1BBCDC; + } else { + f = b ^ c ^ d; + k = 0xCA62C1D6; + } + + int temp = leftrot(a, 5) + f + e + k + w[i]; + e = d; + d = c; + c = leftrot(b, 30); + b = a; + a = temp; + } + + h0 = h0 + a; + h1 = h1 + b; + h2 = h2 + c; + h3 = h3 + d; + h4 = h4 + e; + } + + delete prep; + + SHA1_hash res = { + (h0 >> 24) & 0xff, (h0 >> 16) & 0xff, (h0 >> 8) & 0xff, h0 & 0xff, + (h1 >> 24) & 0xff, (h1 >> 16) & 0xff, (h1 >> 8) & 0xff, h1 & 0xff, + (h2 >> 24) & 0xff, (h2 >> 16) & 0xff, (h2 >> 8) & 0xff, h2 & 0xff, + (h3 >> 24) & 0xff, (h3 >> 16) & 0xff, (h3 >> 8) & 0xff, h3 & 0xff, + (h4 >> 24) & 0xff, (h4 >> 16) & 0xff, (h4 >> 8) & 0xff, h4 & 0xff, + }; + + return res; +} + class COM:public Language { static const char *usage; const String *empty_string; @@ -62,6 +192,10 @@ int guid_counter; GUID *proxy_iid; GUID *proxy_clsid; + GUID guid_seed; + GUID typelib_guid; + GUID module_iid; + GUID module_clsid; String *module_class_vtable_code; String *proxy_class_vtable_code; @@ -86,7 +220,11 @@ proxy_class_vtable_defs(NewString("")), clsid_list(NewString("")), guid_counter(0) { - /* Empty for now */ + /* Use NIL GUID by default */ + memset(&guid_seed, 0, sizeof(GUID)); + memset(&typelib_guid, 0, sizeof(GUID)); + memset(&module_iid, 0, sizeof(GUID)); + memset(&module_clsid, 0, sizeof(GUID)); } /* ----------------------------------------------------------------------------- @@ -149,6 +287,36 @@ virtual int top(Node *n) { + // Get any options set in the module directive + Node *optionsnode = Getattr(Getattr(n, "module"), "options"); + + if (optionsnode) { + if (Getattr(optionsnode, "guidseed")) { + if (!parseGUID(Getattr(optionsnode, "guidseed"), &guid_seed)) { + /* Bad GUID */ + /* FIXME: report an error */ + } + } + if (Getattr(optionsnode, "tlbid")) { + if (!parseGUID(Getattr(optionsnode, "tlbid"), &typelib_guid)) { + /* Bad GUID */ + /* FIXME: report an error */ + } + } + if (Getattr(optionsnode, "moduleiid")) { + if (!parseGUID(Getattr(optionsnode, "moduleiid"), &module_iid)) { + /* Bad GUID */ + /* FIXME: report an error */ + } + } + if (Getattr(optionsnode, "moduleclsid")) { + if (!parseGUID(Getattr(optionsnode, "moduleclsid"), &module_clsid)) { + /* Bad GUID */ + /* FIXME: report an error */ + } + } + } + /* Initialize all of the output files */ String *outfile = Getattr(n, "outfile"); String *outfile_h = Getattr(n, "outfile_h"); @@ -188,13 +356,24 @@ proxy_class_forward_def = NewString(""); proxy_class_code = NewString(""); - GUID typelib_guid; - generateGUID(&typelib_guid); - GUID module_iid; - generateGUID(&module_iid); - GUID module_clsid; - generateGUID(&module_clsid); + if (isNilGUID(&typelib_guid)) { + String *tlbid_ident = NewStringf("%s.TLBID", module_class_name); + generateGUID(&typelib_guid, tlbid_ident); + Delete(tlbid_ident); + } + if (isNilGUID(&module_iid)) { + String *module_iid_ident = NewStringf("%s.IID", module_class_name); + generateGUID(&module_iid, module_iid_ident); + Delete(module_iid_ident); + } + + if (isNilGUID(&module_clsid)) { + String *module_clsid_ident = NewStringf("%s.CLSID", module_class_name); + generateGUID(&module_clsid, module_clsid_ident); + Delete(module_clsid_ident); + } + module_class_vtable_code = NewString(""); Printf(module_class_vtable_code, "DEFINE_GUID(IID_%s, ", module_class_name); @@ -890,9 +1069,62 @@ * generateGUID() * ---------------------------------------------------------------------- */ - void generateGUID(GUID *result) { - GUID temp = { 0x4ec3e0ed, 0x3cb2, 0x4f1a, 0x81, 0x85, 0x73, 0xfa, 0xdc, 0xc5, 0x75, guid_counter++ }; - *result = temp; + void generateGUID(GUID *result, String *name) { + int name_len = Len(name); + char *name_chars = Char(name); + + char *prep_input = new char[16 + name_len]; + + /* guid_seed serves as a "name space ID" as used in RFC 4122. */ + prep_input[0] = (guid_seed.Data1 >> 24) & 0xff; + prep_input[1] = (guid_seed.Data1 >> 16) & 0xff; + prep_input[2] = (guid_seed.Data1 >> 8) & 0xff; + prep_input[3] = guid_seed.Data1 & 0xff; + prep_input[4] = (guid_seed.Data2 >> 8) & 0xff; + prep_input[5] = guid_seed.Data2 & 0xff; + prep_input[6] = (guid_seed.Data3 >> 8) & 0xff; + prep_input[7] = guid_seed.Data3 & 0xff; + + for (int i = 0; i < 8; ++i) { + prep_input[8 + i] = guid_seed.Data4[i]; + } + + for (int i = 0; i < name_len; ++i) { + prep_input[16 + i] = name_chars[i]; + } + + SHA1_hash hash = SHA1(prep_input, 16 + name_len); + + GUID res = { + /* time_low */ ((unsigned int) hash.octets[0] << 24) | + ((unsigned int) hash.octets[1] << 16) | + ((unsigned int) hash.octets[2] << 8) | + (unsigned int) hash.octets[3], + /* time_mid */ ((unsigned int) hash.octets[4] << 8) | + (unsigned int) hash.octets[5], + /* time_hi_and_version */ ((unsigned int) hash.octets[6] << 8) | + (unsigned int) hash.octets[7], + hash.octets[8], + hash.octets[9], + hash.octets[10], + hash.octets[11], + hash.octets[12], + hash.octets[13], + hash.octets[14], + hash.octets[15], + }; + + /* Set version to 5 */ + res.Data3 &= 0x0fff; + res.Data3 |= 0x5000; + + /* Clear top 2 bits of Data4[0] */ + res.Data4[0] &= 0x3f; + res.Data4[0] |= 0x80; + + *result = res; + + delete prep_input; } /* ---------------------------------------------------------------------- @@ -907,13 +1139,76 @@ input->Data4[2], input->Data4[3], input->Data4[4], input->Data4[5], input->Data4[6], input->Data4[7]); } else { Printf(output, - "%08X-%04X-%04X-%04X-%02X%02X%02X%02X%02X%02X", + "%08x-%04x-%04x-%04x-%02x%02x%02x%02x%02x%02x", input->Data1, input->Data2, input->Data3, (((int) input->Data4[0]) << 8) | input->Data4[1], input->Data4[2], input->Data4[3], input->Data4[4], input->Data4[5], input->Data4[6], input->Data4[7]); } } /* ---------------------------------------------------------------------- + * parseHex() + * ---------------------------------------------------------------------- */ + + unsigned int parseHex(char *text, int start, int end) { + unsigned int result = 0; + + for (int i = start; i < end; ++i) { + int digit = 0; + + if (text[i] >= '0' && text[i] <= '9') + digit = text[i] - '0'; + else if (text[i] >= 'a' && text[i] <= 'f') + digit = text[i] - 'a' + 10; + else + digit = text[i] - 'A' + 10; + + result = 16 * result + digit; + } + + return result; + } + + /* ---------------------------------------------------------------------- + * parseGUID() + * ---------------------------------------------------------------------- */ + + bool parseGUID(String *input, GUID *output) { + if (!input || Len(input) != 36) + return false; + + char *input_chars = Char(input); + + /* Check GUID format */ + for (int i = 0; i < 36; ++i) { + if (i == 8 || i == 13 || i == 18 || i == 23) { + if (input_chars[i] != '-') + return false; + } else { + if (input_chars[i] >= '0' && input_chars[i] <= '9') + continue; + if (input_chars[i] >= 'a' && input_chars[i] <= 'f') + continue; + if (input_chars[i] >= 'A' && input_chars[i] <= 'F') + continue; + + return false; + } + } + + output->Data1 = parseHex(input_chars, 0, 8); + output->Data2 = parseHex(input_chars, 9, 13); + output->Data3 = parseHex(input_chars, 14, 18); + output->Data4[0] = parseHex(input_chars, 19, 21); + output->Data4[1] = parseHex(input_chars, 21, 23); + + for (int i = 0; i < 6; ++i) { + output->Data4[2 + i] = parseHex(input_chars, 24 + 2 * i, 26 + 2 * i); + } + + return true; + } + + /* ---------------------------------------------------------------------- * classHandler() * ---------------------------------------------------------------------- */ @@ -945,7 +1240,13 @@ Clear(proxy_class_vtable_defs); proxy_iid = new GUID; - generateGUID(proxy_iid); + if (Getattr(n, "feature:iid")) { + parseGUID(Getattr(n, "feature:iid"), proxy_iid); + } else { + String *proxy_iid_ident = NewStringf("%s.IID", proxy_class_name); + generateGUID(proxy_iid, proxy_iid_ident); + Delete(proxy_iid_ident); + } Setattr(n, "wrap:iid", proxy_iid); Printf(proxy_class_vtable_code, "DEFINE_GUID(IID_%s, ", proxy_class_name); @@ -955,7 +1256,13 @@ if (!Getattr(n, "abstract")) { /* Generate class object */ proxy_clsid = new GUID; - generateGUID(proxy_clsid); + if (Getattr(n, "feature:clsid")) { + parseGUID(Getattr(n, "feature:clsid"), proxy_clsid); + } else { + String *proxy_clsid_ident = NewStringf("%s.CLSID", proxy_class_name); + generateGUID(proxy_clsid, proxy_clsid_ident); + Delete(proxy_clsid_ident); + } Printf(proxy_class_vtable_code, "DEFINE_GUID(CLSID_%s, ", proxy_class_name); formatGUID(proxy_class_vtable_code, proxy_clsid, true); @@ -1288,8 +1595,23 @@ Clear(proxy_class_forward_def); proxy_iid = new GUID; - generateGUID(proxy_iid); +#if 0 +// FIXME: Maybe we should allow specifying IIDs for opaque classes? + if (Getattr(n, "feature:iid")) { + parseGUID(Getattr(n, "feature:iid"), proxy_iid); + } else { + String *proxy_iid_ident = NewStringf("%s.IID", classname); + generateGUID(proxy_iid, proxy_iid_ident); + Delete(proxy_iid_ident); + } +#endif + { + String *proxy_iid_ident = NewStringf("%s.IID", classname); + generateGUID(proxy_iid, proxy_iid_ident); + Delete(proxy_iid_ident); + } + Printv(proxy_class_forward_def, " interface $comclassname;\n", NIL); Printv(proxy_class_def, " [\n object,\n local,\n uuid(", NIL); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <je...@us...> - 2008-07-22 18:20:32
|
Revision: 10699 http://swig.svn.sourceforge.net/swig/?rev=10699&view=rev Author: jezabek Date: 2008-07-22 18:20:29 +0000 (Tue, 22 Jul 2008) Log Message: ----------- Remove leftover variable. Modified Paths: -------------- branches/gsoc2008-jezabek/Source/Modules/com.cxx Modified: branches/gsoc2008-jezabek/Source/Modules/com.cxx =================================================================== --- branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-07-22 18:19:03 UTC (rev 10698) +++ branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-07-22 18:20:29 UTC (rev 10699) @@ -189,7 +189,6 @@ String *clsid_list; List *proxy_class_member_functions; String *variable_name; //Name of a variable being wrapped - int guid_counter; GUID *proxy_iid; GUID *proxy_clsid; GUID guid_seed; @@ -218,8 +217,7 @@ enum_constant_flag(false), proxy_class_vtable_code(NewString("")), proxy_class_vtable_defs(NewString("")), - clsid_list(NewString("")), - guid_counter(0) { + clsid_list(NewString("")) { /* Use NIL GUID by default */ memset(&guid_seed, 0, sizeof(GUID)); memset(&typelib_guid, 0, sizeof(GUID)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <je...@us...> - 2008-07-22 23:28:08
|
Revision: 10703 http://swig.svn.sourceforge.net/swig/?rev=10703&view=rev Author: jezabek Date: 2008-07-22 23:28:07 +0000 (Tue, 22 Jul 2008) Log Message: ----------- Use user-defined namespace for generating GUIDs. Modified Paths: -------------- branches/gsoc2008-jezabek/Source/Modules/com.cxx Modified: branches/gsoc2008-jezabek/Source/Modules/com.cxx =================================================================== --- branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-07-22 22:44:19 UTC (rev 10702) +++ branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-07-22 23:28:07 UTC (rev 10703) @@ -370,19 +370,19 @@ proxy_class_code = NewString(""); if (isNilGUID(&typelib_guid)) { - String *tlbid_ident = NewStringf("%s.TLBID", module_class_name); + String *tlbid_ident = NewStringf("%s.%s.TLBID", namespce, module_class_name); generateGUID(&typelib_guid, tlbid_ident); Delete(tlbid_ident); } if (isNilGUID(&module_iid)) { - String *module_iid_ident = NewStringf("%s.IID", module_class_name); + String *module_iid_ident = NewStringf("%s.%s.IID", namespce, module_class_name); generateGUID(&module_iid, module_iid_ident); Delete(module_iid_ident); } if (isNilGUID(&module_clsid)) { - String *module_clsid_ident = NewStringf("%s.CLSID", module_class_name); + String *module_clsid_ident = NewStringf("%s.%s.CLSID", namespce, module_class_name); generateGUID(&module_clsid, module_clsid_ident); Delete(module_clsid_ident); } @@ -1257,7 +1257,7 @@ if (Getattr(n, "feature:iid")) { parseGUID(Getattr(n, "feature:iid"), proxy_iid); } else { - String *proxy_iid_ident = NewStringf("%s.IID", proxy_class_name); + String *proxy_iid_ident = NewStringf("%s.%s.IID", namespce, proxy_class_name); generateGUID(proxy_iid, proxy_iid_ident); Delete(proxy_iid_ident); } @@ -1273,7 +1273,7 @@ if (Getattr(n, "feature:clsid")) { parseGUID(Getattr(n, "feature:clsid"), proxy_clsid); } else { - String *proxy_clsid_ident = NewStringf("%s.CLSID", proxy_class_name); + String *proxy_clsid_ident = NewStringf("%s.%s.CLSID", namespce, proxy_class_name); generateGUID(proxy_clsid, proxy_clsid_ident); Delete(proxy_clsid_ident); } @@ -1615,13 +1615,13 @@ if (Getattr(n, "feature:iid")) { parseGUID(Getattr(n, "feature:iid"), proxy_iid); } else { - String *proxy_iid_ident = NewStringf("%s.IID", classname); + String *proxy_iid_ident = NewStringf("%s.%s.IID", namespce, classname); generateGUID(proxy_iid, proxy_iid_ident); Delete(proxy_iid_ident); } #endif { - String *proxy_iid_ident = NewStringf("%s.IID", classname); + String *proxy_iid_ident = NewStringf("%s.%s.IID", namespce, classname); generateGUID(proxy_iid, proxy_iid_ident); Delete(proxy_iid_ident); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <je...@us...> - 2008-07-24 23:50:41
|
Revision: 10708 http://swig.svn.sourceforge.net/swig/?rev=10708&view=rev Author: jezabek Date: 2008-07-24 23:50:38 +0000 (Thu, 24 Jul 2008) Log Message: ----------- Fix bug - 'aggregatable' is an attribute for coclass, not interface. Modified Paths: -------------- branches/gsoc2008-jezabek/Source/Modules/com.cxx Modified: branches/gsoc2008-jezabek/Source/Modules/com.cxx =================================================================== --- branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-07-24 23:26:13 UTC (rev 10707) +++ branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-07-24 23:50:38 UTC (rev 10708) @@ -1050,14 +1050,14 @@ bool derived = baseclass && getProxyName(c_baseclassname); if (!Getattr(n, "abstract")) { - Printv(proxy_class_def, " [\n uuid(", NIL); + Printv(proxy_class_def, " [\n aggregatable,\n uuid(", NIL); formatGUID(proxy_class_def, proxy_clsid, false); Printv(proxy_class_def, ")\n ]\n coclass $comclassnameImpl {\n" " interface $comclassname;\n };\n\n", NIL); } Printv(proxy_class_forward_def, " interface $comclassname;\n", NIL); - Printv(proxy_class_def, " [\n object,\n local,\n aggregatable,\n uuid(", NIL); + Printv(proxy_class_def, " [\n object,\n local,\n uuid(", NIL); formatGUID(proxy_class_def, proxy_iid, false); /* Printv(proxy_class_def, ")\n ]\n interface $comclassname", This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <je...@us...> - 2008-07-31 10:45:13
|
Revision: 10721 http://swig.svn.sourceforge.net/swig/?rev=10721&view=rev Author: jezabek Date: 2008-07-31 10:45:10 +0000 (Thu, 31 Jul 2008) Log Message: ----------- Basic support for constants. Modified Paths: -------------- branches/gsoc2008-jezabek/Source/Modules/com.cxx Modified: branches/gsoc2008-jezabek/Source/Modules/com.cxx =================================================================== --- branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-07-30 22:09:02 UTC (rev 10720) +++ branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-07-31 10:45:10 UTC (rev 10721) @@ -839,6 +839,32 @@ return ret; } + /* ----------------------------------------------------------------------- + * constantWrapper() + * ------------------------------------------------------------------------ */ + + virtual int constantWrapper(Node *n) { + + generate_property_declaration_flag = true; + variable_wrapper_flag = true; + + if (!wrapping_member_flag) { + global_variable_flag = true; + variable_name = Getattr(n, "sym:name"); + } else { + static_flag = true; + } + + int ret = Language::variableWrapper(n); + + global_variable_flag = false; + static_flag = false; + variable_wrapper_flag = false; + generate_property_declaration_flag = false; + + return ret; + } + /* ---------------------------------------------------------------------- * memberfunctionHandler() * ---------------------------------------------------------------------- */ @@ -896,6 +922,21 @@ return SWIG_OK; } + /* ---------------------------------------------------------------------- + * memberconstantHandler() + * ---------------------------------------------------------------------- */ + + virtual int memberconstantHandler(Node *n) { + + variable_name = Getattr(n, "sym:name"); + wrapping_member_flag = true; + Language::memberconstantHandler(n); + constantWrapper(n); + wrapping_member_flag = false; + + return SWIG_OK; + } + /* ----------------------------------------------------------------------------- * constructorHandler() * ----------------------------------------------------------------------------- */ @@ -1473,7 +1514,7 @@ if (proxy_flag) { for (Iterator func = First(proxy_class_member_functions); func.item; func = Next(func)) { - Printf(proxy_class_vtable_code, ",\n (SWIG_funcptr)%s", func.item); + Printf(proxy_class_vtable_code, ",\n (SWIG_funcptr) %s", func.item); } emitProxyClassDefAndCPPCasts(n); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <je...@us...> - 2008-07-31 23:14:47
|
Revision: 10725 http://swig.svn.sourceforge.net/swig/?rev=10725&view=rev Author: jezabek Date: 2008-07-31 23:14:45 +0000 (Thu, 31 Jul 2008) Log Message: ----------- Freearg support (taken from Java module) - needed for char * input typemap. Modified Paths: -------------- branches/gsoc2008-jezabek/Source/Modules/com.cxx Modified: branches/gsoc2008-jezabek/Source/Modules/com.cxx =================================================================== --- branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-07-31 22:52:41 UTC (rev 10724) +++ branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-07-31 23:14:45 UTC (rev 10725) @@ -639,6 +639,7 @@ Parm *p; int i; String *c_return_type = NewString(""); + String *cleanup = NewString(""); bool is_void_return; int num_arguments = 0; int num_required = 0; @@ -781,6 +782,23 @@ emit_return_variable(n, t, f); } + /* Insert cleanup code */ + for (p = l; p;) { + if ((tm = Getattr(p, "tmap:freearg"))) { + //addThrows(n, "tmap:freearg", p); + Replaceall(tm, "$source", Getattr(p, "emit:input")); /* deprecated */ + Replaceall(tm, "$arg", Getattr(p, "emit:input")); /* deprecated? */ + Replaceall(tm, "$input", Getattr(p, "emit:input")); + Printv(cleanup, tm, "\n", NIL); + p = Getattr(p, "tmap:freearg:next"); + } else { + p = nextSibling(p); + } + } + + /* Output cleanup code */ + Printv(f->code, cleanup, NIL); + Printf(f->def, ") {"); if (!is_void_return) @@ -821,6 +839,8 @@ Delete(getter_setter_name); } + Delete(cleanup); + return SWIG_OK; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <je...@us...> - 2008-08-06 22:28:38
|
Revision: 10737 http://swig.svn.sourceforge.net/swig/?rev=10737&view=rev Author: jezabek Date: 2008-08-06 22:28:36 +0000 (Wed, 06 Aug 2008) Log Message: ----------- Fixed bug when a base class was ignored; the code generating the proxy's QueryInterface just moved to the ignored classes parent instead of its first non-ignored sibling. Modified Paths: -------------- branches/gsoc2008-jezabek/Source/Modules/com.cxx Modified: branches/gsoc2008-jezabek/Source/Modules/com.cxx =================================================================== --- branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-08-06 17:46:59 UTC (rev 10736) +++ branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-08-06 22:28:36 UTC (rev 10737) @@ -1455,11 +1455,16 @@ while (bases) { Iterator base = First(bases); - if (!Getattr(base.item, "feature:ignore")) + while (base.item && Getattr(base.item, "feature:ignore")) + base = Next(base); + + if (base.item) { Printf(proxy_class_vtable_code, " ||\n SWIGIsEqual(iid, &IID_%s)", Getattr(base.item, "sym:name")); - - /* Get next base */ - bases = Getattr(base.item, "bases"); + /* Get next base */ + bases = Getattr(base.item, "bases"); + } else { + bases = NULL; + } } Printf(proxy_class_vtable_code, ") {\n" @@ -1520,11 +1525,16 @@ while (bases) { Iterator base = First(bases); - if (!Getattr(base.item, "feature:ignore")) - Printf(proxy_class_vtable_code, " ||\n SWIGIsEqual(iid, &IID_%s)", Getattr(base.item, "sym:name")); + while (base.item && Getattr(base.item, "feature:ignore")) + base = Next(base); - /* Get next base */ - bases = Getattr(base.item, "bases"); + if (base.item) { + Printf(proxy_class_vtable_code, " ||\n SWIGIsEqual(iid, &IID_%s)", Getattr(base.item, "sym:name")); + /* Get next base */ + bases = Getattr(base.item, "bases"); + } else { + bases = NULL; + } } Printf(proxy_class_vtable_code, ") {\n" @@ -1820,7 +1830,6 @@ emit_mark_varargs(l); - // FIXME: int gencomma = !static_flag; int gencomma = 1; /* Output each parameter */ @@ -1879,7 +1888,6 @@ Printf(function_code, ")"); - // FIXME: generateThrowsClause(n, function_code); Printv(function_code, ";\n", NIL); if (!Getattr(n, "override")) { @@ -2390,5 +2398,5 @@ -norcfile - Do not generate RC (resource definition) file\n\ -nodeffile - Do not generate DEF file\n\ -nodllexports - Do not generate DllGetClassObject and DllCanUnloadNow\n\ - (implicates -nodeffile)\n\ + (implies -nodeffile)\n\ \n"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <je...@us...> - 2008-08-18 15:36:23
|
Revision: 10787 http://swig.svn.sourceforge.net/swig/?rev=10787&view=rev Author: jezabek Date: 2008-08-18 15:36:19 +0000 (Mon, 18 Aug 2008) Log Message: ----------- Source clean-up. Removed director code - it is unused now and because of SVN will not get lost. Modified Paths: -------------- branches/gsoc2008-jezabek/Source/Modules/com.cxx Modified: branches/gsoc2008-jezabek/Source/Modules/com.cxx =================================================================== --- branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-08-18 15:14:03 UTC (rev 10786) +++ branches/gsoc2008-jezabek/Source/Modules/com.cxx 2008-08-18 15:36:19 UTC (rev 10787) @@ -730,50 +730,47 @@ String *null_attribute = 0; // Now write code to make the function call - /* FIXME: if (!native_function_flag) */ { - if (Cmp(nodeType(n), "constant") == 0) { - // Wrapping a constant hack - Swig_save("functionWrapper", n, "wrap:action", NIL); + if (Cmp(nodeType(n), "constant") == 0) { + // 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("result = (%s) %s;", SwigType_lstr(ty, 0), Getattr(n, "value"))); - } + // below based on Swig_VargetToFunction() + SwigType *ty = Swig_wrapped_var_type(Getattr(n, "type"), use_naturalvar_mode(n)); + Setattr(n, "wrap:action", NewStringf("result = (%s) %s;", SwigType_lstr(ty, 0), Getattr(n, "value"))); + } - // FIXME: Swig_director_emit_dynamic_cast(n, f); - String *actioncode = emit_action(n); + String *actioncode = emit_action(n); - if (Cmp(nodeType(n), "constant") == 0) - Swig_restore(n); + if (Cmp(nodeType(n), "constant") == 0) + Swig_restore(n); - /* Return value if necessary */ - if ((tm = Swig_typemap_lookup_out("out", n, "result", f, actioncode))) { - Replaceall(tm, "$source", "result"); /* deprecated */ - if (!hresult_flag) { - Replaceall(tm, "$target", "jresult"); /* deprecated */ - Replaceall(tm, "$result", "jresult"); - } else { - Replaceall(tm, "$target", "*SWIG_result_ptr"); /* deprecated */ - Replaceall(tm, "$result", "*SWIG_result_ptr"); - } + /* Return value if necessary */ + if ((tm = Swig_typemap_lookup_out("out", n, "result", f, actioncode))) { + Replaceall(tm, "$source", "result"); /* deprecated */ + if (!hresult_flag) { + Replaceall(tm, "$target", "jresult"); /* deprecated */ + Replaceall(tm, "$result", "jresult"); + } else { + Replaceall(tm, "$target", "*SWIG_result_ptr"); /* deprecated */ + Replaceall(tm, "$result", "*SWIG_result_ptr"); + } - if (GetFlag(n, "feature:new")) - Replaceall(tm, "$owner", "1"); - else - Replaceall(tm, "$owner", "0"); + if (GetFlag(n, "feature:new")) + Replaceall(tm, "$owner", "1"); + else + Replaceall(tm, "$owner", "0"); - /* FIXME: see if this is needed and works as it should */ - substituteClassname(t, tm); + /* FIXME: see if this is needed and works as it should */ + substituteClassname(t, tm); - Printf(f->code, "%s", tm); - null_attribute = Getattr(n, "tmap:out:null"); - if (Len(tm)) - Printf(f->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(t, 0), Getattr(n, "name")); - } - emit_return_variable(n, t, f); + Printf(f->code, "%s", tm); + null_attribute = Getattr(n, "tmap:out:null"); + if (Len(tm)) + Printf(f->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(t, 0), Getattr(n, "name")); } + emit_return_variable(n, t, f); /* Insert cleanup code */ for (p = l; p;) { @@ -852,14 +849,6 @@ bool getter_flag = Cmp(symname, Swig_name_set(Swig_name_member(proxy_class_name, variable_name))) != 0; String *getter_setter_name = NewString(""); -#if 0 - if (!getter_flag) - Printf(getter_setter_name, "set"); - else - Printf(getter_setter_name, "get"); - Putc(toupper((int) *Char(variable_name)), getter_setter_name); - Printf(getter_setter_name, "%s", Char(variable_name) + 1); -#endif Printf(getter_setter_name, "%s", variable_name); @@ -1147,35 +1136,32 @@ const String *pure_baseclass = NewString(""); - // C++ inheritance - // FIXME: 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(getProxyName(c_baseclassname)); - if (baseclass) - c_baseclass = SwigType_namestr(Getattr(base.item, "name")); - 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_COM_MULTIPLE_INHERITANCE, input_file, line_number, - "Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in COM.\n", proxyclassname, baseclassname); + 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(getProxyName(c_baseclassname)); + if (baseclass) + c_baseclass = SwigType_namestr(Getattr(base.item, "name")); + 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_COM_MULTIPLE_INHERITANCE, input_file, line_number, + "Warning for %s proxy: Base %s ignored. Multiple inheritance is not supported in COM.\n", proxyclassname, baseclassname); + base = Next(base); } } - // FIXME: } + } const String *wanted_base = baseclass ? baseclass : pure_baseclass; bool derived = baseclass && getProxyName(c_baseclassname); @@ -1191,11 +1177,7 @@ Printv(proxy_class_forward_def, " interface I$comclassnameStatic;\n", NIL); Printv(proxy_class_def, " [\n object,\n local,\n uuid(", NIL); formatGUID(proxy_class_def, proxy_iid, false); -/* - Printv(proxy_class_def, ")\n ]\n interface $comclassname", - *Char(wanted_base) ? " : " : "", - *Char(wanted_base) ? wanted_base : "", " {", NIL); - */ + Printv(proxy_class_def, "),\n dual\n ]\n interface I$comclassname : ", "I", *Char(wanted_base) ? wanted_base : "Dispatch", " {\n", NIL); @@ -1223,16 +1205,6 @@ " return S_OK;\n" "}\n\n", proxy_class_name, proxy_class_name, proxy_class_name); -#if 0 - // FIXME: temporary - Printv(proxy_class_def, typemapLookup("combody", typemap_lookup_type, WARN_NONE), - NIL); - - // Emit extra user code - Printv(proxy_class_def, typemapLookup("comcode", typemap_lookup_type, WARN_NONE), - NIL); -#endif - // Substitute various strings into the above template Replaceall(proxy_class_code, "$comclassname", proxy_class_name); Replaceall(proxy_static_class_code, "$comclassname", proxy_class_name); @@ -1403,14 +1375,6 @@ if (!addSymbol(proxy_class_name, n)) return SWIG_ERROR; -/* FIXME */ -#if 0 - if (Cmp(proxy_class_name, imclass_name) == 0) { - Printf(stderr, "Class name cannot be equal to intermediary class name: %s\n", proxy_class_name); - SWIG_exit(EXIT_FAILURE); - } -#endif - if (Cmp(proxy_class_name, module_class_name) == 0) { Printf(stderr, "Class name cannot be equal to module class name: %s\n", proxy_class_name); SWIG_exit(EXIT_FAILURE); @@ -1632,7 +1596,6 @@ "\n (SWIG_funcptr) SWIGInvoke", proxy_class_name); - // FIXME: destructor_call = NewString(""); proxy_class_constants_code = NewString(""); } @@ -1996,16 +1959,7 @@ proxy_iid = new GUID; -#if 0 -// FIXME: Maybe we should allow specifying IIDs for opaque classes? - if (Getattr(n, "feature:iid")) { - parseGUID(Getattr(n, "feature:iid"), proxy_iid); - } else { - String *proxy_iid_ident = NewStringf("%s.%s.IID", namespce, classname); - generateGUID(proxy_iid, proxy_iid_ident); - Delete(proxy_iid_ident); - } -#endif + // FIXME: Maybe we should allow specifying IIDs for opaque classes? { String *proxy_iid_ident = NewStringf("%s.%s.IID", namespce, classname); generateGUID(proxy_iid, proxy_iid_ident); @@ -2031,337 +1985,7 @@ delete proxy_iid; } -#if 0 - /* ----------------------------------------------------------------------------- - * classDirectorInit() - * ----------------------------------------------------------------------------- */ - virtual int classDirectorInit(Node *n) { - String *base = Getattr(n, "classtype"); - String *classname = Swig_class_name(n); - - Delete(director_ctor_code); - director_ctor_code = NewString("$director_new"); - - - Printf(f_directors, "class SwigDirector_%s : public %s {\n", classname, base); - Printf(f_directors, "public:\n"); - - Language::classDirectorInit(n); - - return SWIG_OK; - } - - /* ----------------------------------------------------------------------------- - * classDirectorEnd() - * ----------------------------------------------------------------------------- */ - virtual int classDirectorEnd(Node *n) { - Printf(f_directors, "};\n\n"); - - Language::classDirectorEnd(n); - - return SWIG_OK; - } - - /* ----------------------------------------------------------------------------- - * classDirectorMethod() - * ----------------------------------------------------------------------------- */ - virtual int classDirectorMethod(Node *n, Node *parent, String *super) { - String *empty_str = NewString(""); - String *classname = Getattr(parent, "sym:name"); - String *c_classname = Getattr(parent, "name"); - String *name = Getattr(n, "name"); - String *symname = Getattr(n, "sym:name"); - SwigType *type = Getattr(n, "type"); - SwigType *returntype = Getattr(n, "returntype"); - String *overloaded_name = Getattr(n, "sym:name"); - // FIXME: String *overloaded_name = getOverloadedName(n); - String *storage = Getattr(n, "storage"); - String *value = Getattr(n, "value"); - String *decl = Getattr(n, "decl"); - //String *declaration = NewString(""); - String *tm; - Parm *p; - int i; - Wrapper *w = NewWrapper(); - ParmList *l = Getattr(n, "parms"); - bool is_void = !(Cmp(returntype, "void")); - String *qualified_return = NewString(""); - bool pure_virtual = (!(Cmp(storage, "virtual")) && !(Cmp(value, "0"))); - int status = SWIG_OK; - bool output_director = true; - String *dirclassname = directorClassName(parent); - String *qualified_name = NewStringf("%s::%s", dirclassname, name); - SwigType *c_ret_type = NULL; - String *jupcall_args = NewString(""); - //String *imclass_dmethod; - //String *callback_typedef_parms = NewString(""); - //String *delegate_parms = NewString(""); - //String *proxy_method_types = NewString(""); - //String *callback_def = NewString(""); - //String *callback_code = NewString(""); - //String *imcall_args = NewString(""); - int gencomma = 0; - bool ignored_method = GetFlag(n, "feature:ignore") ? true : false; - - if (returntype) { - - qualified_return = SwigType_rcaststr(returntype, "c_result"); - - if (!is_void && !ignored_method) { - if (!SwigType_isclass(returntype)) { - if (!(SwigType_ispointer(returntype) || SwigType_isreference(returntype))) { - String *construct_result = NewStringf("= SwigValueInit< %s >()", SwigType_lstr(returntype, 0)); - Wrapper_add_localv(w, "c_result", SwigType_lstr(returntype, "c_result"), construct_result, NIL); - Delete(construct_result); - } else { - String *base_typename = SwigType_base(returntype); - String *resolved_typename = SwigType_typedef_resolve_all(base_typename); - Symtab *symtab = Getattr(n, "sym:symtab"); - Node *typenode = Swig_symbol_clookup(resolved_typename, symtab); - - if (SwigType_ispointer(returntype) || (typenode && Getattr(typenode, "abstract"))) { - /* initialize pointers to something sane. Same for abstract - classes when a reference is returned. */ - Wrapper_add_localv(w, "c_result", SwigType_lstr(returntype, "c_result"), "= 0", NIL); - } else { - /* If returning a reference, initialize the pointer to a sane - default - if a C# exception occurs, then the pointer returns - something other than a NULL-initialized reference. */ - String *non_ref_type = Copy(returntype); - - /* Remove reference and const qualifiers */ - Replaceall(non_ref_type, "r.", ""); - Replaceall(non_ref_type, "q(const).", ""); - Wrapper_add_localv(w, "result_default", "static", SwigType_str(non_ref_type, "result_default"), "=", SwigType_str(non_ref_type, "()"), NIL); - Wrapper_add_localv(w, "c_result", SwigType_lstr(returntype, "c_result"), "= &result_default", NIL); - - Delete(non_ref_type); - } - - Delete(base_typename); - Delete(resolved_typename); - } - } else { - SwigType *vt; - - vt = cplus_value_type(returntype); - if (!vt) { - Wrapper_add_localv(w, "c_result", SwigType_lstr(returntype, "c_result"), NIL); - } else { - Wrapper_add_localv(w, "c_result", SwigType_lstr(vt, "c_result"), NIL); - Delete(vt); - } - } - } - - Parm *retpm = NewParmFromNode(returntype, empty_str, n); - - if ((c_ret_type = Swig_typemap_lookup("ctype", retpm, "", 0))) { - - if (!is_void && !ignored_method) { - String *jretval_decl = NewStringf("%s jresult", c_ret_type); - Wrapper_add_localv(w, "jresult", jretval_decl, "= 0", NIL); - Delete(jretval_decl); - } - } else { - Swig_warning(WARN_CSHARP_TYPEMAP_CTYPE_UNDEF, input_file, line_number, "No ctype typemap defined for %s\n", SwigType_str(returntype, 0)); - output_director = false; - } - - Delete(retpm); - } - - /* Go through argument list, attach lnames for arguments */ - for (i = 0, p = l; p; p = nextSibling(p), ++i) { - String *arg = Getattr(p, "name"); - String *lname = NewString(""); - - if (!arg && Cmp(Getattr(p, "type"), "void")) { - lname = NewStringf("arg%d", i); - Setattr(p, "name", lname); - } else - lname = arg; - - Setattr(p, "lname", lname); - } - - /* Attach the standard typemaps */ - Swig_typemap_attach_parms("out", l, 0); - Swig_typemap_attach_parms("ctype", l, 0); - Swig_typemap_attach_parms("comtype", l, 0); - Swig_typemap_attach_parms("directorin", l, 0); - - /* Go through argument list, convert from native to Java */ - for (p = l; p; /* empty */ ) { - /* Is this superfluous? */ - while (checkAttribute(p, "tmap:directorin:numinputs", "0")) { - p = Getattr(p, "tmap:directorin:next"); - } - - SwigType *pt = Getattr(p, "type"); - String *ln = Copy(Getattr(p, "name")); - String *c_param_type = NULL; - String *c_decl = NewString(""); - String *arg = NewString(""); - - Printf(arg, "j%s", ln); - - /* And add to the upcall args */ - if (gencomma > 0) - Printf(jupcall_args, ", "); - Printf(jupcall_args, "%s", arg); - - /* Get parameter's intermediary C type */ - if ((c_param_type = Getattr(p, "tmap:ctype"))) { - String *ctypeout = Getattr(p, "tmap:ctype:out"); // the type in the ctype typemap's out attribute overrides the type in the typemap - if (ctypeout) - c_param_type = ctypeout; - - Parm *tp = NewParmFromNode(c_param_type, empty_str, n); - String *desc_tm = NULL; - - /* Add to local variables */ - Printf(c_decl, "%s %s", c_param_type, arg); - if (!ignored_method) - Wrapper_add_localv(w, arg, c_decl, (!(SwigType_ispointer(pt) || SwigType_isreference(pt)) ? "" : "= 0"), NIL); - - /* Add input marshalling code */ - if (/* FIXME: (desc_tm = Swig_typemap_lookup("directorin", tp, "", 0)) - && */ (tm = Getattr(p, "tmap:directorin"))) { - - Replaceall(tm, "$input", arg); - Replaceall(tm, "$owner", "0"); - - if (Len(tm)) - if (!ignored_method) - Printf(w->code, "%s\n", tm); - - Delete(tm); - - p = Getattr(p, "tmap:directorin:next"); - - Delete(desc_tm); - } else { - Swig_warning(WARN_COM_TYPEMAP_DIRECTORIN_UNDEF, input_file, line_number, - "No or improper directorin typemap defined for argument %s\n", SwigType_str(pt, 0)); - p = nextSibling(p); - output_director = false; - } - Delete(tp); - } else { - Swig_warning(WARN_COM_TYPEMAP_CTYPE_UNDEF, input_file, line_number, "No ctype typemap defined for %s\n", SwigType_str(pt, 0)); - output_director = false; - p = nextSibling(p); - } - - gencomma++; - Delete(arg); - Delete(c_decl); - Delete(c_param_type); - } - - /* start wrapper definition */ - String *target; - SwigType *rtype = Getattr(n, "conversion_operator") ? 0 : type; - target = Swig_method_decl(rtype, decl, name, l, 0, 0); - Printf(w->def, "%s", target); - Delete(qualified_name); - Delete(target); - //target = Swig_method_decl(rtype, decl, name, l, 0, 1); - //Printf(stdout, " virtual %s", target); - //Delete(target); - - Printf(w->def, " {"); - - if (!ignored_method) { - if (!is_void) - Printf(w->code, "jresult = (%s) ", c_ret_type); - - Printf(w->code, "<place_correct_method_here>(%s);\n", jupcall_args); - - if (!is_void) { - String *jresult_str = NewString("jresult"); - String *result_str = NewString("c_result"); - Parm *tp = NewParmFromNode(returntype, result_str, n); - - /* Copy jresult into c_result... */ - if ((tm = Swig_typemap_lookup("directorout", tp, result_str, w))) { - Replaceall(tm, "$input", jresult_str); - Replaceall(tm, "$result", result_str); - Printf(w->code, "%s\n", tm); - } else { - Swig_warning(WARN_TYPEMAP_DIRECTOROUT_UNDEF, input_file, line_number, - "Unable to use return type %s in director method %s::%s (skipping method).\n", SwigType_str(returntype, 0), - SwigType_namestr(c_classname), SwigType_namestr(name)); - output_director = false; - } - - Delete(tp); - Delete(jresult_str); - Delete(result_str); - } - - /* Terminate wrapper code */ - if (!is_void) - Printf(w->code, "return %s;", qualified_return); - } - - Printf(w->code, "}"); - - /* emit code */ - if (status == SWIG_OK && output_director) { - if (!is_void) { - Replaceall(w->code, "$null", qualified_return); - } else { - Replaceall(w->code, "$null", ""); - } - if (!Getattr(n, "defaultargs")) { - Wrapper_print(w, f_directors); - } - } - - Delete(qualified_return); - Delete(c_ret_type); - // Delete(declaration); - // Delete(callback_typedef_parms); - // Delete(delegate_parms); - // Delete(proxy_method_types); - // Delete(callback_def); - // Delete(callback_code); - DelWrapper(w); - - return status; - } - - /* ----------------------------------------------------------------------------- - * extraDirectorProtectedCPPMethodsRequired() - * ----------------------------------------------------------------------------- */ - virtual bool extraDirectorProtectedCPPMethodsRequired() const { - return false; - } - - /* ----------------------------------------------------------------------------- - * directorClassName() - * ----------------------------------------------------------------------------- */ - - String *directorClassName(Node *n) { - String *dirclassname; - const char *attrib = "director:classname"; - - if (!(dirclassname = Getattr(n, attrib))) { - String *classname = Getattr(n, "sym:name"); - - dirclassname = NewStringf("SwigDirector_%s", classname); - Setattr(n, attrib, dirclassname); - } - - return dirclassname; - } - -#endif - - /* ----------------------------------------------------------------------------- * typemapLookup() * ----------------------------------------------------------------------------- */ @@ -2477,12 +2101,12 @@ * Static member variables * ----------------------------------------------------------------------------- */ -const char *COM::usage = (char *) "\ -COM Options (available with -com)\n\ - -namespace <nm> - Use <nm> as prefix for Automation names\n\ - (defaults to module name)\n\ - -norcfile - Do not generate RC (resource definition) file\n\ - -nodeffile - Do not generate DEF file\n\ - -nodllexports - Do not generate DllGetClassObject and DllCanUnloadNow\n\ - (implies -nodeffile)\n\ -\n"; +const char *COM::usage = (char *) +"COM Options (available with -com)\n" +" -namespace <nm> - Use <nm> as prefix for Automation names\n" +" (defaults to module name)\n" +// " -norcfile - Do not generate RC (resource definition) file\n" +// " -nodeffile - Do not generate DEF file\n" +// " -nodllexports - Do not generate DllGetClassObject and DllCanUnloadNow\n" +// " (implies -nodeffile)\n" +"\n"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <je...@us...> - 2009-06-21 22:59:37
|
Revision: 11294 http://swig.svn.sourceforge.net/swig/?rev=11294&view=rev Author: jezabek Date: 2009-06-21 22:59:34 +0000 (Sun, 21 Jun 2009) Log Message: ----------- Fix compilation (new parameter in NewFile). Modified Paths: -------------- branches/gsoc2008-jezabek/Source/Modules/com.cxx Modified: branches/gsoc2008-jezabek/Source/Modules/com.cxx =================================================================== --- branches/gsoc2008-jezabek/Source/Modules/com.cxx 2009-06-21 22:39:32 UTC (rev 11293) +++ branches/gsoc2008-jezabek/Source/Modules/com.cxx 2009-06-21 22:59:34 UTC (rev 11294) @@ -364,7 +364,7 @@ SWIG_exit(EXIT_FAILURE); } - f_runtime = NewFile(outfile, "w"); + f_runtime = NewFile(outfile, "w", SWIG_output_files()); if (!f_runtime) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); @@ -474,7 +474,7 @@ /* Generate DEF file */ if (deffile_flag) { String *filen = NewStringf("%s%s.def", SWIG_output_directory(), module_class_name); - f_deffile = NewFile(filen, "w"); + f_deffile = NewFile(filen, "w", SWIG_output_files()); if (!f_deffile) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); @@ -495,7 +495,7 @@ if (rcfile_flag) { String *filen = NewStringf("%s%s.rc", SWIG_output_directory(), module_class_name); - f_rcfile = NewFile(filen, "w"); + f_rcfile = NewFile(filen, "w", SWIG_output_files()); if (!f_rcfile) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); @@ -510,7 +510,7 @@ /* Generate the IDL file containing the module class and proxy classes */ { String *filen = NewStringf("%s%s.idl", SWIG_output_directory(), module_class_name); - f_module = NewFile(filen, "w"); + f_module = NewFile(filen, "w", SWIG_output_files()); if (!f_module) { FileErrorDisplay(filen); SWIG_exit(EXIT_FAILURE); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <je...@us...> - 2009-06-22 18:04:39
|
Revision: 11298 http://swig.svn.sourceforge.net/swig/?rev=11298&view=rev Author: jezabek Date: 2009-06-22 18:04:37 +0000 (Mon, 22 Jun 2009) Log Message: ----------- Reorder initialization list to match the initialization order (and silence some GCC warnings). Modified Paths: -------------- branches/gsoc2008-jezabek/Source/Modules/com.cxx Modified: branches/gsoc2008-jezabek/Source/Modules/com.cxx =================================================================== --- branches/gsoc2008-jezabek/Source/Modules/com.cxx 2009-06-22 15:15:04 UTC (rev 11297) +++ branches/gsoc2008-jezabek/Source/Modules/com.cxx 2009-06-22 18:04:37 UTC (rev 11298) @@ -231,16 +231,16 @@ * ----------------------------------------------------------------------------- */ COM():empty_string(NewString("")), - hresult_flag(true), proxy_flag(true), + dllexports_flag(true), deffile_flag(true), rcfile_flag(true), - dllexports_flag(true), + hresult_flag(true), enum_constant_flag(false), + clsid_list(NewString("")), proxy_class_vtable_code(NewString("")), proxy_static_class_vtable_code(NewString("")), proxy_class_vtable_defs(NewString("")), - clsid_list(NewString("")), namespce(NULL) { /* Use NIL GUID by default */ memset(&master_guid, 0, sizeof(GUID)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <je...@us...> - 2009-06-22 23:07:50
|
Revision: 11301 http://swig.svn.sourceforge.net/swig/?rev=11301&view=rev Author: jezabek Date: 2009-06-22 23:07:49 +0000 (Mon, 22 Jun 2009) Log Message: ----------- Imported makeParameterName from Java. Now the generated IDL has proper parameter names. Modified Paths: -------------- branches/gsoc2008-jezabek/Source/Modules/com.cxx Modified: branches/gsoc2008-jezabek/Source/Modules/com.cxx =================================================================== --- branches/gsoc2008-jezabek/Source/Modules/com.cxx 2009-06-22 18:56:05 UTC (rev 11300) +++ branches/gsoc2008-jezabek/Source/Modules/com.cxx 2009-06-22 23:07:49 UTC (rev 11301) @@ -1090,8 +1090,7 @@ Swig_warning(WARN_COM_TYPEMAP_COMTYPE_UNDEF, input_file, line_number, "No comtype typemap defined for %s\n", SwigType_str(pt, 0)); } - /* FIXME: get the real argument name, it is important in the IDL */ - String *arg = NewStringf("arg%d", i); + String *arg = makeParameterName(n, p, i, setter_flag); /* Add parameter to module class function */ if (gencomma >= 2) @@ -1919,8 +1918,7 @@ Swig_warning(WARN_COM_TYPEMAP_COMTYPE_UNDEF, input_file, line_number, "No comtype typemap defined for %s\n", SwigType_str(pt, 0)); } - // FIXME: String *arg = makeParameterName(n, p, i, setter_flag); - String *arg = NewStringf("arg%d", i); + String *arg = makeParameterName(n, p, i, setter_flag); /* Add parameter to proxy function */ if (gencomma >= 2) @@ -1958,6 +1956,44 @@ } /* ----------------------------------------------------------------------------- + * makeParameterName() + * + * Inputs: + * n - Node + * p - parameter node + * arg_num - parameter argument number + * setter - set this flag when wrapping variables + * Return: + * arg - a unique parameter name + * ----------------------------------------------------------------------------- */ + + String *makeParameterName(Node *n, Parm *p, int arg_num, bool setter) { + + 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", arg_num) : Copy(pn); + + if (setter && Cmp(arg, "self") != 0) { + // Note that for setters the parameter name is always set but sometimes includes C++ + // scope resolution, so we need to strip off the scope resolution to make a valid name. + Delete(arg); + arg = NewString("value"); //Swig_scopename_last(pn); + } + + return arg; + } + + /* ----------------------------------------------------------------------------- * emitTypeWrapperClass() * ----------------------------------------------------------------------------- */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <je...@us...> - 2009-07-28 21:44:46
|
Revision: 11461 http://swig.svn.sourceforge.net/swig/?rev=11461&view=rev Author: jezabek Date: 2009-07-28 21:44:34 +0000 (Tue, 28 Jul 2009) Log Message: ----------- Move interface definitions out of the 'library' environment in the IDL file. This is needed for MIDL to generate the DLL proxy code (used for remote calls). Modified Paths: -------------- branches/gsoc2008-jezabek/Source/Modules/com.cxx Modified: branches/gsoc2008-jezabek/Source/Modules/com.cxx =================================================================== --- branches/gsoc2008-jezabek/Source/Modules/com.cxx 2009-07-28 13:12:06 UTC (rev 11460) +++ branches/gsoc2008-jezabek/Source/Modules/com.cxx 2009-07-28 21:44:34 UTC (rev 11461) @@ -164,7 +164,8 @@ File *f_rcfile; File *f_wrappers; File *f_proxy; - File *f_proxy_forward_defs; + File *f_interface_forward_defs; + File *f_class_defs; File *f_vtables; File *f_vtable_defs; File *f_factory; @@ -185,10 +186,11 @@ bool constructor_flag; String *proxy_class_def; - String *proxy_static_class_def; - String *proxy_class_forward_def; - String *proxy_class_code; - String *proxy_static_class_code; + String *proxy_interface_def; + String *proxy_static_interface_def; + String *proxy_interface_forward_def; + String *proxy_interface_code; + String *proxy_static_interface_code; String *proxy_class_name; String *proxy_class_constants_code; String *clsid_list; @@ -373,7 +375,8 @@ f_header = NewString(""); f_wrappers = NewString(""); f_proxy = NewString(""); - f_proxy_forward_defs = NewString(""); + f_class_defs = NewString(""); + f_interface_forward_defs = NewString(""); f_vtables = NewString(""); f_vtable_defs = NewString(""); f_directors = NewString(""); @@ -396,10 +399,11 @@ module_class_code = NewString(""); proxy_class_def = NewString(""); - proxy_static_class_def = NewString(""); - proxy_class_forward_def = NewString(""); - proxy_class_code = NewString(""); - proxy_static_class_code = NewString(""); + proxy_interface_def = NewString(""); + proxy_static_interface_def = NewString(""); + proxy_interface_forward_def = NewString(""); + proxy_interface_code = NewString(""); + proxy_static_interface_code = NewString(""); if (isNilGUID(&typelib_guid)) { String *tlbid_ident = NewStringf("%s.%s.TLBID", namespce, module_class_name); @@ -535,27 +539,32 @@ // Import IDispatch declaration, part 2 Printf(f_module, " importlib(\"stdole2.tlb\");\n\n"); - Printv(f_module, f_proxy_forward_defs, "\n", NIL); + // Forward definitions of interfaces + Printf(f_module, " interface I%s;\n", module_class_name); + Printv(f_module, f_interface_forward_defs, "\n", NIL); + Printv(f_module, " [\n uuid(", NIL); + formatGUID(f_module, &module_clsid, false); + Printv(f_module, ")\n ]\n coclass ", module_class_name, " {\n" + " interface I", module_class_name, ";\n };\n\n", NIL); + + // Add the COM class definitions + Printv(f_module, f_class_defs, NIL); + + Printf(f_module, "};\n\n"); + // Interface for module class - Printf(f_module, " [\n object,\n local,\n uuid("); + Printf(f_module, "[\n object,\n local,\n uuid("); formatGUID(f_module, &module_iid, false); - Printf(f_module, "),\n dual\n ]\n interface I%s : IDispatch {\n", module_class_name); + Printf(f_module, "),\n dual\n]\ninterface I%s : IDispatch {\n", module_class_name); // Add the wrapper methods Printv(f_module, module_class_code, NIL); - Printf(f_module, " };\n\n"); + Printf(f_module, "};\n\n"); - Printv(f_module, " [\n uuid(", NIL); - formatGUID(f_module, &module_clsid, false); - Printv(f_module, ")\n ]\n coclass ", module_class_name, " {\n" - " interface I", module_class_name, ";\n };\n\n", NIL); - // Add the proxy code Printv(f_module, f_proxy, NIL); - - Printf(f_module, "};\n"); } /* Close all of the files */ @@ -1054,9 +1063,9 @@ } if (hresult_flag) { - Printf(function_code, " HRESULT %s(", func_name); + Printf(function_code, " HRESULT %s(", func_name); } else { - Printf(function_code, " %s %s(", return_type, func_name); + Printf(function_code, " %s %s(", return_type, func_name); } /* Get number of required and total arguments */ @@ -1113,7 +1122,7 @@ if (!constructor_flag) Printv(module_class_code, function_code, NIL); else - Printv(proxy_static_class_code, function_code, NIL); + Printv(proxy_static_interface_code, function_code, NIL); Delete(function_code); Delete(return_type); @@ -1173,25 +1182,25 @@ " interface I$comclassname;\n };\n\n", NIL); } - Printv(proxy_class_forward_def, " interface I$comclassname;\n", NIL); - Printv(proxy_class_forward_def, " interface I$comclassnameStatic;\n", NIL); - Printv(proxy_class_def, " [\n object,\n local,\n uuid(", NIL); - formatGUID(proxy_class_def, proxy_iid, false); + Printv(proxy_interface_forward_def, " interface I$comclassname;\n", NIL); + Printv(proxy_interface_forward_def, " interface I$comclassnameStatic;\n", NIL); + Printv(proxy_interface_def, "[\n object,\n local,\n uuid(", NIL); + formatGUID(proxy_interface_def, proxy_iid, false); - Printv(proxy_class_def, "),\n dual\n ]\n interface I$comclassname : ", + Printv(proxy_interface_def, "),\n dual\n]\ninterface I$comclassname : ", "I", *Char(wanted_base) ? wanted_base : "Dispatch", " {\n", NIL); Delete(attributes); - Printv(proxy_static_class_def, " [\n object,\n local,\n uuid(", NIL); - formatGUID(proxy_static_class_def, proxy_static_iid, false); + Printv(proxy_static_interface_def, "[\n object,\n local,\n uuid(", NIL); + formatGUID(proxy_static_interface_def, proxy_static_iid, false); - Printv(proxy_static_class_def, "),\n dual\n ]\n interface I$comclassnameStatic : " + Printv(proxy_static_interface_def, "),\n dual\n]\ninterface I$comclassnameStatic : " "IDispatch {\n", NIL); // Add static class property to module class - Printf(module_class_code, " [ propget]\n" - " HRESULT %s([ retval, out ] I%sStatic **SWIG_result);\n", + Printf(module_class_code, " [ propget ]\n" + " HRESULT %s([ retval, out ] I%sStatic **SWIG_result);\n", proxy_class_name, proxy_class_name); Printf(module_class_vtable_code, ",\n (SWIG_funcptr) _wrap_%sStatic"); @@ -1206,16 +1215,16 @@ "}\n\n", proxy_class_name, proxy_class_name, proxy_class_name); // Substitute various strings into the above template - Replaceall(proxy_class_code, "$comclassname", proxy_class_name); - Replaceall(proxy_static_class_code, "$comclassname", proxy_class_name); + Replaceall(proxy_interface_code, "$comclassname", proxy_class_name); + Replaceall(proxy_static_interface_code, "$comclassname", proxy_class_name); Replaceall(proxy_class_def, "$comclassname", proxy_class_name); - Replaceall(proxy_static_class_def, "$comclassname", proxy_class_name); - Replaceall(proxy_class_forward_def, "$comclassname", proxy_class_name); + Replaceall(proxy_interface_forward_def, "$comclassname", proxy_class_name); + Replaceall(proxy_interface_def, "$comclassname", proxy_class_name); + Replaceall(proxy_static_interface_def, "$comclassname", proxy_class_name); Replaceall(proxy_class_def, "$module", module_class_name); - Replaceall(proxy_static_class_def, "$module", module_class_name); - Replaceall(proxy_class_code, "$module", module_class_name); - Replaceall(proxy_static_class_code, "$module", module_class_name); + Replaceall(proxy_interface_code, "$module", module_class_name); + Replaceall(proxy_static_interface_code, "$module", module_class_name); Delete(baseclass); } @@ -1381,10 +1390,11 @@ } Clear(proxy_class_def); - Clear(proxy_static_class_def); - Clear(proxy_class_code); - Clear(proxy_static_class_code); - Clear(proxy_class_forward_def); + Clear(proxy_interface_code); + Clear(proxy_static_interface_code); + Clear(proxy_interface_def); + Clear(proxy_static_interface_def); + Clear(proxy_interface_forward_def); Clear(proxy_class_vtable_code); Clear(proxy_static_class_vtable_code); Clear(proxy_class_vtable_defs); @@ -1628,23 +1638,24 @@ emitProxyClassDefAndCPPCasts(n); Replaceall(proxy_class_def, "$module", module_class_name); - Replaceall(proxy_static_class_def, "$module", module_class_name); - Replaceall(proxy_class_code, "$module", module_class_name); - Replaceall(proxy_static_class_code, "$module", module_class_name); + Replaceall(proxy_interface_def, "$module", module_class_name); + Replaceall(proxy_interface_code, "$module", module_class_name); + Replaceall(proxy_static_interface_code, "$module", module_class_name); Replaceall(proxy_class_constants_code, "$module", module_class_name); - Printv(f_proxy_forward_defs, proxy_class_forward_def, NIL); - Printv(f_proxy, proxy_class_def, proxy_class_code, NIL); + Printv(f_class_defs, proxy_class_def, NIL); + Printv(f_interface_forward_defs, proxy_interface_forward_def, NIL); + Printv(f_proxy, proxy_interface_def, proxy_interface_code, NIL); // Write out all the constants if (Len(proxy_class_constants_code) != 0) Printv(f_proxy, proxy_class_constants_code, NIL); - Printf(f_proxy, " };\n\n"); + Printf(f_proxy, "};\n\n"); - Printv(f_proxy, proxy_static_class_def, proxy_static_class_code, NIL); + Printv(f_proxy, proxy_static_interface_def, proxy_static_interface_code, NIL); - Printf(f_proxy, " };\n\n"); + Printf(f_proxy, "};\n\n"); Printv(proxy_class_vtable_code, "\n};\n\n", NIL); @@ -1866,18 +1877,18 @@ setter_flag = (Cmp(Getattr(n, "sym:name"), Swig_name_set(Swig_name_member(proxy_class_name, variable_name))) == 0); if (setter_flag) { - Printf(function_code, " [ propput ]\n"); + Printf(function_code, " [ propput ]\n"); } else { - Printf(function_code, " [ propget ]\n"); + Printf(function_code, " [ propget ]\n"); } } /* Start generating the proxy function */ if (hresult_flag) { - Printf(function_code, " HRESULT %s(", proxy_function_name); + Printf(function_code, " HRESULT %s(", proxy_function_name); } else { - Printf(function_code, " %s %s(", return_type, proxy_function_name); + Printf(function_code, " %s %s(", return_type, proxy_function_name); } emit_mark_varargs(l); @@ -1942,11 +1953,11 @@ Printv(function_code, ";\n", NIL); if (!Getattr(n, "override")) { - Printv(proxy_class_code, function_code, NIL); + Printv(proxy_interface_code, function_code, NIL); } if (checkAttribute(n, "storage", "static")) { - Printv(proxy_static_class_code, function_code, NIL); + Printv(proxy_static_interface_code, function_code, NIL); } Delete(pre_code); @@ -1998,9 +2009,8 @@ * ----------------------------------------------------------------------------- */ void emitTypeWrapperClass(String *classname, SwigType *type) { - Clear(proxy_class_def); - Clear(proxy_static_class_def); - Clear(proxy_class_forward_def); + Clear(proxy_interface_forward_def); + Clear(proxy_interface_def); proxy_iid = new GUID; @@ -2015,23 +2025,23 @@ formatGUID(f_vtable_defs, proxy_iid, true); Printf(f_vtable_defs, ";\n\n"); - Printv(proxy_class_forward_def, " interface I$comclassname;\n", NIL); + Printv(proxy_interface_forward_def, " interface I$comclassname;\n", NIL); - Printv(proxy_class_def, " [\n object,\n local,\n uuid(", NIL); - formatGUID(proxy_class_def, proxy_iid, false); - Printv(proxy_class_def, ")\n ]\n interface I$comclassname : IUnknown {\n };\n\n", NIL); + Printv(proxy_interface_def, "[\n object,\n local,\n uuid(", NIL); + formatGUID(proxy_interface_def, proxy_iid, false); + Printv(proxy_interface_def, ")\n]\ninterface I$comclassname : IUnknown {\n};\n\n", NIL); - Replaceall(proxy_class_forward_def, "$comclassname", classname); - Replaceall(proxy_class_def, "$comclassname", classname); - Replaceall(proxy_class_forward_def, "$module", module_class_name); - Replaceall(proxy_class_def, "$module", module_class_name); + Replaceall(proxy_interface_forward_def, "$comclassname", classname); + Replaceall(proxy_interface_def, "$comclassname", classname); + Replaceall(proxy_interface_forward_def, "$module", module_class_name); + Replaceall(proxy_interface_def, "$module", module_class_name); Printf(f_vtable_defs, "void * SWIGSTDCALL SWIG_wrap%s(void *ptr, int cMemOwn) {\n" " return SWIG_wrap_opaque(ptr, cMemOwn, &IID_I%s);\n" "};\n\n", classname, classname); - Printv(f_proxy_forward_defs, proxy_class_forward_def, NIL); - Printv(f_proxy, proxy_class_def, NIL); + Printv(f_interface_forward_defs, proxy_interface_forward_def, NIL); + Printv(f_proxy, proxy_interface_def, NIL); delete proxy_iid; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <je...@us...> - 2009-07-28 21:58:53
|
Revision: 11462 http://swig.svn.sourceforge.net/swig/?rev=11462&view=rev Author: jezabek Date: 2009-07-28 21:58:47 +0000 (Tue, 28 Jul 2009) Log Message: ----------- Remove the 'local' attribute from interfaces. This attribute seems to be ignored by MIDL but WIDL won't generate RPC proxies when it is set. Modified Paths: -------------- branches/gsoc2008-jezabek/Source/Modules/com.cxx Modified: branches/gsoc2008-jezabek/Source/Modules/com.cxx =================================================================== --- branches/gsoc2008-jezabek/Source/Modules/com.cxx 2009-07-28 21:44:34 UTC (rev 11461) +++ branches/gsoc2008-jezabek/Source/Modules/com.cxx 2009-07-28 21:58:47 UTC (rev 11462) @@ -554,7 +554,7 @@ Printf(f_module, "};\n\n"); // Interface for module class - Printf(f_module, "[\n object,\n local,\n uuid("); + Printf(f_module, "[\n object,\n uuid("); formatGUID(f_module, &module_iid, false); Printf(f_module, "),\n dual\n]\ninterface I%s : IDispatch {\n", module_class_name); @@ -1184,7 +1184,7 @@ Printv(proxy_interface_forward_def, " interface I$comclassname;\n", NIL); Printv(proxy_interface_forward_def, " interface I$comclassnameStatic;\n", NIL); - Printv(proxy_interface_def, "[\n object,\n local,\n uuid(", NIL); + Printv(proxy_interface_def, "[\n object,\n uuid(", NIL); formatGUID(proxy_interface_def, proxy_iid, false); Printv(proxy_interface_def, "),\n dual\n]\ninterface I$comclassname : ", @@ -1192,7 +1192,7 @@ Delete(attributes); - Printv(proxy_static_interface_def, "[\n object,\n local,\n uuid(", NIL); + Printv(proxy_static_interface_def, "[\n object,\n uuid(", NIL); formatGUID(proxy_static_interface_def, proxy_static_iid, false); Printv(proxy_static_interface_def, "),\n dual\n]\ninterface I$comclassnameStatic : " @@ -2027,7 +2027,7 @@ Printv(proxy_interface_forward_def, " interface I$comclassname;\n", NIL); - Printv(proxy_interface_def, "[\n object,\n local,\n uuid(", NIL); + Printv(proxy_interface_def, "[\n object,\n uuid(", NIL); formatGUID(proxy_interface_def, proxy_iid, false); Printv(proxy_interface_def, ")\n]\ninterface I$comclassname : IUnknown {\n};\n\n", NIL); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |