mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2024-11-24 04:41:25 +00:00
operators &= and |=
This commit is contained in:
parent
553f3df5df
commit
122e80cc4d
3 changed files with 24 additions and 0 deletions
17
parser.c
17
parser.c
|
@ -1015,6 +1015,23 @@ static bool parser_sy_pop(parser_t *parser, shunt *sy)
|
|||
return false;
|
||||
};
|
||||
break;
|
||||
case opid2('&','='):
|
||||
case opid2('|','='):
|
||||
if (NotSameType(TYPE_FLOAT)) {
|
||||
ast_type_to_string(exprs[0], ty1, sizeof(ty1));
|
||||
ast_type_to_string(exprs[1], ty2, sizeof(ty2));
|
||||
parseerror(parser, "invalid types used in expression: %s and %s",
|
||||
ty1, ty2);
|
||||
return false;
|
||||
}
|
||||
if (ast_istype(exprs[0], ast_entfield))
|
||||
assignop = type_storep_instr[exprs[0]->expression.vtype];
|
||||
else
|
||||
assignop = type_store_instr[exprs[0]->expression.vtype];
|
||||
out = (ast_expression*)ast_binstore_new(ctx, assignop,
|
||||
(op->id == opid2('&','=') ? INSTR_BITAND : INSTR_BITOR),
|
||||
exprs[0], exprs[1]);
|
||||
break;
|
||||
}
|
||||
#undef NotSameType
|
||||
|
||||
|
|
|
@ -51,4 +51,9 @@ void main() {
|
|||
v = '3 4 5';
|
||||
print(vtos(v *= 2), " = '6 8 10'\n");
|
||||
print(vtos(v /= 2), " = '3 4 5'\n");
|
||||
|
||||
// bit compounds
|
||||
a = 1;
|
||||
print(ftos(a |= 2), " = 3\n");
|
||||
print(ftos(a &= 6), " = 2\n");
|
||||
}
|
||||
|
|
|
@ -16,3 +16,5 @@ M: 6 = 6
|
|||
M: 3 = 3
|
||||
M: '6 8 10' = '6 8 10'
|
||||
M: '3 4 5' = '3 4 5'
|
||||
M: 3 = 3
|
||||
M: 2 = 2
|
||||
|
|
Loading…
Reference in a new issue