### Variables
-Global variables can be set using the `set` keyword:
+Global variables can be set using the `var` and `const` keywords:
- set VarName = "some value"
+ var VarName = "some value"
The value can be a string, number, array or a dictionary.
+Variables can be set multiple times unless they were introduced using
+the `const` keyword.
+
+> **Note**
+>
+> The `set` keyword is an alias for the `var` keyword and is available
+> in order to provide compatibility with older versions. Its use is
+> deprecated.
+
### Constant Expressions
Simple calculations can be performed using the constant expression syntax:
check_interval = (15 * 60)
}
-Valid operators include +, -, * and /. The default precedence rules can be
+Valid operators include ~, +, -, * and /. The default precedence rules can be
overridden by grouping expressions using parentheses:
{
Global variables may be used in constant expressions.
- set MyCheckInterval = 10m
+ var MyCheckInterval = 10m
...
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
******************************************************************************/
-set StateOK = (0)
-set StateWarning = (1)
-set StateCritical = (2)
-set StateUnknown = (3)
+const StateOK = 0
+const StateWarning = 1
+const StateCritical = 2
+const StateUnknown = 3
/*
* Converting states to their filter values: 1<<state
*/
-set StateFilterOK = (1<<StateOK)
-set StateFilterWarning = (1<<StateWarning)
-set StateFilterCritical = (1<<StateCritical)
-set StateFilterUnknown = (1<<StateUnknown)
+const StateFilterOK = (1<<StateOK)
+const StateFilterWarning = (1<<StateWarning)
+const StateFilterCritical = (1<<StateCritical)
+const StateFilterUnknown = (1<<StateUnknown)
-set NotificationDowntimeStart = (0)
-set NotificationDowntimeEnd = (1)
-set NotificationDowntimeRemoved = (2)
-set NotificationCustom = (3)
-set NotificationAcknowledgement = (4)
-set NotificationProblem = (5)
-set NotificationRecovery = (6)
-set NotificationFlappingStart = (7)
-set NotificationFlappingEnd = (8)
+const NotificationDowntimeStart = 0
+const NotificationDowntimeEnd = 1
+const NotificationDowntimeRemoved = 2
+const NotificationCustom = 3
+const NotificationAcknowledgement = 4
+const NotificationProblem = 5
+const NotificationRecovery = 6
+const NotificationFlappingStart = 7
+const NotificationFlappingEnd = 8
/*
* Converting notification types to their filter values: 1<<type
*/
-set NotificationFilterDowntimeStart = (1<<NotificationDowntimeStart)
-set NotificationFilterDowntimeEnd = (1<<NotificationDowntimeEnd)
-set NotificationFilterDowntimeRemoved = (1<<NotificationDowntimeRemoved)
-set NotificationFilterCustom = (1<<NotificationCustom)
-set NotificationFilterAcknowledgement = (1<<NotificationAcknowledgement)
-set NotificationFilterProblem = (1<<NotificationProblem)
-set NotificationFilterRecovery = (1<<NotificationRecovery)
-set NotificationFilterFlappingStart = (1<<NotificationFlappingStart)
-set NotificationFilterFlappingEnd = (1<<NotificationFlappingEnd)
+const NotificationFilterDowntimeStart = (1<<NotificationDowntimeStart)
+const NotificationFilterDowntimeEnd = (1<<NotificationDowntimeEnd)
+const NotificationFilterDowntimeRemoved = (1<<NotificationDowntimeRemoved)
+const NotificationFilterCustom = (1<<NotificationCustom)
+const NotificationFilterAcknowledgement = (1<<NotificationAcknowledgement)
+const NotificationFilterProblem = (1<<NotificationProblem)
+const NotificationFilterRecovery = (1<<NotificationRecovery)
+const NotificationFilterFlappingStart = (1<<NotificationFlappingStart)
+const NotificationFilterFlappingEnd = (1<<NotificationFlappingEnd)
/*
* Domain privilege flags
*/
-set DomainPrivRead = (1<<0)
-set DomainPrivCheckResult = (1<<1)
-set DomainPrivCommand = (1<<2)
+const DomainPrivRead = (1<<0)
+const DomainPrivCheckResult = (1<<1)
+const DomainPrivCommand = (1<<2)
-set DomainPrivReadOnly = (DomainPrivRead)
-set DomainPrivReadWrite = (DomainPrivRead | DomainPrivCheckResult | DomainPrivCommand)
+const DomainPrivReadOnly = (DomainPrivRead)
+const DomainPrivReadWrite = (DomainPrivRead | DomainPrivCheckResult | DomainPrivCommand)
/*
* IDO filter categories
*/
-set DbCatConfig = (1 << 0)
-set DbCatState = (1 << 1)
-set DbCatAcknowledgement = (1 << 2)
-set DbCatComment = (1 << 3)
-set DbCatDowntime = (1 << 4)
-set DbCatEventHandler = (1 << 5)
-set DbCatExternalCommand = (1 << 6)
-set DbCatFlapping = (1 << 7)
-set DbCatCheck = (1 << 8)
-set DbCatLog = (1 << 9)
-set DbCatNotification = (1 << 10)
-set DbCatProgramStatus = (1 << 11)
-set DbCatRetention = (1 << 12)
-set DbCatStateHistory = (1 << 13)
+const DbCatConfig = (1 << 0)
+const DbCatState = (1 << 1)
+const DbCatAcknowledgement = (1 << 2)
+const DbCatComment = (1 << 3)
+const DbCatDowntime = (1 << 4)
+const DbCatEventHandler = (1 << 5)
+const DbCatExternalCommand = (1 << 6)
+const DbCatFlapping = (1 << 7)
+const DbCatCheck = (1 << 8)
+const DbCatLog = (1 << 9)
+const DbCatNotification = (1 << 10)
+const DbCatProgramStatus = (1 << 11)
+const DbCatRetention = (1 << 12)
+const DbCatStateHistory = (1 << 13)
-set DbCatEverything = (~0)
+const DbCatEverything = (~0)
%token <op> T_MINUS_EQUAL "-= (T_MINUS_EQUAL)"
%token <op> T_MULTIPLY_EQUAL "*= (T_MULTIPLY_EQUAL)"
%token <op> T_DIVIDE_EQUAL "/= (T_DIVIDE_EQUAL)"
-%token T_SET "set (T_SET)"
+%token T_VAR "var (T_VAR)"
+%token T_CONST "const (T_CONST)"
%token T_SHIFT_LEFT "<< (T_SHIFT_LEFT)"
%token T_SHIFT_RIGHT ">> (T_SHIFT_RIGHT)"
%token <type> T_TYPE_DICTIONARY "dictionary (T_TYPE_DICTIONARY)"
%type <slist> object_inherits_specifier
%type <aexpr> aterm
%type <aexpr> aexpression
+%type <num> variable_decl
%left '+' '-'
%left '*' '/'
%left '&'
context->HandleLibrary($2);
free($2);
}
+ ;
-variable: T_SET identifier T_EQUAL value
+variable: variable_decl identifier T_EQUAL value
{
Value *value = $4;
if (value->IsObjectType<ExpressionList>()) {
value = new Value(dict);
}
- ScriptVariable::Set($2, *value);
+ ScriptVariable::Ptr sv = ScriptVariable::Set($2, *value);
+
+ if (!$1)
+ sv->SetConstant(true);
+
free($2);
delete value;
}
+ ;
+
+variable_decl: T_VAR
+ {
+ $$ = true;
+ }
+ | T_CONST
+ {
+ $$ = false;
+ }
+ ;
identifier: T_IDENTIFIER
| T_STRING