true and false supported in constant expressions (C++ only). && || == != < > <= >= operators now return type bool (C++ only) and type int for C as per C/C++ standards.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@11677 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
d841f7a66c
commit
7c6aca2ebc
10 changed files with 276 additions and 15 deletions
|
|
@ -1486,7 +1486,7 @@ static void tag_nodes(Node *n, const_String_or_char_ptr attrname, DOH *value) {
|
|||
%token <id> STRING
|
||||
%token <loc> INCLUDE IMPORT INSERT
|
||||
%token <str> CHARCONST
|
||||
%token <dtype> NUM_INT NUM_FLOAT NUM_UNSIGNED NUM_LONG NUM_ULONG NUM_LONGLONG NUM_ULONGLONG
|
||||
%token <dtype> NUM_INT NUM_FLOAT NUM_UNSIGNED NUM_LONG NUM_ULONG NUM_LONGLONG NUM_ULONGLONG NUM_BOOL
|
||||
%token <ivalue> TYPEDEF
|
||||
%token <type> TYPE_INT TYPE_UNSIGNED TYPE_SHORT TYPE_LONG TYPE_FLOAT TYPE_DOUBLE TYPE_CHAR TYPE_WCHAR TYPE_VOID TYPE_SIGNED TYPE_BOOL TYPE_COMPLEX TYPE_TYPEDEF TYPE_RAW TYPE_NON_ISO_INT8 TYPE_NON_ISO_INT16 TYPE_NON_ISO_INT32 TYPE_NON_ISO_INT64
|
||||
%token LPAREN RPAREN COMMA SEMI EXTERN INIT LBRACE RBRACE PERIOD
|
||||
|
|
@ -5547,6 +5547,7 @@ exprnum : NUM_INT { $$ = $1; }
|
|||
| NUM_ULONG { $$ = $1; }
|
||||
| NUM_LONGLONG { $$ = $1; }
|
||||
| NUM_ULONGLONG { $$ = $1; }
|
||||
| NUM_BOOL { $$ = $1; }
|
||||
;
|
||||
|
||||
exprcompound : expr PLUS expr {
|
||||
|
|
@ -5591,28 +5592,28 @@ exprcompound : expr PLUS expr {
|
|||
}
|
||||
| expr LAND expr {
|
||||
$$.val = NewStringf("%s&&%s",$1.val,$3.val);
|
||||
$$.type = T_INT;
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr LOR expr {
|
||||
$$.val = NewStringf("%s||%s",$1.val,$3.val);
|
||||
$$.type = T_INT;
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr EQUALTO expr {
|
||||
$$.val = NewStringf("%s==%s",$1.val,$3.val);
|
||||
$$.type = T_INT;
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr NOTEQUALTO expr {
|
||||
$$.val = NewStringf("%s!=%s",$1.val,$3.val);
|
||||
$$.type = T_INT;
|
||||
$$.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 SWIG_LT %s", $1.val, $3.val);
|
||||
$$.type = T_INT;
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr LESSTHAN expr {
|
||||
$$.val = NewStringf("%s SWIG_GT %s", $1.val, $3.val);
|
||||
$$.type = T_INT;
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
*/
|
||||
| expr GREATERTHANOREQUALTO expr {
|
||||
|
|
@ -5620,11 +5621,11 @@ exprcompound : expr PLUS expr {
|
|||
* loop somewhere in the type system. Just workaround for now
|
||||
* - SWIG_GE is defined in swiglabels.swg. */
|
||||
$$.val = NewStringf("%s SWIG_GE %s", $1.val, $3.val);
|
||||
$$.type = T_INT;
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr LESSTHANOREQUALTO expr {
|
||||
$$.val = NewStringf("%s SWIG_LE %s", $1.val, $3.val);
|
||||
$$.type = T_INT;
|
||||
$$.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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue