Add binary not operator to inline assembler operand parsing
This commit is contained in:
parent
41ba2e73f2
commit
46b52a57f7
|
@ -10467,6 +10467,22 @@ Expression* Parser::ParseAssemblerBaseOperand(Declaration* pcasm, int pcoffset)
|
||||||
mErrors->Error(exp->mLocation, EERR_INCOMPATIBLE_OPERATOR, "Cannot negate expression");
|
mErrors->Error(exp->mLocation, EERR_INCOMPATIBLE_OPERATOR, "Cannot negate expression");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TK_BINARY_NOT:
|
||||||
|
mScanner->NextToken();
|
||||||
|
exp = ParseAssemblerBaseOperand(pcasm, pcoffset);
|
||||||
|
if (exp->mType == EX_CONSTANT && exp->mDecValue->mType == DT_CONST_INTEGER)
|
||||||
|
{
|
||||||
|
dec = new Declaration(mScanner->mLocation, DT_CONST_INTEGER);
|
||||||
|
dec->mInteger = ~exp->mDecValue->mInteger;
|
||||||
|
dec->mBase = TheUnsignedIntTypeDeclaration;
|
||||||
|
exp = new Expression(mScanner->mLocation, EX_CONSTANT);
|
||||||
|
exp->mDecValue = dec;
|
||||||
|
exp->mDecType = dec->mBase;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mErrors->Error(exp->mLocation, EERR_INCOMPATIBLE_OPERATOR, "Cannot negate expression");
|
||||||
|
break;
|
||||||
|
|
||||||
case TK_MUL:
|
case TK_MUL:
|
||||||
mScanner->NextToken();
|
mScanner->NextToken();
|
||||||
exp = new Expression(mScanner->mLocation, EX_CONSTANT);
|
exp = new Expression(mScanner->mLocation, EX_CONSTANT);
|
||||||
|
|
Loading…
Reference in New Issue