inside_negation; $context->inside_negation = !$inside_negation; $result = ExpressionAnalyzer::analyze($statements_analyzer, $stmt->expr, $context); $context->inside_negation = $inside_negation; $expr_type = $statements_analyzer->node_data->getType($stmt->expr); if ($expr_type) { if ($expr_type->isAlwaysTruthy()) { $stmt_type = new TFalse($expr_type->from_docblock); } elseif ($expr_type->isAlwaysFalsy()) { $stmt_type = new TTrue($expr_type->from_docblock); } else { $stmt_type = new TBool(); } $stmt_type = new Union([$stmt_type], [ 'parent_nodes' => $expr_type->parent_nodes, ]); } else { $stmt_type = Type::getBool(); } $statements_analyzer->node_data->setType($stmt, $stmt_type); return $result; } }