Exemplo n.º 1
0
 static DynValue()
 {
     Nil = new DynValue()
     {
         m_Type = DataType.Nil
     }.AsReadOnly();
     Void = new DynValue()
     {
         m_Type = DataType.Void
     }.AsReadOnly();
     True  = DynValue.NewBoolean(true).AsReadOnly();
     False = DynValue.NewBoolean(false).AsReadOnly();
 }
Exemplo n.º 2
0
        /// <summary>
        /// Checks the type of this value corresponds to the desired type. A propert ScriptRuntimeException is thrown
        /// if the value is not of the specified type or - considering the TypeValidationFlags - is not convertible
        /// to the specified type.
        /// </summary>
        /// <param name="funcName">Name of the function requesting the value, for error message purposes.</param>
        /// <param name="desiredType">The desired data type.</param>
        /// <param name="argNum">The argument number, for error message purposes.</param>
        /// <param name="flags">The TypeValidationFlags.</param>
        /// <returns></returns>
        /// <exception cref="ScriptRuntimeException">Thrown
        /// if the value is not of the specified type or - considering the TypeValidationFlags - is not convertible
        /// to the specified type.</exception>
        public DynValue CheckType(string funcName, DataType desiredType, int argNum = -1, TypeValidationFlags flags = TypeValidationFlags.Default)
        {
            if (this.Type == desiredType)
            {
                return(this);
            }

            bool allowNil = ((int)(flags & TypeValidationFlags.AllowNil) != 0);

            if (allowNil && this.IsNil())
            {
                return(this);
            }

            bool autoConvert = ((int)(flags & TypeValidationFlags.AutoConvert) != 0);

            if (autoConvert)
            {
                if (desiredType == DataType.Boolean)
                {
                    return(DynValue.NewBoolean(this.CastToBool()));
                }

                if (desiredType == DataType.Number)
                {
                    Fix?v = this.CastToNumber();
                    if (v.HasValue)
                    {
                        return(DynValue.NewNumber(v.Value));
                    }
                }

                if (desiredType == DataType.String)
                {
                    string v = this.CastToString();
                    if (v != null)
                    {
                        return(DynValue.NewString(v));
                    }
                }
            }

            if (this.IsVoid())
            {
                throw ScriptRuntimeException.BadArgumentNoValue(argNum, funcName, desiredType);
            }

            throw ScriptRuntimeException.BadArgument(argNum, funcName, desiredType, this.Type, allowNil);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Registers the standard constants (_G, _VERSION, _MOONSHARP) to a table
        /// </summary>
        /// <param name="table">The table.</param>
        /// <returns></returns>
        public static Table RegisterConstants(this Table table)
        {
            DynValue moonsharp_table = DynValue.NewTable(table.OwnerScript);
            Table    m = moonsharp_table.Table;

            table.Set("_G", DynValue.NewTable(table));
            table.Set("_VERSION", DynValue.NewString(string.Format("MoonSharp {0}", Script.VERSION)));
            table.Set("_MOONSHARP", moonsharp_table);

            m.Set("version", DynValue.NewString(Script.VERSION));
            m.Set("luacompat", DynValue.NewString(Script.LUA_VERSION));
            m.Set("platform", DynValue.NewString(Script.GlobalOptions.Platform.GetPlatformName()));
            m.Set("is_aot", DynValue.NewBoolean(Script.GlobalOptions.Platform.IsRunningOnAOT()));
            m.Set("is_unity", DynValue.NewBoolean(PlatformAutoDetector.IsRunningOnUnity));
            m.Set("is_mono", DynValue.NewBoolean(PlatformAutoDetector.IsRunningOnMono));
            m.Set("is_clr4", DynValue.NewBoolean(PlatformAutoDetector.IsRunningOnClr4));
            m.Set("is_pcl", DynValue.NewBoolean(PlatformAutoDetector.IsPortableFramework));
            m.Set("banner", DynValue.NewString(Script.GetBanner()));

            return(table);
        }