libutap
0.93
Uppaal Timed Automata Parser
|
A visitor which type checks the system it visits. More...
#include <typechecker.h>
Additional Inherited Members | |
![]() | |
virtual int32_t | visitStatement (Statement *stat) |
A visitor which type checks the system it visits.
The type checker can only visit the system given in the constructor. The type checker must not be constructed before the system has been parsed.
Definition at line 57 of file typechecker.h.
TypeChecker::TypeChecker | ( | TimedAutomataSystem * | system, |
bool | refinement = false |
||
) |
Definition at line 393 of file typechecker.cpp.
References UTAP::TimedAutomataSystem::accept(), UTAP::TimedAutomataSystem::addError(), UTAP::TimedAutomataSystem::addWarning(), UTAP::Constants::ARRAY, UTAP::Constants::BOOL, UTAP::Constants::BROADCAST, UTAP::expression_t::changesAnyVariable(), checkExpression(), UTAP::expression_t::collectPossibleReads(), UTAP::Constants::COMMA, UTAP::Constants::COMMITTED, UTAP::Constants::CONSTANT, UTAP::CompileTimeComputableValues::contains(), UTAP::Constants::DOUBLE, UTAP::Constants::EXIT, UTAP::TimedAutomataSystem::getAfterUpdate(), UTAP::type_t::getArraySize(), UTAP::TimedAutomataSystem::getBeforeUpdate(), UTAP::expression_t::getKind(), UTAP::type_t::getKind(), UTAP::expression_t::getPosition(), UTAP::type_t::getRange(), UTAP::type_t::getSub(), UTAP::Constants::HYBRID, initialisable(), UTAP::Constants::INT, UTAP::type_t::is(), UTAP::type_t::isArray(), UTAP::type_t::isChannel(), UTAP::type_t::isClock(), UTAP::type_t::isDouble(), isInteger(), UTAP::type_t::isInteger(), UTAP::type_t::isIntegral(), UTAP::type_t::isLocation(), UTAP::type_t::isRecord(), UTAP::type_t::isScalar(), UTAP::Constants::LABEL, UTAP::Constants::RANGE, UTAP::Constants::RECORD, UTAP::Constants::REF, UTAP::type_t::size(), UTAP::type_t::stripArray(), UTAP::Constants::SYSTEM_META, and UTAP::Constants::URGENT.
|
inlineoverride |
Definition at line 90 of file typechecker.h.
References UTAP::unused, UTAP::SystemVisitor::visitCondition(), UTAP::SystemVisitor::visitEdge(), UTAP::SystemVisitor::visitFunction(), UTAP::SystemVisitor::visitGanttChart(), UTAP::CompileTimeComputableValues::visitInstance(), UTAP::SystemVisitor::visitInstanceLine(), UTAP::SystemVisitor::visitIODecl(), UTAP::SystemVisitor::visitMessage(), UTAP::SystemVisitor::visitProcess(), UTAP::SystemVisitor::visitProgressMeasure(), UTAP::SystemVisitor::visitState(), UTAP::SystemVisitor::visitSystemAfter(), UTAP::SystemVisitor::visitTemplateAfter(), UTAP::SystemVisitor::visitTemplateBefore(), UTAP::SystemVisitor::visitUpdate(), and UTAP::CompileTimeComputableValues::visitVariable().
bool TypeChecker::checkDynamicExpressions | ( | Statement * | stat | ) |
Definition at line 3410 of file typechecker.cpp.
References UTAP::Statement::accept(), UTAP::Constants::BOOL, UTAP::expression_t::changesAnyVariable(), UTAP::Constants::DOUBLEINVGUARD, UTAP::expression_t::getKind(), UTAP::expression_t::getType(), UTAP::expression_t::getValue(), UTAP::type_t::is(), isClock(), isConstantDouble(), isConstantInteger(), isConstraint(), isDoubleValue(), isIntegral(), UTAP::Constants::PROBABOX, and UTAP::Constants::PROBADIAMOND.
Referenced by visitFunction().
bool TypeChecker::checkExpression | ( | expression_t | expr | ) |
Type check an expression.
Type check and checkExpression the expression.
This function performs basic type checking of the given expression and assigns a type to every subexpression of the expression. It checks that only left-hand side values are updated, checks that functions are called with the correct arguments, checks that operators are used with the correct operands and checks that operands to assignment operators are assignment compatible. Errors are reported by calling handleError(). This function does not check/compute the range of integer expressions and thus does not produce out-of-range errors or warnings. Returns true if no type errors were found, false otherwise.
Definition at line 2108 of file typechecker.cpp.
References UTAP::Constants::A_BUCHI, UTAP::Constants::A_UNTIL, UTAP::Constants::A_WEAKUNTIL, UTAP::Constants::ABS_F, UTAP::Constants::ACOS_F, UTAP::Constants::ACOSH_F, UTAP::Constants::AF, UTAP::Constants::AG, UTAP::Constants::AG_R_Piotr, UTAP::Constants::AND, UTAP::Constants::ARRAY, UTAP::Constants::ASIN_F, UTAP::Constants::ASINH_F, UTAP::Constants::ASSAND, UTAP::Constants::ASSDIV, UTAP::Constants::ASSIGN, UTAP::Constants::ASSLSHIFT, UTAP::Constants::ASSMINUS, UTAP::Constants::ASSMOD, UTAP::Constants::ASSMULT, UTAP::Constants::ASSOR, UTAP::Constants::ASSPLUS, UTAP::Constants::ASSRSHIFT, UTAP::Constants::ASSXOR, UTAP::Constants::ATAN2_F, UTAP::Constants::ATAN_F, UTAP::Constants::ATANH_F, UTAP::Constants::BIT_AND, UTAP::Constants::BIT_LSHIFT, UTAP::Constants::BIT_OR, UTAP::Constants::BIT_RSHIFT, UTAP::Constants::BIT_XOR, UTAP::Constants::BOOL, UTAP::Constants::CBRT_F, UTAP::Constants::CEIL_F, UTAP::Constants::CHANNEL, checkIDList(), checkSpawnParameterCompatible(), UTAP::Constants::CLOCK, UTAP::Constants::COMMA, UTAP::Constants::CONSISTENCY, UTAP::Constants::CONSTRAINT, UTAP::Constants::CONTROL, UTAP::Constants::CONTROL_TOPT, UTAP::Constants::CONTROL_TOPT_DEF1, UTAP::Constants::CONTROL_TOPT_DEF2, UTAP::Constants::COPYSIGN_F, UTAP::Constants::COS_F, UTAP::Constants::COSH_F, UTAP::type_t::createPrimitive(), UTAP::Constants::DIFF, UTAP::Constants::DIV, UTAP::Constants::DOT, UTAP::Constants::DOUBLE, UTAP::Constants::DOUBLEINVGUARD, UTAP::template_t::dynamic, UTAP::Constants::EF, UTAP::Constants::EF_CONTROL, UTAP::Constants::EF_R_Piotr, UTAP::Constants::EG, UTAP::expression_t::empty(), UTAP::Constants::EQ, UTAP::Constants::ERF_F, UTAP::Constants::ERFC_F, UTAP::Constants::EXISTS, UTAP::Constants::EXIT, UTAP::Constants::EXP2_F, UTAP::Constants::EXP_F, UTAP::Constants::EXPM1_F, UTAP::Constants::FABS_F, UTAP::Constants::FDIM_F, UTAP::Constants::FINT_F, UTAP::Constants::FLOOR_F, UTAP::Constants::FMA_F, UTAP::Constants::FMAX_F, UTAP::Constants::FMIN_F, UTAP::Constants::FMOD_F, UTAP::Constants::FORALL, UTAP::Constants::FORMULA, UTAP::Constants::FPCLASSIFY_F, UTAP::Constants::FRACTION, UTAP::Constants::FUNCALL, UTAP::Constants::GE, UTAP::type_t::getArraySize(), UTAP::TimedAutomataSystem::getDynamicTemplate(), UTAP::expression_t::getKind(), UTAP::expression_t::getSize(), UTAP::frame_t::getSize(), UTAP::type_t::getSub(), UTAP::expression_t::getType(), UTAP::Constants::GT, UTAP::Constants::GUARD, UTAP::Constants::HYPOT_F, UTAP::Constants::IDENTIFIER, UTAP::Constants::ILOGB_F, UTAP::Constants::IMPLEMENTATION, UTAP::Constants::INF_VAR, UTAP::Constants::INLINEIF, UTAP::Constants::INT, UTAP::Constants::INVARIANT, UTAP::Constants::INVARIANT_WR, UTAP::type_t::isArray(), isAssignable(), isBound(), isClock(), isConstraint(), isCost(), UTAP::template_t::isDefined, isDiff(), isDoubleValue(), UTAP::Constants::ISFINITE_F, isFormula(), isGuard(), UTAP::Constants::ISINF_F, isInteger(), UTAP::type_t::isInteger(), isIntegral(), UTAP::type_t::isIntegral(), isInvariant(), isInvariantWR(), isListOfFormulas(), UTAP::Constants::ISNAN_F, UTAP::type_t::isNonConstant(), UTAP::Constants::ISNORMAL_F, isNumber(), isProcessID(), isSameScalarType(), UTAP::type_t::isScalar(), UTAP::Constants::ISUNORDERED_F, isVoid(), UTAP::Constants::LDEXP_F, UTAP::Constants::LE, UTAP::Constants::LEADSTO, UTAP::Constants::LGAMMA_F, UTAP::Constants::LIST, UTAP::Constants::LN_F, UTAP::Constants::LOG10_F, UTAP::Constants::LOG1P_F, UTAP::Constants::LOG2_F, UTAP::Constants::LOG_F, UTAP::Constants::LOGB_F, UTAP::Constants::LT, UTAP::Constants::MAX, UTAP::Constants::MIN, UTAP::Constants::MINUS, UTAP::Constants::MITLATOM, UTAP::Constants::MITLCONJ, UTAP::Constants::MITLDISJ, UTAP::Constants::MITLFORMULA, UTAP::Constants::MITLNEXT, UTAP::Constants::MITLRELEASE, UTAP::Constants::MITLUNTIL, UTAP::Constants::MOD, UTAP::Constants::MULT, UTAP::Constants::NEQ, UTAP::Constants::NEXTAFTER_F, UTAP::Constants::NOT, UTAP::Constants::NUMOF, UTAP::Constants::OR, UTAP::instance_t::parameters, UTAP::Constants::PLUS, UTAP::Constants::PMAX, UTAP::Constants::PO_CONTROL, UTAP::Constants::POSTDECREMENT, UTAP::Constants::POSTINCREMENT, UTAP::Constants::POW_F, UTAP::Constants::PREDECREMENT, UTAP::Constants::PREINCREMENT, UTAP::Constants::PROBABOX, UTAP::Constants::PROBACMP, UTAP::Constants::PROBADIAMOND, UTAP::Constants::PROBAEXP, UTAP::Constants::PROBAMINBOX, UTAP::Constants::PROBAMINDIAMOND, UTAP::Constants::PROCESS, UTAP::Constants::RANDOM_ARCSINE_F, UTAP::Constants::RANDOM_BETA_F, UTAP::Constants::RANDOM_F, UTAP::Constants::RANDOM_GAMMA_F, UTAP::Constants::RANDOM_NORMAL_F, UTAP::Constants::RANDOM_POISSON_F, UTAP::Constants::RANDOM_TRI_F, UTAP::Constants::RANDOM_WEIBULL_F, UTAP::Constants::RATE, UTAP::Constants::REFINEMENT_GE, UTAP::Constants::REFINEMENT_LE, UTAP::Constants::RESTRICT, UTAP::Constants::ROUND_F, UTAP::Constants::SCENARIO, UTAP::Constants::SCENARIO2, UTAP::expression_t::setType(), UTAP::Constants::SIGNBIT_F, UTAP::Constants::SIMULATE, UTAP::Constants::SIMULATEREACH, UTAP::Constants::SIMULATION_GE, UTAP::Constants::SIMULATION_LE, UTAP::Constants::SIN_F, UTAP::Constants::SINH_F, UTAP::type_t::size(), UTAP::Constants::SMC_CONTROL, UTAP::Constants::SPAWN, UTAP::Constants::SPECIFICATION, UTAP::Constants::SQRT_F, UTAP::Constants::SUM, UTAP::Constants::SUMDYNAMIC, UTAP::Constants::SUP_VAR, UTAP::Constants::SYNTAX_COMPOSITION, UTAP::Constants::TAN_F, UTAP::Constants::TANH_F, UTAP::Constants::TGAMMA_F, UTAP::Constants::TIOCOMPOSITION, UTAP::Constants::TIOCONJUNCTION, UTAP::Constants::TIOGRAPH, UTAP::Constants::TIOQUOTIENT, UTAP::Constants::TRUNC_F, UTAP::Constants::UNARY_MINUS, UTAP::type_t::unknown(), and UTAP::Constants::XOR.
Referenced by parseExpression(), TypeChecker(), visitAssertStatement(), visitBlockStatement(), visitCondition(), visitDoWhileStatement(), visitEdge(), visitForStatement(), visitGanttChart(), visitHybridClock(), visitIfStatement(), visitInstance(), visitIODecl(), visitMessage(), visitProgressMeasure(), visitProperty(), visitReturnStatement(), visitState(), visitSystemAfter(), visitVariable(), and visitWhileStatement().
bool UTAP::TypeChecker::checkSpawnAndExit | ( | expression_t | ) |
bool TypeChecker::checkSpawnParameterCompatible | ( | type_t | param, |
expression_t | arg | ||
) |
Definition at line 3405 of file typechecker.cpp.
Referenced by checkExpression().
|
overridevirtual |
Reimplemented from UTAP::AbstractStatementVisitor.
Definition at line 1627 of file typechecker.cpp.
References UTAP::expression_t::changesAnyVariable(), checkExpression(), and UTAP::AssertStatement::expr.
|
overridevirtual |
Reimplemented from UTAP::AbstractStatementVisitor.
Definition at line 1687 of file typechecker.cpp.
References UTAP::expression_t::changesAnyVariable(), checkExpression(), UTAP::expression_t::empty(), UTAP::variable_t::expr, UTAP::symbol_t::getData(), UTAP::BlockStatement::getFrame(), UTAP::frame_t::getSize(), UTAP::symbol_t::getType(), and UTAP::symbol().
|
overridevirtual |
Reimplemented from UTAP::SystemVisitor.
Definition at line 1179 of file typechecker.cpp.
References UTAP::expression_t::changesAnyVariable(), checkExpression(), UTAP::expression_t::empty(), UTAP::expression_t::getType(), isGuard(), UTAP::condition_t::label, UTAP::type_t::toString(), and UTAP::SystemVisitor::visitCondition().
|
overridevirtual |
Reimplemented from UTAP::AbstractStatementVisitor.
Definition at line 1678 of file typechecker.cpp.
References UTAP::Statement::accept(), checkExpression(), UTAP::DoWhileStatement::cond, and UTAP::DoWhileStatement::stat.
|
overridevirtual |
Reimplemented from UTAP::SystemVisitor.
Definition at line 946 of file typechecker.cpp.
References UTAP::edge_t::assign, UTAP::Constants::BROADCAST, UTAP::expression_t::changesAnyVariable(), checkExpression(), UTAP::TimedAutomataSystem::clockGuardRecvBroadcast(), UTAP::edge_t::control, UTAP::csp, UTAP::edge_t::dst, UTAP::expression_t::empty(), UTAP::expression_t::get(), UTAP::frame_t::getSize(), UTAP::expression_t::getSync(), UTAP::expression_t::getType(), UTAP::edge_t::guard, hasStrictLowerBound(), hasStrictUpperBound(), UTAP::state_t::invariant, UTAP::io, UTAP::type_t::is(), UTAP::type_t::isChannel(), isGuard(), isIntegral(), UTAP::expression_t::isTrue(), UTAP::TimedAutomataSystem::recordStrictLowerBoundOnControllableEdges(), UTAP::edge_t::select, UTAP::TimedAutomataSystem::setUrgentTransition(), UTAP::edge_t::sync, UTAP::Constants::SYNC_BANG, UTAP::Constants::SYNC_CSP, UTAP::Constants::SYNC_QUE, UTAP::edge_t::toString(), UTAP::type_t::toString(), UTAP::unused, UTAP::Constants::URGENT, and UTAP::SystemVisitor::visitEdge().
|
overridevirtual |
Reimplemented from UTAP::AbstractStatementVisitor.
Definition at line 1616 of file typechecker.cpp.
|
overridevirtual |
Reimplemented from UTAP::AbstractStatementVisitor.
Definition at line 1621 of file typechecker.cpp.
References UTAP::ExprStatement::expr.
|
overridevirtual |
Reimplemented from UTAP::AbstractStatementVisitor.
Definition at line 1636 of file typechecker.cpp.
References UTAP::Statement::accept(), checkExpression(), UTAP::ForStatement::cond, UTAP::ForStatement::init, UTAP::ForStatement::stat, and UTAP::ForStatement::step.
|
overridevirtual |
Reimplemented from UTAP::SystemVisitor.
Definition at line 1566 of file typechecker.cpp.
References UTAP::BlockStatement::accept(), UTAP::function_t::body, UTAP::function_t::changes, checkDynamicExpressions(), UTAP::function_t::depends, UTAP::BlockStatement::getFrame(), UTAP::symbol_t::getType(), UTAP::type_t::isVoid(), UTAP::type_t::size(), UTAP::function_t::uid, validReturnType(), UTAP::function_t::variables, and UTAP::SystemVisitor::visitFunction().
|
overridevirtual |
Reimplemented from UTAP::SystemVisitor.
Definition at line 1225 of file typechecker.cpp.
References checkExpression(), UTAP::frame_t::getSize(), isConstraint(), isIntegral(), UTAP::gantt_t::mapping, and UTAP::gantt_t::parameters.
|
virtual |
Definition at line 697 of file typechecker.cpp.
References UTAP::expression_t::changesAnyVariable(), checkExpression(), and isClock().
|
overridevirtual |
Reimplemented from UTAP::AbstractStatementVisitor.
Definition at line 1726 of file typechecker.cpp.
References UTAP::Statement::accept(), checkExpression(), UTAP::IfStatement::cond, UTAP::IfStatement::falseCase, and UTAP::IfStatement::trueCase.
|
overridevirtual |
Reimplemented from UTAP::SystemVisitor.
Definition at line 1258 of file typechecker.cpp.
References UTAP::instance_t::arguments, UTAP::expression_t::changesAnyVariable(), checkExpression(), UTAP::symbol_t::getType(), UTAP::type_t::is(), UTAP::type_t::isConstant(), UTAP::instance_t::mapping, UTAP::instance_t::parameters, UTAP::Constants::REF, UTAP::type_t::size(), UTAP::instance_t::uid, and UTAP::SystemVisitor::visitInstance().
|
overridevirtual |
Reimplemented from UTAP::SystemVisitor.
Definition at line 1155 of file typechecker.cpp.
References UTAP::SystemVisitor::visitInstanceLine().
|
overridevirtual |
Reimplemented from UTAP::SystemVisitor.
Definition at line 714 of file typechecker.cpp.
References UTAP::Constants::ARRAY, UTAP::expression_t::changesAnyVariable(), checkExpression(), UTAP::iodecl_t::csp, UTAP::csp, UTAP::expression_t::getKind(), UTAP::type_t::getSub(), UTAP::iodecl_t::inputs, UTAP::io, UTAP::type_t::isArray(), UTAP::type_t::isChannel(), isInteger(), UTAP::iodecl_t::outputs, UTAP::iodecl_t::param, UTAP::TimedAutomataSystem::setSyncUsed(), and UTAP::unused.
|
overridevirtual |
Reimplemented from UTAP::AbstractStatementVisitor.
Definition at line 1650 of file typechecker.cpp.
References UTAP::Statement::accept(), UTAP::symbol_t::getType(), UTAP::type_t::is(), UTAP::type_t::isInteger(), UTAP::type_t::isScalar(), UTAP::Constants::RANGE, UTAP::IterationStatement::stat, and UTAP::IterationStatement::symbol.
|
overridevirtual |
Reimplemented from UTAP::SystemVisitor.
Definition at line 1159 of file typechecker.cpp.
References UTAP::expression_t::changesAnyVariable(), checkExpression(), UTAP::expression_t::empty(), UTAP::expression_t::get(), UTAP::expression_t::getType(), UTAP::type_t::isChannel(), UTAP::message_t::label, and UTAP::SystemVisitor::visitMessage().
|
overridevirtual |
Reimplemented from UTAP::SystemVisitor.
Definition at line 838 of file typechecker.cpp.
References UTAP::symbol_t::getType(), UTAP::type_t::is(), UTAP::type_t::isRange(), UTAP::type_t::isScalar(), UTAP::instance_t::parameters, UTAP::Constants::REF, UTAP::instance_t::restricted, and UTAP::instance_t::unbound.
|
overridevirtual |
Reimplemented from UTAP::SystemVisitor.
Definition at line 1207 of file typechecker.cpp.
References checkExpression(), UTAP::expression_t::empty(), UTAP::progress_t::guard, isIntegral(), and UTAP::progress_t::measure.
|
virtual |
Definition at line 1360 of file typechecker.cpp.
References UTAP::expression_t::changesAnyVariable(), checkExpression(), UTAP::Constants::CONSISTENCY, UTAP::Constants::CONSTANT, UTAP::Constants::EQ, UTAP::Constants::GE, UTAP::expression_t::getKind(), UTAP::expression_t::getSize(), UTAP::expression_t::getType(), UTAP::expression_t::getValue(), UTAP::Constants::GT, hasMITLInQuantifiedSub(), UTAP::Constants::INF_VAR, UTAP::type_t::is(), isAssignable(), isClock(), isConstraint(), isDiff(), isFormula(), isGameProperty(), isInteger(), isIntegral(), isVoid(), UTAP::Constants::LE, UTAP::Constants::LT, UTAP::Constants::MITLFORMULA, UTAP::Constants::NEQ, UTAP::Constants::PO_CONTROL, UTAP::Constants::PROBABOX, UTAP::Constants::PROBACMP, UTAP::Constants::PROBADIAMOND, UTAP::Constants::PROBAEXP, UTAP::Constants::PROBAMINBOX, UTAP::Constants::PROBAMINDIAMOND, UTAP::Constants::SCENARIO, UTAP::Constants::SIMULATE, UTAP::Constants::SIMULATEREACH, UTAP::Constants::SUP_VAR, and UTAP::Constants::TIOGRAPH.
|
overridevirtual |
Reimplemented from UTAP::AbstractStatementVisitor.
Definition at line 1740 of file typechecker.cpp.
References checkExpression(), UTAP::expression_t::empty(), and UTAP::ReturnStatement::value.
|
overridevirtual |
Reimplemented from UTAP::SystemVisitor.
Definition at line 889 of file typechecker.cpp.
References UTAP::expression_t::changesAnyVariable(), checkExpression(), UTAP::state_t::costRate, UTAP::expression_t::empty(), UTAP::state_t::exponentialRate, UTAP::Constants::FRACTION, UTAP::expression_t::getKind(), UTAP::expression_t::getType(), UTAP::state_t::invariant, UTAP::type_t::isDouble(), isIntegral(), isInvariantWR(), UTAP::TimedAutomataSystem::recordStopWatch(), UTAP::TimedAutomataSystem::recordStrictInvariant(), UTAP::type_t::toString(), and UTAP::SystemVisitor::visitState().
|
overridevirtual |
Reimplemented from UTAP::SystemVisitor.
Definition at line 623 of file typechecker.cpp.
References UTAP::Constants::ARRAY, checkExpression(), UTAP::TimedAutomataSystem::getChanPriorities(), UTAP::expression_t::getKind(), UTAP::type_t::getSub(), UTAP::expression_t::getType(), UTAP::type_t::isArray(), and UTAP::type_t::isChannel().
|
overridevirtual |
Reimplemented from UTAP::SystemVisitor.
Definition at line 3391 of file typechecker.cpp.
|
overridevirtual |
Reimplemented from UTAP::SystemVisitor.
Definition at line 3397 of file typechecker.cpp.
|
overridevirtual |
Reimplemented from UTAP::SystemVisitor.
Definition at line 1199 of file typechecker.cpp.
References UTAP::expression_t::empty(), UTAP::update_t::label, and UTAP::SystemVisitor::visitUpdate().
|
overridevirtual |
Reimplemented from UTAP::SystemVisitor.
Definition at line 863 of file typechecker.cpp.
References UTAP::expression_t::changesAnyVariable(), checkExpression(), UTAP::expression_t::empty(), UTAP::variable_t::expr, UTAP::symbol_t::getType(), UTAP::expression_t::hasDynamicSub(), UTAP::expression_t::isDynamic(), UTAP::variable_t::uid, and UTAP::SystemVisitor::visitVariable().
|
overridevirtual |
Reimplemented from UTAP::AbstractStatementVisitor.
Definition at line 1669 of file typechecker.cpp.
References UTAP::Statement::accept(), checkExpression(), UTAP::WhileStatement::cond, and UTAP::WhileStatement::stat.