mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2024-11-24 04:41:25 +00:00
move the member-of check for '.' to after applying the previous dot operators so we don't need parens around 'a.b' of 'a.b.c = x'
This commit is contained in:
parent
0d4e6a2ee8
commit
d88e3e8f24
2 changed files with 16 additions and 16 deletions
|
@ -22,7 +22,7 @@ void() main = {
|
|||
pawn2 = spawn();
|
||||
|
||||
pawn.other = pawn2;
|
||||
(pawn.other).vis = 0;
|
||||
pawn.other.vis = 0;
|
||||
|
||||
if (!visible(pawn.other))
|
||||
print("Yes\n");
|
||||
|
|
30
parser.c
30
parser.c
|
@ -1167,6 +1167,21 @@ static ast_expression* parser_expression_leave(parser_t *parser, bool stopatcomm
|
|||
if (op->id == opid1(',') && !parens && stopatcomma)
|
||||
break;
|
||||
|
||||
if (sy.ops_count && !sy.ops[sy.ops_count-1].paren)
|
||||
olast = &operators[sy.ops[sy.ops_count-1].etype-1];
|
||||
|
||||
while (olast && (
|
||||
(op->prec < olast->prec) ||
|
||||
(op->assoc == ASSOC_LEFT && op->prec <= olast->prec) ) )
|
||||
{
|
||||
if (!parser_sy_pop(parser, &sy))
|
||||
goto onerr;
|
||||
if (sy.ops_count && !sy.ops[sy.ops_count-1].paren)
|
||||
olast = &operators[sy.ops[sy.ops_count-1].etype-1];
|
||||
else
|
||||
olast = NULL;
|
||||
}
|
||||
|
||||
if (op->id == opid1('.')) {
|
||||
/* for gmqcc standard: open up the namespace of the previous type */
|
||||
ast_expression *prevex = sy.out[sy.out_count-1].out;
|
||||
|
@ -1185,21 +1200,6 @@ static ast_expression* parser_expression_leave(parser_t *parser, bool stopatcomm
|
|||
gotmemberof = true;
|
||||
}
|
||||
|
||||
if (sy.ops_count && !sy.ops[sy.ops_count-1].paren)
|
||||
olast = &operators[sy.ops[sy.ops_count-1].etype-1];
|
||||
|
||||
while (olast && (
|
||||
(op->prec < olast->prec) ||
|
||||
(op->assoc == ASSOC_LEFT && op->prec <= olast->prec) ) )
|
||||
{
|
||||
if (!parser_sy_pop(parser, &sy))
|
||||
goto onerr;
|
||||
if (sy.ops_count && !sy.ops[sy.ops_count-1].paren)
|
||||
olast = &operators[sy.ops[sy.ops_count-1].etype-1];
|
||||
else
|
||||
olast = NULL;
|
||||
}
|
||||
|
||||
if (op->id == opid1('(')) {
|
||||
if (wantop) {
|
||||
DEBUGSHUNTDO(printf("push (\n"));
|
||||
|
|
Loading…
Reference in a new issue