mirror of
https://github.com/nzp-team/fteqw.git
synced 2025-02-17 01:11:18 +00:00
The ternary operator.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2037 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
8b960915b5
commit
7d09a3efdc
1 changed files with 20 additions and 0 deletions
|
@ -4196,6 +4196,26 @@ QCC_def_t *QCC_PR_Expression (int priority)
|
||||||
qcc_usefulstatement=true;
|
qcc_usefulstatement=true;
|
||||||
return QCC_PR_ParseFunctionCall (e);
|
return QCC_PR_ParseFunctionCall (e);
|
||||||
}
|
}
|
||||||
|
if (priority == 1 && QCC_PR_CheckToken ("?"))
|
||||||
|
{
|
||||||
|
QCC_dstatement32_t *fromj, *elsej;
|
||||||
|
QCC_PR_Statement(&pr_opcodes[OP_IFNOT], e, NULL, fromj);
|
||||||
|
e = QCC_PR_Expression(TOP_PRIORITY);
|
||||||
|
e2 = QCC_GetTemp(e->type);
|
||||||
|
QCC_PR_Statement(&pr_opcodes[(e2->size>=3)?OP_STORE_V:OP_STORE_F], e, e2);
|
||||||
|
|
||||||
|
QCC_PR_Expect(":");
|
||||||
|
QCC_PR_Statement(&pr_opcodes[OP_GOTO], NULL, NULL, elsej);
|
||||||
|
fromj->b = &statements[numstatements] - fromj;
|
||||||
|
e = QCC_PR_Expression(TOP_PRIORITY);
|
||||||
|
|
||||||
|
if (typecmp(e, e2) != 0)
|
||||||
|
QCC_PR_ParseError(0, "Ternary operator with mismatching types\n")
|
||||||
|
QCC_PR_Statement(&pr_opcodes[(e2->size>=3)?OP_STORE_V:OP_STORE_F], e, e2);
|
||||||
|
|
||||||
|
elsej->a = &statements[numstatements] - elsej;
|
||||||
|
return e2;
|
||||||
|
}
|
||||||
|
|
||||||
opnum=0;
|
opnum=0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue