mirror of https://github.com/Icinga/icinga2.git
parent
47ba5eeddd
commit
2ec499be17
|
@ -251,6 +251,8 @@ __function return T_FUNCTION;
|
|||
__return return T_RETURN;
|
||||
__for return T_FOR;
|
||||
__signal return T_SIGNAL;
|
||||
__if return T_IF;
|
||||
__else return T_ELSE;
|
||||
=\> return T_FOLLOWS;
|
||||
\<\< return T_SHIFT_LEFT;
|
||||
\>\> return T_SHIFT_RIGHT;
|
||||
|
|
|
@ -165,6 +165,8 @@ static void MakeRBinaryOp(Expression** result, Expression *left, Expression *rig
|
|||
%token T_RETURN "return (T_RETURN)"
|
||||
%token T_FOR "for (T_FOR)"
|
||||
%token T_SIGNAL "signal (T_SIGNAL)"
|
||||
%token T_IF "if (T_IF)"
|
||||
%token T_ELSE "else (T_ELSE)"
|
||||
%token T_FOLLOWS "=> (T_FOLLOWS)"
|
||||
|
||||
%type <text> identifier
|
||||
|
@ -855,6 +857,23 @@ rterm_without_indexer: T_STRING
|
|||
$$ = new ForExpression($3, "", $5, aexpr, DebugInfoRange(@1, @7));
|
||||
free($3);
|
||||
}
|
||||
| T_IF '(' rterm ')' rterm_scope
|
||||
{
|
||||
DictExpression *atrue = dynamic_cast<DictExpression *>($5);
|
||||
atrue->MakeInline();
|
||||
|
||||
$$ = new ConditionalExpression($3, atrue, NULL, DebugInfoRange(@1, @5));
|
||||
}
|
||||
| T_IF '(' rterm ')' rterm_scope T_ELSE rterm_scope
|
||||
{
|
||||
DictExpression *atrue = dynamic_cast<DictExpression *>($5);
|
||||
atrue->MakeInline();
|
||||
|
||||
DictExpression *afalse = dynamic_cast<DictExpression *>($7);
|
||||
afalse->MakeInline();
|
||||
|
||||
$$ = new ConditionalExpression($3, atrue, afalse, DebugInfoRange(@1, @7));
|
||||
}
|
||||
;
|
||||
|
||||
target_type_specifier: /* empty */
|
||||
|
|
|
@ -346,6 +346,14 @@ Value SetExpression::DoEvaluate(VMFrame& frame, DebugHint *dhint) const
|
|||
return right;
|
||||
}
|
||||
|
||||
Value ConditionalExpression::DoEvaluate(VMFrame& frame, DebugHint *dhint) const
|
||||
{
|
||||
if (m_Condition->Evaluate(frame, dhint))
|
||||
return m_TrueBranch->Evaluate(frame, dhint);
|
||||
else if (m_FalseBranch)
|
||||
return m_FalseBranch->Evaluate(frame, dhint);
|
||||
}
|
||||
|
||||
Value ReturnExpression::DoEvaluate(VMFrame& frame, DebugHint *dhint) const
|
||||
{
|
||||
BOOST_THROW_EXCEPTION(InterruptExecutionError(m_Operand->Evaluate(frame)));
|
||||
|
|
|
@ -556,6 +556,29 @@ private:
|
|||
|
||||
};
|
||||
|
||||
class I2_CONFIG_API ConditionalExpression : public DebuggableExpression
|
||||
{
|
||||
public:
|
||||
ConditionalExpression(Expression *condition, Expression *true_branch, Expression *false_branch, const DebugInfo& debugInfo = DebugInfo())
|
||||
: DebuggableExpression(debugInfo), m_Condition(condition), m_TrueBranch(true_branch), m_FalseBranch(false_branch)
|
||||
{ }
|
||||
|
||||
~ConditionalExpression(void)
|
||||
{
|
||||
delete m_Condition;
|
||||
delete m_TrueBranch;
|
||||
delete m_FalseBranch;
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual Value DoEvaluate(VMFrame& frame, DebugHint *dhint) const;
|
||||
|
||||
private:
|
||||
Expression *m_Condition;
|
||||
Expression *m_TrueBranch;
|
||||
Expression *m_FalseBranch;
|
||||
};
|
||||
|
||||
class I2_CONFIG_API ReturnExpression : public UnaryExpression
|
||||
{
|
||||
public:
|
||||
|
|
Loading…
Reference in New Issue