Merge branch 'jiulongw-master'
* jiulongw-master: Fix go wrapper compilation error Fix missing semicolon in golang wrapper Fix extra quote escape in golang Fix #define error when value contains char in compound expression Add more test case for char const expression in enum Revert "Add enum test cases with const char in compound expression" Add runtime tests for char in compound expression patch Add enum test cases with const char in compound expression Fix enum error when value contains char in compound expression
This commit is contained in:
commit
f89b8836dd
6 changed files with 82 additions and 42 deletions
|
|
@ -78,4 +78,7 @@ extern "C" {
|
|||
#define SWIG_WARN_NODE_END(Node) \
|
||||
if (wrnfilter) Swig_warnfilter(wrnfilter,0); \
|
||||
}
|
||||
|
||||
#define COMPOUND_EXPR_VAL(dtype) \
|
||||
((dtype).type == T_CHAR || (dtype).type == T_WCHAR ? (dtype).rawval : (dtype).val)
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -5828,7 +5828,7 @@ definetype : { /* scanner_check_typedef(); */ } expr {
|
|||
if ($$.type == T_STRING) {
|
||||
$$.rawval = NewStringf("\"%(escape)s\"",$$.val);
|
||||
} else if ($$.type != T_CHAR && $$.type != T_WSTRING && $$.type != T_WCHAR) {
|
||||
$$.rawval = 0;
|
||||
$$.rawval = NewStringf("%s", $$.val);
|
||||
}
|
||||
$$.qualifier = 0;
|
||||
$$.bitfield = 0;
|
||||
|
|
@ -6095,81 +6095,81 @@ exprnum : NUM_INT { $$ = $1; }
|
|||
;
|
||||
|
||||
exprcompound : expr PLUS expr {
|
||||
$$.val = NewStringf("%s+%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s+%s", COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote($1.type,$3.type);
|
||||
}
|
||||
| expr MINUS expr {
|
||||
$$.val = NewStringf("%s-%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s-%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote($1.type,$3.type);
|
||||
}
|
||||
| expr STAR expr {
|
||||
$$.val = NewStringf("%s*%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s*%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote($1.type,$3.type);
|
||||
}
|
||||
| expr SLASH expr {
|
||||
$$.val = NewStringf("%s/%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s/%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote($1.type,$3.type);
|
||||
}
|
||||
| expr MODULO expr {
|
||||
$$.val = NewStringf("%s%%%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s%%%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote($1.type,$3.type);
|
||||
}
|
||||
| expr AND expr {
|
||||
$$.val = NewStringf("%s&%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s&%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote($1.type,$3.type);
|
||||
}
|
||||
| expr OR expr {
|
||||
$$.val = NewStringf("%s|%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s|%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote($1.type,$3.type);
|
||||
}
|
||||
| expr XOR expr {
|
||||
$$.val = NewStringf("%s^%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s^%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote($1.type,$3.type);
|
||||
}
|
||||
| expr LSHIFT expr {
|
||||
$$.val = NewStringf("%s << %s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s << %s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote_type($1.type);
|
||||
}
|
||||
| expr RSHIFT expr {
|
||||
$$.val = NewStringf("%s >> %s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s >> %s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = promote_type($1.type);
|
||||
}
|
||||
| expr LAND expr {
|
||||
$$.val = NewStringf("%s&&%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s&&%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr LOR expr {
|
||||
$$.val = NewStringf("%s||%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s||%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr EQUALTO expr {
|
||||
$$.val = NewStringf("%s==%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s==%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr NOTEQUALTO expr {
|
||||
$$.val = NewStringf("%s!=%s",$1.val,$3.val);
|
||||
$$.val = NewStringf("%s!=%s",COMPOUND_EXPR_VAL($1),COMPOUND_EXPR_VAL($3));
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
/* Sadly this causes 2 reduce-reduce conflicts with templates. FIXME resolve these.
|
||||
| expr GREATERTHAN expr {
|
||||
$$.val = NewStringf("%s > %s", $1.val, $3.val);
|
||||
$$.val = NewStringf("%s > %s", COMPOUND_EXPR_VAL($1), COMPOUND_EXPR_VAL($3));
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr LESSTHAN expr {
|
||||
$$.val = NewStringf("%s < %s", $1.val, $3.val);
|
||||
$$.val = NewStringf("%s < %s", COMPOUND_EXPR_VAL($1), COMPOUND_EXPR_VAL($3));
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
*/
|
||||
| expr GREATERTHANOREQUALTO expr {
|
||||
$$.val = NewStringf("%s >= %s", $1.val, $3.val);
|
||||
$$.val = NewStringf("%s >= %s", COMPOUND_EXPR_VAL($1), COMPOUND_EXPR_VAL($3));
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr LESSTHANOREQUALTO expr {
|
||||
$$.val = NewStringf("%s <= %s", $1.val, $3.val);
|
||||
$$.val = NewStringf("%s <= %s", COMPOUND_EXPR_VAL($1), COMPOUND_EXPR_VAL($3));
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr QUESTIONMARK expr COLON expr %prec QUESTIONMARK {
|
||||
$$.val = NewStringf("%s?%s:%s", $1.val, $3.val, $5.val);
|
||||
$$.val = NewStringf("%s?%s:%s", COMPOUND_EXPR_VAL($1), COMPOUND_EXPR_VAL($3), COMPOUND_EXPR_VAL($5));
|
||||
/* This may not be exactly right, but is probably good enough
|
||||
* for the purposes of parsing constant expressions. */
|
||||
$$.type = promote($3.type, $5.type);
|
||||
|
|
@ -6187,7 +6187,7 @@ exprcompound : expr PLUS expr {
|
|||
$$.type = $2.type;
|
||||
}
|
||||
| LNOT expr {
|
||||
$$.val = NewStringf("!%s",$2.val);
|
||||
$$.val = NewStringf("!%s",COMPOUND_EXPR_VAL($2));
|
||||
$$.type = T_INT;
|
||||
}
|
||||
| type LPAREN {
|
||||
|
|
|
|||
|
|
@ -2809,29 +2809,39 @@ private:
|
|||
String *get = NewString("");
|
||||
Printv(get, Swig_cresult_name(), " = ", NULL);
|
||||
|
||||
char quote;
|
||||
if (Getattr(n, "wrappedasconstant")) {
|
||||
quote = '\0';
|
||||
} else if (SwigType_type(type) == T_CHAR) {
|
||||
quote = '\'';
|
||||
} else if (SwigType_type(type) == T_STRING) {
|
||||
Printv(get, "(char *)", NULL);
|
||||
quote = '"';
|
||||
String *rawval = Getattr(n, "rawval");
|
||||
if (rawval && Len(rawval)) {
|
||||
if (SwigType_type(type) == T_STRING) {
|
||||
Printv(get, "(char *)", NULL);
|
||||
}
|
||||
|
||||
Printv(get, rawval, NULL);
|
||||
} else {
|
||||
quote = '\0';
|
||||
}
|
||||
char quote;
|
||||
if (Getattr(n, "wrappedasconstant")) {
|
||||
quote = '\0';
|
||||
} else if (SwigType_type(type) == T_CHAR) {
|
||||
quote = '\'';
|
||||
} else if (SwigType_type(type) == T_STRING) {
|
||||
Printv(get, "(char *)", NULL);
|
||||
quote = '"';
|
||||
} else {
|
||||
quote = '\0';
|
||||
}
|
||||
|
||||
if (quote != '\0') {
|
||||
Printf(get, "%c", quote);
|
||||
}
|
||||
if (quote != '\0') {
|
||||
Printf(get, "%c", quote);
|
||||
}
|
||||
|
||||
Printv(get, Getattr(n, "value"), NULL);
|
||||
Printv(get, Getattr(n, "value"), NULL);
|
||||
|
||||
if (quote != '\0') {
|
||||
Printf(get, "%c", quote);
|
||||
if (quote != '\0') {
|
||||
Printf(get, "%c", quote);
|
||||
}
|
||||
}
|
||||
|
||||
Printv(get, ";\n", NULL);
|
||||
|
||||
Setattr(n, "wrap:action", get);
|
||||
|
||||
String *sname = Copy(symname);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue