public static DynValue setmetatable(ScriptExecutionContext executionContext, CallbackArguments args) { var table = args.AsType(0, "setmetatable", DataType.Table); var metatable = args.AsType(1, "setmetatable", DataType.Table, true); var curmeta = executionContext.GetMetamethod(table, "__metatable"); if (curmeta != null) { throw new ScriptRuntimeException("cannot change a protected metatable"); } table.Table.MetaTable = metatable.Table; return(table); }
public static DynValue setmetatable(ScriptExecutionContext executionContext, CallbackArguments args) { DynValue table = args.AsType(0, "setmetatable", DataType.Table); DynValue metatable = args.AsType(1, "setmetatable", DataType.Table, true); DynValue curmeta = executionContext.GetMetamethod(table, "__metatable"); if (curmeta != null) { throw new ScriptRuntimeException("cannot change a protected metatable"); } table.Table.MetaTable = metatable.Table; return table; }
private static int GetTableLength(ScriptExecutionContext executionContext, DynValue vlist) { var __len = executionContext.GetMetamethod(vlist, "__len"); if (__len != null) { var lenv = executionContext.GetScript().Call(__len, vlist); var len = lenv.CastToNumber(); if (len == null) { throw new ScriptRuntimeException("object length is not a number"); } return((int)len); } return(vlist.Table.Length); }
private static int GetTableLength(ScriptExecutionContext executionContext, DynValue vlist) { DynValue __len = executionContext.GetMetamethod(vlist, "__len"); if (__len.IsValid) { DynValue lenv = executionContext.GetScript().Call(__len, vlist); double len; if (lenv.TryCastToNumber(out len)) { return((int)len); } throw new ScriptRuntimeException("object length is not a number"); } else { return((int)vlist.Table.Length); } }
private static int GetTableLength(ScriptExecutionContext executionContext, DynValue vlist) { var __len = executionContext.GetMetamethod(vlist, "__len"); if (__len != null) { var lenv = executionContext.GetScript().Call(__len, vlist); var len = lenv.CastToNumber(); if (len == null) throw new ScriptRuntimeException("object length is not a number"); return (int) len; } return vlist.Table.Length; }