|
@@ -323,6 +323,7 @@ typedef struct {
|
|
T_PERCENTASSIGN,
|
|
T_PERCENTASSIGN,
|
|
T_STARSTARASSIGN,
|
|
T_STARSTARASSIGN,
|
|
T_BARASSIGN,
|
|
T_BARASSIGN,
|
|
|
|
+ T_ANDASSIGN,
|
|
T_BARBAR,
|
|
T_BARBAR,
|
|
T_ANDAND,
|
|
T_ANDAND,
|
|
T_STARSTAR,
|
|
T_STARSTAR,
|
|
@@ -655,6 +656,8 @@ token_t *next_token(char *source, size_t *pos) {
|
|
return TK(STARSTARASSIGN);
|
|
return TK(STARSTARASSIGN);
|
|
else if (strncmp(&source[*pos], "|=", 2) == 0 && ++(*pos) && ++(*pos))
|
|
else if (strncmp(&source[*pos], "|=", 2) == 0 && ++(*pos) && ++(*pos))
|
|
return TK(BARASSIGN);
|
|
return TK(BARASSIGN);
|
|
|
|
+ else if (strncmp(&source[*pos], "&=", 2) == 0 && ++(*pos) && ++(*pos))
|
|
|
|
+ return TK(ANDASSIGN);
|
|
else if (strncmp(&source[*pos], "||", 2) == 0 && ++(*pos) && ++(*pos))
|
|
else if (strncmp(&source[*pos], "||", 2) == 0 && ++(*pos) && ++(*pos))
|
|
return TK(BARBAR);
|
|
return TK(BARBAR);
|
|
else if (strncmp(&source[*pos], "&&", 2) == 0 && ++(*pos) && ++(*pos))
|
|
else if (strncmp(&source[*pos], "&&", 2) == 0 && ++(*pos) && ++(*pos))
|
|
@@ -793,6 +796,7 @@ struct _node_t {
|
|
N_ASSIGN_MOD,
|
|
N_ASSIGN_MOD,
|
|
N_ASSIGN_POW,
|
|
N_ASSIGN_POW,
|
|
N_ASSIGN_BOR,
|
|
N_ASSIGN_BOR,
|
|
|
|
+ N_ASSIGN_BAND,
|
|
|
|
|
|
N_EQUALS,
|
|
N_EQUALS,
|
|
N_NOTEQUALS,
|
|
N_NOTEQUALS,
|
|
@@ -2704,6 +2708,7 @@ void compile_node(buffer_t *gbuf, buffer_t *buf, list_t *ctx, stack_t *lstk, lis
|
|
case N_ASSIGN_MOD: COMPASSIGN(node->a, "mod", compile_node(gbuf, buf, ctx, lstk, lbl, node->b)); break;
|
|
case N_ASSIGN_MOD: COMPASSIGN(node->a, "mod", compile_node(gbuf, buf, ctx, lstk, lbl, node->b)); break;
|
|
case N_ASSIGN_POW: COMPASSIGN(node->a, "pow", compile_node(gbuf, buf, ctx, lstk, lbl, node->b)); break;
|
|
case N_ASSIGN_POW: COMPASSIGN(node->a, "pow", compile_node(gbuf, buf, ctx, lstk, lbl, node->b)); break;
|
|
case N_ASSIGN_BOR: COMPASSIGN(node->a, "bor", compile_node(gbuf, buf, ctx, lstk, lbl, node->b)); break;
|
|
case N_ASSIGN_BOR: COMPASSIGN(node->a, "bor", compile_node(gbuf, buf, ctx, lstk, lbl, node->b)); break;
|
|
|
|
+ case N_ASSIGN_BAND: COMPASSIGN(node->a, "band", compile_node(gbuf, buf, ctx, lstk, lbl, node->b)); break;
|
|
|
|
|
|
case N_INC:
|
|
case N_INC:
|
|
COMPASSIGN(node->a, "add", EMIT("state->one"));
|
|
COMPASSIGN(node->a, "add", EMIT("state->one"));
|