mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-26 07:04:37 +02:00
parent
47ba5eeddd
commit
2ec499be17
@ -251,6 +251,8 @@ __function return T_FUNCTION;
|
|||||||
__return return T_RETURN;
|
__return return T_RETURN;
|
||||||
__for return T_FOR;
|
__for return T_FOR;
|
||||||
__signal return T_SIGNAL;
|
__signal return T_SIGNAL;
|
||||||
|
__if return T_IF;
|
||||||
|
__else return T_ELSE;
|
||||||
=\> return T_FOLLOWS;
|
=\> return T_FOLLOWS;
|
||||||
\<\< return T_SHIFT_LEFT;
|
\<\< return T_SHIFT_LEFT;
|
||||||
\>\> return T_SHIFT_RIGHT;
|
\>\> 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_RETURN "return (T_RETURN)"
|
||||||
%token T_FOR "for (T_FOR)"
|
%token T_FOR "for (T_FOR)"
|
||||||
%token T_SIGNAL "signal (T_SIGNAL)"
|
%token T_SIGNAL "signal (T_SIGNAL)"
|
||||||
|
%token T_IF "if (T_IF)"
|
||||||
|
%token T_ELSE "else (T_ELSE)"
|
||||||
%token T_FOLLOWS "=> (T_FOLLOWS)"
|
%token T_FOLLOWS "=> (T_FOLLOWS)"
|
||||||
|
|
||||||
%type <text> identifier
|
%type <text> identifier
|
||||||
@ -855,6 +857,23 @@ rterm_without_indexer: T_STRING
|
|||||||
$$ = new ForExpression($3, "", $5, aexpr, DebugInfoRange(@1, @7));
|
$$ = new ForExpression($3, "", $5, aexpr, DebugInfoRange(@1, @7));
|
||||||
free($3);
|
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 */
|
target_type_specifier: /* empty */
|
||||||
|
@ -346,6 +346,14 @@ Value SetExpression::DoEvaluate(VMFrame& frame, DebugHint *dhint) const
|
|||||||
return right;
|
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
|
Value ReturnExpression::DoEvaluate(VMFrame& frame, DebugHint *dhint) const
|
||||||
{
|
{
|
||||||
BOOST_THROW_EXCEPTION(InterruptExecutionError(m_Operand->Evaluate(frame)));
|
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
|
class I2_CONFIG_API ReturnExpression : public UnaryExpression
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user