mirror of https://github.com/swig/swig
Add support for the <=> operator (C++20)
This commit is contained in:
parent
36310c04e5
commit
cb887ed2d4
|
@ -108,6 +108,7 @@
|
|||
%define SWIGWARN_IGNORE_OPERATOR_NEWARR_MSG "394:operator new[] ignored" %enddef
|
||||
%define SWIGWARN_IGNORE_OPERATOR_DELARR_MSG "395:operator delete[] ignored" %enddef
|
||||
%define SWIGWARN_IGNORE_OPERATOR_REF_MSG "396:operator*() ignored" %enddef
|
||||
%define SWIGWARN_IGNORE_OPERATOR_LTEQUALGT_MSG "397:operator<=> ignored" %enddef
|
||||
|
||||
#define %ignoreoperator(Oper) %ignorewarn(SWIGWARN_IGNORE_OPERATOR_##Oper##_MSG)
|
||||
|
||||
|
|
|
@ -331,6 +331,8 @@ static int yylook(void) {
|
|||
return COLON;
|
||||
case SWIG_TOKEN_DCOLONSTAR:
|
||||
return DSTAR;
|
||||
case SWIG_TOKEN_LTEQUALGT:
|
||||
return LESSEQUALGREATER;
|
||||
|
||||
case SWIG_TOKEN_DCOLON:
|
||||
{
|
||||
|
|
|
@ -1626,7 +1626,7 @@ static String *add_qualifier_to_declarator(SwigType *type, SwigType *qualifier)
|
|||
%token TYPEMAP EXCEPT ECHO APPLY CLEAR SWIGTEMPLATE FRAGMENT
|
||||
%token WARN
|
||||
%token LESSTHAN GREATERTHAN DELETE_KW DEFAULT
|
||||
%token LESSTHANOREQUALTO GREATERTHANOREQUALTO EQUALTO NOTEQUALTO
|
||||
%token LESSTHANOREQUALTO GREATERTHANOREQUALTO EQUALTO NOTEQUALTO LESSEQUALGREATER
|
||||
%token ARROW
|
||||
%token QUESTIONMARK
|
||||
%token TYPES PARMS
|
||||
|
@ -1647,7 +1647,7 @@ static String *add_qualifier_to_declarator(SwigType *type, SwigType *qualifier)
|
|||
%left XOR
|
||||
%left AND
|
||||
%left EQUALTO NOTEQUALTO
|
||||
%left GREATERTHAN LESSTHAN GREATERTHANOREQUALTO LESSTHANOREQUALTO
|
||||
%left GREATERTHAN LESSTHAN GREATERTHANOREQUALTO LESSTHANOREQUALTO LESSEQUALGREATER
|
||||
%left LSHIFT RSHIFT
|
||||
%left PLUS MINUS
|
||||
%left STAR SLASH MODULO
|
||||
|
@ -6844,6 +6844,10 @@ exprcompound : expr PLUS expr {
|
|||
$$.val = NewStringf("%s <= %s", COMPOUND_EXPR_VAL($1), COMPOUND_EXPR_VAL($3));
|
||||
$$.type = cparse_cplusplus ? T_BOOL : T_INT;
|
||||
}
|
||||
| expr LESSEQUALGREATER expr {
|
||||
$$.val = NewStringf("%s <=> %s", COMPOUND_EXPR_VAL($1), COMPOUND_EXPR_VAL($3));
|
||||
$$.type = T_BOOL;
|
||||
}
|
||||
| expr QUESTIONMARK expr COLON expr %prec QUESTIONMARK {
|
||||
$$.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
|
||||
|
|
|
@ -147,6 +147,7 @@
|
|||
#define WARN_IGNORE_OPERATOR_NEWARR 394 /* new [] */
|
||||
#define WARN_IGNORE_OPERATOR_DELARR 395 /* delete [] */
|
||||
#define WARN_IGNORE_OPERATOR_REF 396 /* operator *() */
|
||||
#define WARN_IGNORE_OPERATOR_LTEQUALGT 397 /* <=> */
|
||||
|
||||
/* please leave 350-399 free for WARN_IGNORE_OPERATOR_* */
|
||||
|
||||
|
|
|
@ -893,8 +893,18 @@ static int look(Scanner *s) {
|
|||
}
|
||||
if (c == '<')
|
||||
state = 240;
|
||||
else if (c == '=')
|
||||
return SWIG_TOKEN_LTEQUAL;
|
||||
else if (c == '=') {
|
||||
if ((c = nextchar(s)) == 0) {
|
||||
brackets_increment(s);
|
||||
return SWIG_TOKEN_LTEQUAL;
|
||||
} else if (c == '>') { /* Spaceship operator */
|
||||
return SWIG_TOKEN_LTEQUALGT;
|
||||
} else {
|
||||
retract(s, 1);
|
||||
brackets_increment(s);
|
||||
return SWIG_TOKEN_LTEQUAL;
|
||||
}
|
||||
}
|
||||
else {
|
||||
retract(s, 1);
|
||||
brackets_increment(s);
|
||||
|
|
|
@ -116,3 +116,4 @@ extern void Scanner_locator(Scanner *, String *loc);
|
|||
#define SWIG_TOKEN_MODEQUAL 134 /* %= */
|
||||
#define SWIG_TOKEN_ARROW 135 /* -> */
|
||||
#define SWIG_TOKEN_ARROWSTAR 136 /* ->* */
|
||||
#define SWIG_TOKEN_LTEQUALGT 137 /* <=> */
|
||||
|
|
Loading…
Reference in New Issue