public override ScriptVariableType Process(ScriptParser parser, int level) { base.Process(parser, level); parser.IncrementScopeLevel(true); foreach (FunctionParameter param in Parameters) { if (param.HasDefaultValue) { if (param.ParamType == ScriptVariableType.String) { if (!param.DefaultValue.ConvertToVariable(ScriptVariableType.String, out param.CompiledDefaultValue)) { parser.Errors.Add(new ErrorInfo(ErrorLevel.Error, ErrorCode.BadDefaultForStringParameter, param.DefaultValue)); } } else if (param.ParamType == ScriptVariableType.Char) { if (!param.DefaultValue.ConvertToVariable(ScriptVariableType.Char, out param.CompiledDefaultValue)) { parser.Errors.Add(new ErrorInfo(ErrorLevel.Error, ErrorCode.BadDefaultForCharParameter, param.DefaultValue)); } } else if (param.ParamType == ScriptVariableType.Bool) { if (!param.DefaultValue.ConvertToVariable(ScriptVariableType.Bool, out param.CompiledDefaultValue)) { parser.Errors.Add(new ErrorInfo(ErrorLevel.Error, ErrorCode.BadDefaultForBooleanParameter, param.DefaultValue)); } } else { if (!param.DefaultValue.ConvertToVariable(param.ParamType, out param.CompiledDefaultValue)) { parser.Errors.Add(new ErrorInfo(ErrorLevel.Error, ErrorCode.BadDefaultForNumericParameter, param.DefaultValue)); } } } parser.AddVariable(new ScriptVariableDefinition(param.ParamType, param.Name)); } parser.RequiredReturnType = ReturnType; Body.Process(parser, 0); parser.RequiredReturnType = ScriptVariableType.Undefined; parser.DecrementScopeLevel(true); return(ScriptVariableType.Undefined); }
public override ScriptVariableType Process(ScriptParser parser, int level) { base.Process(parser, level); foreach (Definition def in Definitions) { if (!parser.AddVariable(new ScriptVariableDefinition(VarType, def.Name))) { parser.Errors.Add(new ErrorInfo(ErrorLevel.Error, ErrorCode.VariableAlreadyExists, def.Name, def.Name.Value)); } if (def.DefaultValue != null) { def.DefaultValue = TypeCastExecutionNode.ImplicitCast(parser, level + 1, VarType, def.DefaultValue); } else { def.UnassignedDefaultValue = VarType.GetDefaultValue(); } } return(ScriptVariableType.Undefined); }