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