Add support for the optional noblock attribute for all features. It works the same as it does for typemaps removing {} braces.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10234 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
b9a83129c6
commit
a4e2ca520f
1 changed files with 31 additions and 19 deletions
|
|
@ -829,6 +829,31 @@ static Symtab *get_global_scope() {
|
||||||
return symtab;
|
return symtab;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Remove the block braces, { and }, if the 'noblock' attribute is set
|
||||||
|
* actually identical to remove_block_parmlist
|
||||||
|
* Node *kw can be either a Hash or Parmlist */
|
||||||
|
static String *remove_block(Node *kw, const String *inputcode) {
|
||||||
|
String *modified_code = 0;
|
||||||
|
while (kw) {
|
||||||
|
String *name = Getattr(kw,"name");
|
||||||
|
if (name && (Cmp(name,"noblock") == 0)) {
|
||||||
|
char *cstr = Char(inputcode);
|
||||||
|
size_t len = Len(inputcode);
|
||||||
|
if (len && cstr[0] == '{') {
|
||||||
|
--len; ++cstr;
|
||||||
|
if (len && cstr[len - 1] == '}') { --len; }
|
||||||
|
/* we now remove the extra spaces */
|
||||||
|
while (len && isspace((int)cstr[0])) { --len; ++cstr; }
|
||||||
|
while (len && isspace((int)cstr[len - 1])) { --len; }
|
||||||
|
modified_code = NewStringWithSize(cstr, len);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
kw = nextSibling(kw);
|
||||||
|
}
|
||||||
|
return modified_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static Node *nscope = 0;
|
static Node *nscope = 0;
|
||||||
static Node *nscope_inner = 0;
|
static Node *nscope_inner = 0;
|
||||||
|
|
@ -1159,6 +1184,10 @@ static void new_feature(const char *featurename, String *val, Hash *featureattri
|
||||||
|
|
||||||
ParmList *declparms = declaratorparms;
|
ParmList *declparms = declaratorparms;
|
||||||
|
|
||||||
|
/* remove the { and } braces if the noblock attribute is set */
|
||||||
|
String *newval = remove_block(featureattribs, val);
|
||||||
|
val = newval ? newval : val;
|
||||||
|
|
||||||
/* Add the feature */
|
/* Add the feature */
|
||||||
single_new_feature(featurename, val, featureattribs, declaratorid, type, declaratorparms, qualifier);
|
single_new_feature(featurename, val, featureattribs, declaratorid, type, declaratorparms, qualifier);
|
||||||
|
|
||||||
|
|
@ -2394,25 +2423,8 @@ typemap_directive : TYPEMAP LPAREN typemap_type RPAREN tm_list stringbrace {
|
||||||
$$ = new_node("typemap");
|
$$ = new_node("typemap");
|
||||||
Setattr($$,"method",$3.op);
|
Setattr($$,"method",$3.op);
|
||||||
if ($3.kwargs) {
|
if ($3.kwargs) {
|
||||||
Parm *kw = $3.kwargs;
|
ParmList *kw = $3.kwargs;
|
||||||
/* check for 'noblock' option, which remove the block braces */
|
code = remove_block(kw, $6);
|
||||||
while (kw) {
|
|
||||||
String *name = Getattr(kw,"name");
|
|
||||||
if (name && (Cmp(name,"noblock") == 0)) {
|
|
||||||
char *cstr = Char($6);
|
|
||||||
size_t len = Len($6);
|
|
||||||
if (len && cstr[0] == '{') {
|
|
||||||
--len; ++cstr;
|
|
||||||
if (len && cstr[len - 1] == '}') { --len; }
|
|
||||||
/* we now remove the extra spaces */
|
|
||||||
while (len && isspace((int)cstr[0])) { --len; ++cstr; }
|
|
||||||
while (len && isspace((int)cstr[len - 1])) { --len; }
|
|
||||||
code = NewStringWithSize(cstr, len);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
kw = nextSibling(kw);
|
|
||||||
}
|
|
||||||
Setattr($$,"kwargs", $3.kwargs);
|
Setattr($$,"kwargs", $3.kwargs);
|
||||||
}
|
}
|
||||||
code = code ? code : NewString($6);
|
code = code ? code : NewString($6);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue