Merge branch 'nested' of https://github.com/swig/swig into nested
This commit is contained in:
commit
cf3696e8f9
8 changed files with 58 additions and 59 deletions
|
|
@ -309,9 +309,6 @@ static void add_symbols(Node *n) {
|
||||||
int isfriend = inclass && is_friend(n);
|
int isfriend = inclass && is_friend(n);
|
||||||
int iscdecl = Cmp(nodeType(n),"cdecl") == 0;
|
int iscdecl = Cmp(nodeType(n),"cdecl") == 0;
|
||||||
int only_csymbol = 0;
|
int only_csymbol = 0;
|
||||||
if (extendmode) {
|
|
||||||
Setattr(n,"isextension","1");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (inclass) {
|
if (inclass) {
|
||||||
String *name = Getattr(n, "name");
|
String *name = Getattr(n, "name");
|
||||||
|
|
@ -1594,6 +1591,7 @@ swig_directive : extend_directive { $$ = $1; }
|
||||||
extend_directive : EXTEND options idcolon LBRACE {
|
extend_directive : EXTEND options idcolon LBRACE {
|
||||||
Node *cls;
|
Node *cls;
|
||||||
String *clsname;
|
String *clsname;
|
||||||
|
extendmode = 1;
|
||||||
cplus_mode = CPLUS_PUBLIC;
|
cplus_mode = CPLUS_PUBLIC;
|
||||||
if (!classes) classes = NewHash();
|
if (!classes) classes = NewHash();
|
||||||
if (!classes_typedefs) classes_typedefs = 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. */
|
Note that %extend before the class typedef never worked, only %extend after the class typdef. */
|
||||||
prev_symtab = Swig_symbol_setscope(Getattr(cls, "symtab"));
|
prev_symtab = Swig_symbol_setscope(Getattr(cls, "symtab"));
|
||||||
current_class = cls;
|
current_class = cls;
|
||||||
extendmode = 1;
|
|
||||||
SWIG_WARN_NODE_BEGIN(cls);
|
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_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);
|
SWIG_WARN_NODE_END(cls);
|
||||||
|
|
@ -1628,7 +1625,6 @@ extend_directive : EXTEND options idcolon LBRACE {
|
||||||
/* Previous class definition. Use its symbol table */
|
/* Previous class definition. Use its symbol table */
|
||||||
prev_symtab = Swig_symbol_setscope(Getattr(cls,"symtab"));
|
prev_symtab = Swig_symbol_setscope(Getattr(cls,"symtab"));
|
||||||
current_class = cls;
|
current_class = cls;
|
||||||
extendmode = 1;
|
|
||||||
}
|
}
|
||||||
Classprefix = NewString($3);
|
Classprefix = NewString($3);
|
||||||
Namespaceprefix= Swig_symbol_qualifiedscopename(0);
|
Namespaceprefix= Swig_symbol_qualifiedscopename(0);
|
||||||
|
|
@ -4286,7 +4282,7 @@ cpp_members : cpp_member cpp_members {
|
||||||
cpp_member : c_declaration { $$ = $1; }
|
cpp_member : c_declaration { $$ = $1; }
|
||||||
| cpp_constructor_decl {
|
| cpp_constructor_decl {
|
||||||
$$ = $1;
|
$$ = $1;
|
||||||
if (extendmode) {
|
if (extendmode && current_class) {
|
||||||
String *symname;
|
String *symname;
|
||||||
symname= make_name($$,Getattr($$,"name"), Getattr($$,"decl"));
|
symname= make_name($$,Getattr($$,"name"), Getattr($$,"decl"));
|
||||||
if (Strcmp(symname,Getattr($$,"name")) == 0) {
|
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 {
|
cpp_constructor_decl : storage_class type LPAREN parms RPAREN ctor_end {
|
||||||
if (Classprefix) {
|
if (inclass || extendmode) {
|
||||||
SwigType *decl = NewStringEmpty();
|
SwigType *decl = NewStringEmpty();
|
||||||
$$ = new_node("constructor");
|
$$ = new_node("constructor");
|
||||||
Setattr($$,"storage",$1);
|
Setattr($$,"storage",$1);
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,6 @@
|
||||||
|
|
||||||
/* Hash type used for upcalls from C/C++ */
|
/* Hash type used for upcalls from C/C++ */
|
||||||
typedef DOH UpcallData;
|
typedef DOH UpcallData;
|
||||||
// insert N tabs before each new line in s
|
|
||||||
void Swig_offset_string(String *s, int N);
|
|
||||||
|
|
||||||
class CSHARP:public Language {
|
class CSHARP:public Language {
|
||||||
static const char *usage;
|
static const char *usage;
|
||||||
|
|
@ -2004,7 +2002,7 @@ public:
|
||||||
} else {
|
} else {
|
||||||
for (int i = 0; i < nesting_depth; ++i)
|
for (int i = 0; i < nesting_depth; ++i)
|
||||||
Append(old_proxy_class_code, " ");
|
Append(old_proxy_class_code, " ");
|
||||||
Append(old_proxy_class_code, "}\n");
|
Append(old_proxy_class_code, "}\n\n");
|
||||||
--nesting_depth;
|
--nesting_depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,6 @@
|
||||||
|
|
||||||
/* Hash type used for upcalls from C/C++ */
|
/* Hash type used for upcalls from C/C++ */
|
||||||
typedef DOH UpcallData;
|
typedef DOH UpcallData;
|
||||||
// insert N tabs before each new line in s
|
|
||||||
void Swig_offset_string(String *s, int N);
|
|
||||||
|
|
||||||
class JAVA:public Language {
|
class JAVA:public Language {
|
||||||
static const char *usage;
|
static const char *usage;
|
||||||
|
|
@ -2068,7 +2066,7 @@ public:
|
||||||
} else {
|
} else {
|
||||||
for (int i = 0; i < nesting_depth; ++i)
|
for (int i = 0; i < nesting_depth; ++i)
|
||||||
Append(old_proxy_class_code, " ");
|
Append(old_proxy_class_code, " ");
|
||||||
Append(old_proxy_class_code, "}\n");
|
Append(old_proxy_class_code, "}\n\n");
|
||||||
--nesting_depth;
|
--nesting_depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3632,44 +3632,3 @@ Hash *Language::getClassHash() const {
|
||||||
return classhash;
|
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);
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -863,9 +863,7 @@ void SWIG_getoptions(int argc, char *argv[]) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void flatten_nested() {
|
static void flatten_nested() {
|
||||||
String *val = NewString("1");
|
Swig_feature_set(Swig_cparse_features(), "", 0, "feature:flatnested", "1", 0);
|
||||||
Swig_feature_set(Swig_cparse_features(), "", 0, "feature:flatnested", val, 0);
|
|
||||||
Delete(val);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1147,6 +1147,55 @@ String *Swig_string_strip(String *s) {
|
||||||
return ns;
|
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
|
#ifdef HAVE_PCRE
|
||||||
#include <pcre.h>
|
#include <pcre.h>
|
||||||
|
|
|
||||||
|
|
@ -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.
|
* 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 *n;
|
||||||
Hash *fhash;
|
Hash *fhash;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 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_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_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 --- */
|
/* --- Misc --- */
|
||||||
extern char *Swig_copy_string(const char *c);
|
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_lower(String *s);
|
||||||
extern String *Swig_string_upper(String *s);
|
extern String *Swig_string_upper(String *s);
|
||||||
extern String *Swig_string_title(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 String *Swig_pcre_version(void);
|
||||||
extern void Swig_init(void);
|
extern void Swig_init(void);
|
||||||
extern int Swig_value_wrapper_mode(int mode);
|
extern int Swig_value_wrapper_mode(int mode);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue