public override object Validate(ScriptFile script, IExpression value, DocRange valueRange)
        {
            CallVariableAction call = value as CallVariableAction;

            // Syntax error if the expression is not a variable.
            if (call == null)
            {
                script.Diagnostics.Error("Expected a variable.", valueRange);
            }

            // Syntax error if the variable is not settable.
            else if (!call.Calling.Settable())
            {
                script.Diagnostics.Error($"The {call.Calling.Name} variable cannot be set to.", valueRange);
            }

            else if (VariableType != VariableType.Dynamic && call.Calling.VariableType != VariableType)
            {
                if (VariableType == VariableType.Global)
                {
                    script.Diagnostics.Error($"Expected a global variable.", valueRange);
                }
                else
                {
                    script.Diagnostics.Error($"Expected a player variable.", valueRange);
                }
            }

            else
            {
                return(call);
            }
            return(null);
        }
Example #2
0
 protected virtual void OnVariable(CallVariableAction variableCall)
 {
     if (variableCall.Calling is VariableInstance var)
     {
         var.Var.ValueReady.OnReady(() => ContinueIfExists(variableCall, var.Var.InitialValue));
     }
     else
     {
         Complete(variableCall);
     }
 }
        public override object Validate(ScriptFile script, IExpression value, DocRange valueRange)
        {
            CallVariableAction call = value as CallVariableAction;

            if (call == null || call.Calling.DefineType != VariableDefineType.RuleLevel)
            {
                script.Diagnostics.Error("Expected a variable defined on the rule level.", valueRange);
            }

            if (call != null && (call.Calling.VariableType == VariableType.Global) != IsGlobal)
            {
                script.Diagnostics.Error($"Expected a {(IsGlobal ? "global" : "player")} variable.", valueRange);
            }

            if (call != null && call.Index.Length > 0)
            {
                script.Diagnostics.Error("Variable cannot be indexed.", valueRange);
            }

            return(null);
        }