public DefaultAttribute(double value)
 {
     Value = new DyFloat(value);
 }
Exemple #2
0
        private Par[] CompileFunctionParameters(List <DParameter> pars)
        {
            var arr       = new Par[pars.Count];
            var hasVarArg = false;

            for (var i = 0; i < pars.Count; i++)
            {
                var p = pars[i];

                if (p.IsVarArgs)
                {
                    if (hasVarArg)
                    {
                        AddError(CompilerError.VarArgOnlyOne, p.Location);
                    }

                    hasVarArg = true;
                }

                if (p.DefaultValue != null)
                {
                    if (p.IsVarArgs)
                    {
                        AddError(CompilerError.VarArgNoDefaultValue, p.Location);
                    }

                    DyObject val = null;

                    switch (p.DefaultValue.NodeType)
                    {
                    case NodeType.Integer:
                        val = new DyInteger(((DIntegerLiteral)p.DefaultValue).Value);
                        break;

                    case NodeType.Float:
                        val = new DyFloat(((DFloatLiteral)p.DefaultValue).Value);
                        break;

                    case NodeType.Char:
                        val = new DyChar(((DCharLiteral)p.DefaultValue).Value);
                        break;

                    case NodeType.Boolean:
                        val = ((DBooleanLiteral)p.DefaultValue).Value ? DyBool.True : DyBool.False;
                        break;

                    case NodeType.String:
                        val = new DyString(((DStringLiteral)p.DefaultValue).Value);
                        break;

                    case NodeType.Nil:
                        val = DyNil.Instance;
                        break;

                    default:
                        AddError(CompilerError.InvalidDefaultValue, p.DefaultValue.Location, p.Name);
                        break;
                    }

                    arr[i] = new Par(p.Name, val, false);
                }
                else
                {
                    arr[i] = new Par(p.Name, null, p.IsVarArgs);
                }
            }

            return(arr);
        }