1
0
Fork 0
forked from fte/fteqw

Attempting to reduce the absurdity of ent.field[idx]=foo in fteqcc.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3524 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2010-03-26 03:29:44 +00:00
parent e220534bc1
commit d0d380a19a

View file

@ -4052,7 +4052,7 @@ PR_ParseValue
Returns the global ofs for the current token Returns the global ofs for the current token
============ ============
*/ */
QCC_def_t *QCC_PR_ParseValue (QCC_type_t *assumeclass) QCC_def_t *QCC_PR_ParseValue (QCC_type_t *assumeclass, pbool allowarrayassign)
{ {
QCC_def_t *ao=NULL; //arrayoffset QCC_def_t *ao=NULL; //arrayoffset
QCC_def_t *d, *nd, *od; QCC_def_t *d, *nd, *od;
@ -4352,7 +4352,7 @@ reloop:
if (d->scope) if (d->scope)
QCC_PR_ParseError(0, "Scoped array without specific engine support"); QCC_PR_ParseError(0, "Scoped array without specific engine support");
if (QCC_PR_CheckToken("=")) if (allowarrayassign && QCC_PR_CheckToken("="))
{ {
QCC_def_t *args[2]; QCC_def_t *args[2];
@ -4645,7 +4645,7 @@ reloop:
QCC_PR_Expect(")"); QCC_PR_Expect(")");
} }
else else
field = QCC_PR_ParseValue(d->type); field = QCC_PR_ParseValue(d->type, false);
if (field->type->type == ev_field) if (field->type->type == ev_field)
{ {
if (!field->type->aux_type) if (!field->type->aux_type)
@ -4980,7 +4980,7 @@ QCC_def_t *QCC_PR_Term (void)
return e; return e;
} }
} }
return QCC_PR_ParseValue (pr_classtype); return QCC_PR_ParseValue (pr_classtype, true);
} }
@ -6529,7 +6529,7 @@ void QCC_PR_ParseAsm(void)
{ {
patch1 = &statements[numstatements]; patch1 = &statements[numstatements];
a = QCC_PR_ParseValue(pr_classtype); a = QCC_PR_ParseValue(pr_classtype, false);
QCC_PR_Statement3(&pr_opcodes[op], a, NULL, NULL, true); QCC_PR_Statement3(&pr_opcodes[op], a, NULL, NULL, true);
if (pr_token_type == tt_name) if (pr_token_type == tt_name)
@ -6548,8 +6548,8 @@ void QCC_PR_ParseAsm(void)
{ {
patch1 = &statements[numstatements]; patch1 = &statements[numstatements];
a = QCC_PR_ParseValue(pr_classtype); a = QCC_PR_ParseValue(pr_classtype, false);
b = QCC_PR_ParseValue(pr_classtype); b = QCC_PR_ParseValue(pr_classtype, false);
QCC_PR_Statement3(&pr_opcodes[op], a, b, NULL, true); QCC_PR_Statement3(&pr_opcodes[op], a, b, NULL, true);
if (pr_token_type == tt_name) if (pr_token_type == tt_name)
@ -6568,15 +6568,15 @@ void QCC_PR_ParseAsm(void)
else else
{ {
if (pr_opcodes[op].type_a != &type_void) if (pr_opcodes[op].type_a != &type_void)
a = QCC_PR_ParseValue(pr_classtype); a = QCC_PR_ParseValue(pr_classtype, false);
else else
a=NULL; a=NULL;
if (pr_opcodes[op].type_b != &type_void) if (pr_opcodes[op].type_b != &type_void)
b = QCC_PR_ParseValue(pr_classtype); b = QCC_PR_ParseValue(pr_classtype, false);
else else
b=NULL; b=NULL;
if (pr_opcodes[op].associative==ASSOC_LEFT && pr_opcodes[op].type_c != &type_void) if (pr_opcodes[op].associative==ASSOC_LEFT && pr_opcodes[op].type_c != &type_void)
c = QCC_PR_ParseValue(pr_classtype); c = QCC_PR_ParseValue(pr_classtype, false);
else else
c=NULL; c=NULL;