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); }
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); }