@@ -39,10 +39,11 @@ typedef struct {
39
39
#define EXPR_OP 3
40
40
#define EXPR_GROUP 4
41
41
42
- /* Special token value used here to distinguish from SWIG_TOKEN_MINUS
43
- * (which we use here for a two argument minus ).
42
+ /* Special token values used here to distinguish from SWIG_TOKEN_MINUS
43
+ * and SWIG_TOKEN_PLUS (which we use here for a two argument versions ).
44
44
*/
45
45
#define OP_UMINUS 100
46
+ #define OP_UPLUS 101
46
47
47
48
static exprval stack [256 ]; /* Parsing stack */
48
49
static int sp = 0 ; /* Stack pointer */
@@ -54,6 +55,7 @@ static const char *errmsg = 0; /* Parsing error */
54
55
static void init_precedence () {
55
56
prec [SWIG_TOKEN_NOT ] = 10 ;
56
57
prec [OP_UMINUS ] = 10 ;
58
+ prec [OP_UPLUS ] = 10 ;
57
59
prec [SWIG_TOKEN_STAR ] = 20 ;
58
60
prec [SWIG_TOKEN_SLASH ] = 20 ;
59
61
prec [SWIG_TOKEN_PERCENT ] = 20 ;
@@ -78,7 +80,8 @@ static void init_precedence() {
78
80
79
81
#define UNARY_OP (token ) (((token) == SWIG_TOKEN_NOT) || \
80
82
((token) == SWIG_TOKEN_LNOT) || \
81
- ((token) == OP_UMINUS))
83
+ ((token) == OP_UMINUS) || \
84
+ ((token) == OP_UPLUS))
82
85
83
86
/* Reduce a single operator on the stack */
84
87
/* return 0 on failure, 1 on success */
@@ -202,6 +205,10 @@ static int reduce_op() {
202
205
stack [sp - 1 ].value = - stack [sp ].value ;
203
206
sp -- ;
204
207
break ;
208
+ case OP_UPLUS :
209
+ stack [sp - 1 ].value = stack [sp ].value ;
210
+ sp -- ;
211
+ break ;
205
212
case SWIG_TOKEN_SLASH :
206
213
if (stack [sp ].value != 0 ) {
207
214
stack [sp - 2 ].value = stack [sp - 2 ].value / stack [sp ].value ;
@@ -314,10 +321,11 @@ int Preprocessor_expr(DOH *s, int *error) {
314
321
stack [sp ].value = (long ) strtol (c , 0 , 0 );
315
322
stack [sp ].svalue = 0 ;
316
323
stack [sp ].op = EXPR_VALUE ;
317
- } else if (token == SWIG_TOKEN_PLUS ) {
318
- } else if ((token == SWIG_TOKEN_MINUS ) || (token == SWIG_TOKEN_LNOT ) || (token == SWIG_TOKEN_NOT )) {
324
+ } else if ((token == SWIG_TOKEN_MINUS ) || (token == SWIG_TOKEN_PLUS ) || (token == SWIG_TOKEN_LNOT ) || (token == SWIG_TOKEN_NOT )) {
319
325
if (token == SWIG_TOKEN_MINUS )
320
326
token = OP_UMINUS ;
327
+ else if (token == SWIG_TOKEN_PLUS )
328
+ token = OP_UPLUS ;
321
329
stack [sp ].value = token ;
322
330
stack [sp ].op = EXPR_OP ;
323
331
sp ++ ;
0 commit comments