aboutsummaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorVladimir Kalinin <vkalinin@opendesign.com>2013-12-08 01:47:01 +0400
committerVladimir Kalinin <vkalinin@opendesign.com>2013-12-08 01:47:01 +0400
commitcf3696e8f905ae4e67340a839f8f17cda4549271 (patch)
tree215c1207244e304368ebf13047da829449f3b4d1 /Source
parent44323e14b3cb3541db5b89b43a54b443d0f4d8d1 (diff)
parent67848e377adbc62cca118d382a587074edac21d6 (diff)
downloadswig-cf3696e8f905ae4e67340a839f8f17cda4549271.tar.gz
Merge branch 'nested' of https://github.com/swig/swig into nested
Diffstat (limited to 'Source')
-rw-r--r--Source/CParse/parser.y10
-rw-r--r--Source/Modules/csharp.cxx4
-rw-r--r--Source/Modules/java.cxx4
-rw-r--r--Source/Modules/lang.cxx41
-rw-r--r--Source/Modules/main.cxx4
-rw-r--r--Source/Swig/misc.c49
-rw-r--r--Source/Swig/naming.c2
-rw-r--r--Source/Swig/swig.h3
8 files changed, 58 insertions, 59 deletions
diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y
index 3900a0e09..0124ad25a 100644
--- a/Source/CParse/parser.y
+++ b/Source/CParse/parser.y
@@ -309,9 +309,6 @@ static void add_symbols(Node *n) {
int isfriend = inclass && is_friend(n);
int iscdecl = Cmp(nodeType(n),"cdecl") == 0;
int only_csymbol = 0;
- if (extendmode) {
- Setattr(n,"isextension","1");
- }
if (inclass) {
String *name = Getattr(n, "name");
@@ -1594,6 +1591,7 @@ swig_directive : extend_directive { $$ = $1; }
extend_directive : EXTEND options idcolon LBRACE {
Node *cls;
String *clsname;
+ extendmode = 1;
cplus_mode = CPLUS_PUBLIC;
if (!classes) classes = NewHash();
if (!classes_typedefs) classes_typedefs = NewHash();
@@ -1619,7 +1617,6 @@ extend_directive : EXTEND options idcolon LBRACE {
Note that %extend before the class typedef never worked, only %extend after the class typdef. */
prev_symtab = Swig_symbol_setscope(Getattr(cls, "symtab"));
current_class = cls;
- extendmode = 1;
SWIG_WARN_NODE_BEGIN(cls);
Swig_warning(WARN_PARSE_EXTEND_NAME, cparse_file, cparse_line, "Deprecated %%extend name used - the %s name '%s' should be used instead of the typedef name '%s'.\n", Getattr(cls, "kind"), SwigType_namestr(Getattr(cls, "name")), $3);
SWIG_WARN_NODE_END(cls);
@@ -1628,7 +1625,6 @@ extend_directive : EXTEND options idcolon LBRACE {
/* Previous class definition. Use its symbol table */
prev_symtab = Swig_symbol_setscope(Getattr(cls,"symtab"));
current_class = cls;
- extendmode = 1;
}
Classprefix = NewString($3);
Namespaceprefix= Swig_symbol_qualifiedscopename(0);
@@ -4286,7 +4282,7 @@ cpp_members : cpp_member cpp_members {
cpp_member : c_declaration { $$ = $1; }
| cpp_constructor_decl {
$$ = $1;
- if (extendmode) {
+ if (extendmode && current_class) {
String *symname;
symname= make_name($$,Getattr($$,"name"), Getattr($$,"decl"));
if (Strcmp(symname,Getattr($$,"name")) == 0) {
@@ -4327,7 +4323,7 @@ cpp_member : c_declaration { $$ = $1; }
*/
cpp_constructor_decl : storage_class type LPAREN parms RPAREN ctor_end {
- if (Classprefix) {
+ if (inclass || extendmode) {
SwigType *decl = NewStringEmpty();
$$ = new_node("constructor");
Setattr($$,"storage",$1);
diff --git a/Source/Modules/csharp.cxx b/Source/Modules/csharp.cxx
index 88dbfbad7..9197b4b17 100644
--- a/Source/Modules/csharp.cxx
+++ b/Source/Modules/csharp.cxx
@@ -18,8 +18,6 @@
/* Hash type used for upcalls from C/C++ */
typedef DOH UpcallData;
-// insert N tabs before each new line in s
-void Swig_offset_string(String *s, int N);
class CSHARP:public Language {
static const char *usage;
@@ -2004,7 +2002,7 @@ public:
} else {
for (int i = 0; i < nesting_depth; ++i)
Append(old_proxy_class_code, " ");
- Append(old_proxy_class_code, "}\n");
+ Append(old_proxy_class_code, "}\n\n");
--nesting_depth;
}
diff --git a/Source/Modules/java.cxx b/Source/Modules/java.cxx
index f781f0c39..fdc678dbf 100644
--- a/Source/Modules/java.cxx
+++ b/Source/Modules/java.cxx
@@ -18,8 +18,6 @@
/* Hash type used for upcalls from C/C++ */
typedef DOH UpcallData;
-// insert N tabs before each new line in s
-void Swig_offset_string(String *s, int N);
class JAVA:public Language {
static const char *usage;
@@ -2068,7 +2066,7 @@ public:
} else {
for (int i = 0; i < nesting_depth; ++i)
Append(old_proxy_class_code, " ");
- Append(old_proxy_class_code, "}\n");
+ Append(old_proxy_class_code, "}\n\n");
--nesting_depth;
}
diff --git a/Source/Modules/lang.cxx b/Source/Modules/lang.cxx
index 5c701bc85..78c37dbb9 100644
--- a/Source/Modules/lang.cxx
+++ b/Source/Modules/lang.cxx
@@ -3632,44 +3632,3 @@ Hash *Language::getClassHash() const {
return classhash;
}
-// insert N tabs before each new line in s
-void Swig_offset_string(String *s, int N)
-{
- // count a number of lines in s
- int lines = 1;
- int L = Len(s);
- char *start = strchr(Char(s), '\n');
- while (start) {
- ++lines;
- start = strchr(start + 1, '\n');
- }
- // do not count pending new line
- if ((Char(s))[L-1] == '\n')
- --lines;
- // allocate a temporary storage for a padded string
- char *res = (char*)malloc(L + lines * N * 2 + 1);
- res[L + lines * N * 2] = 0;
-
- // copy lines to res, prepending tabs to each line
- char *p = res; // output pointer
- start = Char(s); // start of a current line
- char *end = strchr(start, '\n'); // end of a current line
- while (end) {
- memset(p, ' ', N*2);
- p += N*2;
- memcpy(p, start, end - start + 1);
- p += end - start + 1;
- start = end + 1;
- end = strchr(start, '\n');
- }
- // process the last line
- if (*start) {
- memset(p, ' ', N*2);
- p += N*2;
- strcpy(p, start);
- }
- // replace 's' contents with 'res'
- Clear(s);
- Append(s, res);
- free(res);
-}
diff --git a/Source/Modules/main.cxx b/Source/Modules/main.cxx
index 62d9c0c36..aa7e83ef8 100644
--- a/Source/Modules/main.cxx
+++ b/Source/Modules/main.cxx
@@ -863,9 +863,7 @@ void SWIG_getoptions(int argc, char *argv[]) {
}
static void flatten_nested() {
- String *val = NewString("1");
- Swig_feature_set(Swig_cparse_features(), "", 0, "feature:flatnested", val, 0);
- Delete(val);
+ Swig_feature_set(Swig_cparse_features(), "", 0, "feature:flatnested", "1", 0);
}
diff --git a/Source/Swig/misc.c b/Source/Swig/misc.c
index 769882bf8..7d8180d1c 100644
--- a/Source/Swig/misc.c
+++ b/Source/Swig/misc.c
@@ -1147,6 +1147,55 @@ String *Swig_string_strip(String *s) {
return ns;
}
+/* -----------------------------------------------------------------------------
+ * Swig_offset_string()
+ *
+ * Insert number tabs before each new line in s
+ * ----------------------------------------------------------------------------- */
+
+void Swig_offset_string(String *s, int number) {
+ char *res;
+ char *p;
+ char *end;
+ /* count a number of lines in s */
+ int lines = 1;
+ int len = Len(s);
+ char *start = strchr(Char(s), '\n');
+ while (start) {
+ ++lines;
+ start = strchr(start + 1, '\n');
+ }
+ /* do not count pending new line */
+ if ((Char(s))[len-1] == '\n')
+ --lines;
+ /* allocate a temporary storage for a padded string */
+ res = (char*)malloc(len + lines * number * 2 + 1);
+ res[len + lines * number * 2] = 0;
+
+ /* copy lines to res, prepending tabs to each line */
+ p = res; /* output pointer */
+ start = Char(s); /* start of a current line */
+ end = strchr(start, '\n'); /* end of a current line */
+ while (end) {
+ memset(p, ' ', number*2);
+ p += number*2;
+ memcpy(p, start, end - start + 1);
+ p += end - start + 1;
+ start = end + 1;
+ end = strchr(start, '\n');
+ }
+ /* process the last line */
+ if (*start) {
+ memset(p, ' ', number*2);
+ p += number*2;
+ strcpy(p, start);
+ }
+ /* replace 's' contents with 'res' */
+ Clear(s);
+ Append(s, res);
+ free(res);
+}
+
#ifdef HAVE_PCRE
#include <pcre.h>
diff --git a/Source/Swig/naming.c b/Source/Swig/naming.c
index 2921b3c84..9e2b4a436 100644
--- a/Source/Swig/naming.c
+++ b/Source/Swig/naming.c
@@ -774,7 +774,7 @@ void Swig_features_get(Hash *features, String *prefix, String *name, SwigType *d
* concatenating the feature name plus ':' plus the attribute name.
* ----------------------------------------------------------------------------- */
-void Swig_feature_set(Hash *features, const_String_or_char_ptr name, SwigType *decl, const_String_or_char_ptr featurename, String *value, Hash *featureattribs) {
+void Swig_feature_set(Hash *features, const_String_or_char_ptr name, SwigType *decl, const_String_or_char_ptr featurename, const_String_or_char_ptr value, Hash *featureattribs) {
Hash *n;
Hash *fhash;
diff --git a/Source/Swig/swig.h b/Source/Swig/swig.h
index 95e3784d9..95d9189b3 100644
--- a/Source/Swig/swig.h
+++ b/Source/Swig/swig.h
@@ -304,7 +304,7 @@ extern int ParmList_is_compactdefargs(ParmList *p);
extern DOH *Swig_name_object_get(Hash *namehash, String *prefix, String *name, SwigType *decl);
extern void Swig_name_object_inherit(Hash *namehash, String *base, String *derived);
extern void Swig_features_get(Hash *features, String *prefix, String *name, SwigType *decl, Node *n);
- extern void Swig_feature_set(Hash *features, const_String_or_char_ptr name, SwigType *decl, const_String_or_char_ptr featurename, String *value, Hash *featureattribs);
+ extern void Swig_feature_set(Hash *features, const_String_or_char_ptr name, SwigType *decl, const_String_or_char_ptr featurename, const_String_or_char_ptr value, Hash *featureattribs);
/* --- Misc --- */
extern char *Swig_copy_string(const char *c);
@@ -332,6 +332,7 @@ extern int ParmList_is_compactdefargs(ParmList *p);
extern String *Swig_string_lower(String *s);
extern String *Swig_string_upper(String *s);
extern String *Swig_string_title(String *s);
+ extern void Swig_offset_string(String *s, int number);
extern String *Swig_pcre_version(void);
extern void Swig_init(void);
extern int Swig_value_wrapper_mode(int mode);