aboutsummaryrefslogtreecommitdiffstats
path: root/awkgram.y
diff options
context:
space:
mode:
Diffstat (limited to 'awkgram.y')
-rw-r--r--awkgram.y27
1 files changed, 14 insertions, 13 deletions
diff --git a/awkgram.y b/awkgram.y
index 68647229..9786ca7a 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -650,7 +650,7 @@ statement
$$ = list_prepend(ip, $1);
bcfree($4);
} /* else
- $1 and $4 are NULLs */
+ $1 and $4 are NULLs */
}
| LEX_FOR '(' NAME LEX_IN simple_variable r_paren opt_nls statement
{
@@ -852,7 +852,7 @@ non_compound_stmt
(void) list_prepend($$, instruction(Op_push_i));
$$->nexti->memory = dupnode(Nnull_string);
} else {
- if (do_optimize > 1
+ if (do_optimize
&& $3->lasti->opcode == Op_func_call
&& strcmp($3->lasti->func_name, in_function) == 0
) {
@@ -1356,7 +1356,7 @@ common_exp
*/
}
- if (do_optimize > 1
+ if (do_optimize
&& $1->nexti == $1->lasti && $1->nexti->opcode == Op_push_i
&& $2->nexti == $2->lasti && $2->nexti->opcode == Op_push_i
) {
@@ -1494,7 +1494,7 @@ non_post_simp_exp
$$ = list_append(list_append(list_create($1),
instruction(Op_field_spec)), $2);
} else {
- if (do_optimize > 1 && $2->nexti == $2->lasti
+ if (do_optimize && $2->nexti == $2->lasti
&& $2->nexti->opcode == Op_push_i
&& ($2->nexti->memory->flags & (MPFN|MPZN)) == 0
) {
@@ -4157,7 +4157,7 @@ mk_function(INSTRUCTION *fi, INSTRUCTION *def)
thisfunc = fi->func_body;
assert(thisfunc != NULL);
- if (do_optimize > 1 && def->lasti->opcode == Op_pop) {
+ if (do_optimize && def->lasti->opcode == Op_pop) {
/* tail call which does not return any value. */
INSTRUCTION *t;
@@ -4685,7 +4685,7 @@ mk_binary(INSTRUCTION *s1, INSTRUCTION *s2, INSTRUCTION *op)
if (s2->lasti == ip2 && ip2->opcode == Op_push_i) {
/* do any numeric constant folding */
ip1 = s1->nexti;
- if (do_optimize > 1
+ if (do_optimize
&& ip1 == s1->lasti && ip1->opcode == Op_push_i
&& (ip1->memory->flags & (MPFN|MPZN|STRCUR|STRING)) == 0
&& (ip2->memory->flags & (MPFN|MPZN|STRCUR|STRING)) == 0
@@ -5028,8 +5028,13 @@ mk_assignment(INSTRUCTION *lhs, INSTRUCTION *rhs, INSTRUCTION *op)
case Op_push_array:
tp->opcode = Op_push_lhs;
break;
+ case Op_field_assign:
+ yyerror(_("cannot assign a value to the result of a field post-increment expression"));
+ break;
default:
- cant_happen();
+ yyerror(_("invalid target of assignment (opcode %s)"),
+ opcode2str(tp->opcode));
+ break;
}
tp->do_reference = (op->opcode != Op_assign); /* check for uninitialized reference */
@@ -5099,10 +5104,8 @@ optimize_assignment(INSTRUCTION *exp)
i2 = NULL;
i1 = exp->lasti;
- if ( ! do_optimize
- || ( i1->opcode != Op_assign
- && i1->opcode != Op_field_assign)
- )
+ if ( i1->opcode != Op_assign
+ && i1->opcode != Op_field_assign)
return list_append(exp, instruction(Op_pop));
for (i2 = exp->nexti; i2 != i1; i2 = i2->nexti) {
@@ -5392,10 +5395,8 @@ add_lint(INSTRUCTION *list, LINTTYPE linttype)
;
if (do_lint) { /* compile-time warning */
-#ifndef NO_LINT
if (isnoeffect(ip->opcode))
lintwarn_ln(ip->source_line, ("statement may have no effect"));
-#endif
}
if (ip->opcode == Op_push) { /* run-time warning */