コード例 #1
0
ファイル: Table.cs プロジェクト: lofcz/moonsharp
        private Table ResolveMultipleKeys(object[] keys, out object key)
        {
            //Contract.Ensures(Contract.Result<Table>() != null);
            //Contract.Requires(keys != null);

            Table t = this;

            key = (keys.Length > 0) ? keys[0] : null;

            for (int i = m_Owner.Options.ZeroIndexTables ? 0 : 1; i < keys.Length; ++i)
            {
                DynValue vt = t.RawGet(key);

                if (vt.IsNil())
                {
                    throw new ScriptRuntimeException("Key '{0}' did not point to anything");
                }

                if (vt.Type != DataType.Table)
                {
                    throw new ScriptRuntimeException("Key '{0}' did not point to a table");
                }

                t   = vt.Table;
                key = keys[i];
            }

            return(t);
        }
コード例 #2
0
        private Table ResolveMultipleKeys(object[] keys, out object key)
        {
            //Contract.Ensures(Contract.Result<Table>() != null);
            //Contract.Requires(keys != null);

            if (!_isAlive)
            {
                throw new InvalidOperationException(string.Format("Attempting to ResolveMultipleKeys on dead Table"));
            }
            Table t = this;

            key = (keys.Length > 0) ? keys[0] : null;

            for (int i = 1; i < keys.Length; ++i)
            {
                DynValue vt = t.RawGet(key);

                if (!vt.IsValid)
                {
                    throw new ScriptRuntimeException("Key '{0}' did not point to anything");
                }

                if (vt.Type != DataType.Table)
                {
                    throw new ScriptRuntimeException("Key '{0}' did not point to a table");
                }

                t   = vt.Table;
                key = keys[i];
            }

            return(t);
        }
コード例 #3
0
        private static Table CreateModuleNamespace(Table gtable, Type t)
        {
            MoonSharpModuleAttribute attr = (MoonSharpModuleAttribute)t.GetCustomAttributes(typeof(MoonSharpModuleAttribute), false).First();

            if (string.IsNullOrEmpty(attr.Namespace))
            {
                return(gtable);
            }
            else
            {
                Table table = null;

                DynValue found = gtable.Get(attr.Namespace);

                if (found.Type == DataType.Table)
                {
                    table = found.Table;
                }
                else
                {
                    table = new Table(gtable.OwnerScript);
                    gtable.Set(attr.Namespace, DynValue.NewTable(table));
                }


                DynValue package = gtable.RawGet("package");

                if (package == null || package.Type != DataType.Table)
                {
                    gtable.Set("package", package = DynValue.NewTable(gtable.OwnerScript));
                }


                DynValue loaded = package.Table.RawGet("loaded");

                if (loaded == null || loaded.Type != DataType.Table)
                {
                    package.Table.Set("loaded", loaded = DynValue.NewTable(gtable.OwnerScript));
                }

                loaded.Table.Set(attr.Namespace, DynValue.NewTable(table));

                return(table);
            }
        }