return false;
}
out = (ast_expression*)ast_unary_new(ctx, type_not_instr[exprs[i]->expression.vtype], exprs[i]);
- if (!out)
- break;
+ if (!out) break;
+ out = (ast_expression*)ast_unary_new(ctx, INSTR_NOT_F, out);
+ if (!out) break;
exprs[i] = out; out = NULL;
+ if (OPTS_FLAG(PERL_LOGIC)) {
+ }
}
- if (OPTS_FLAG(PERL_LOGIC))
- break;
}
}
out = (ast_expression*)ast_binary_new(ctx, generated_op, exprs[0], exprs[1]);
}
ifnot = !ifnot;
}
- else if (OPTS_FLAG(CORRECT_LOGIC)) {
- /* everything must use a NOT_ */
+ if (OPTS_FLAG(CORRECT_LOGIC) &&
+ !(cond->expression.vtype == TYPE_STRING && OPTS_FLAG(TRUE_EMPTY_STRINGS)))
+ {
+ /* non-floats need to use NOT; except for strings on -ftrue-empty-strings */
unary = (ast_unary*)cond;
if (!ast_istype(cond, ast_unary) || unary->op < INSTR_NOT_F || unary->op > INSTR_NOT_FNC)
{
if (!parse_statement_or_block(parser, &ontrue))
goto onerr;
- cond = process_condition(parser, cond, &ifnot);
- if (!cond)
- goto onerr;
+ if (cond) {
+ cond = process_condition(parser, cond, &ifnot);
+ if (!cond)
+ goto onerr;
+ }
aloop = ast_loop_new(ctx, initexpr, cond, ifnot, NULL, false, increment, ontrue);
*out = (ast_expression*)aloop;