/// <summary> 获得一个类变量 </summary> public override object GetValue_impl(object obj, string name) { if (m_Functions.ContainsKey(name)) { return(m_Functions[name]); } if (m_NestedTypes.ContainsKey(name)) { return(m_NestedTypes[name]); } UserdataVariable variable = GetVariable(name); if (variable != null) { return(variable.GetValue(obj)); } ScriptUserdata nestedType = GetNestedType(name); if (nestedType != null) { return(nestedType); } UserdataMethod func = GetMethod(name); if (func != null) { return(func); } throw new ExecutionException(m_Script, "GetValue Type[" + m_Type.ToString() + "] 变量 [" + name + "] 不存在"); }
public override ScriptObject GetValue(string strName) { if (m_Functions.ContainsKey(strName)) { return(m_Functions[strName]); } if (m_NestedTypes.ContainsKey(strName)) { return(m_NestedTypes[strName]); } ScriptUserdataField field = GetField(strName); if (field != null) { return(Script.CreateObject(field.GetValue(Value))); } Type nestedType = ValueType.GetNestedType(strName, Script.BindingFlag); if (nestedType != null) { ScriptUserdata ret = Script.CreateUserdata(nestedType); m_NestedTypes.Add(strName, ret); return(ret); } throw new ScriptException("Type[" + ValueType.ToString() + "] Variable[" + strName + "] 不存在"); }
public object Call(ScriptObject[] args) { ScriptUserdata assembly = args[0] as ScriptUserdata; Util.Assert(assembly != null, m_script, "push_assembly 参数必须是 Assembly 类型"); m_script.PushAssembly(assembly.ObjectValue as Assembly); return(null); }
public object Call(ScriptObject[] args) { Util.Assert(args.Length == 2, m_script, "toenum 第一个参数是枚举类 第二个参数必须是number类型"); ScriptUserdata obj = args[0] as ScriptUserdata; ScriptNumber number = args[1] as ScriptNumber; Util.Assert(obj != null && number != null, m_script, "toenum 第一个参数是枚举类 第二个参数必须是number类型"); return(new ScriptEnum(m_script, Util.ToEnum(obj.ValueType, number.ToInt32()))); }
public UserdataPairs(ScriptUserdata userdata, ScriptMap itorResult) { var ienumerable = userdata.Value as System.Collections.IEnumerable; if (ienumerable == null) { throw new ExecutionException("pairs 只支持继承 IEnumerable 的类"); } m_Enumerator = ienumerable.GetEnumerator(); m_ItorResult = itorResult; }
public object Call(ScriptObject[] args) { ScriptUserdata assembly = args[0] as ScriptUserdata; if (assembly == null) { throw new ExecutionException("push_assembly 参数必须是 Assembly 类型"); } m_script.PushAssembly(assembly.ObjectValue as Assembly); return(null); }
public UserdataPairs(ScriptUserdata obj) { object value = obj.Value; System.Collections.IEnumerable ienumerable = value as System.Collections.IEnumerable; if (ienumerable == null) { throw new ExecutionException("pairs 只支持继承 IEnumerable 的类"); } m_Enumerator = ienumerable.GetEnumerator(); }
private ScriptUserdata GetNestedType(string name) { Type nestedType = m_Type.GetTypeInfo().GetNestedType(name, Script.BindingFlag); if (nestedType != null) { ScriptUserdata ret = m_Script.CreateUserdata(nestedType); m_NestedTypes.Add(name, ret); return(ret); } return(null); }
private ScriptUserdata GetNestedType(string name) { Type nestedType = base.m_Type.GetTypeInfo().GetNestedType(name, BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance); if (nestedType != null) { ScriptUserdata userdata = base.m_Script.CreateUserdata(nestedType); this.m_NestedTypes.Add(name, userdata); return(userdata); } return(null); }
public object Call(ScriptObject[] args) { ScriptUserdata userdata = args[0] as ScriptUserdata; Util.Assert(userdata != null, m_script, "generic_type 第1个参数必须是 userdata"); Type[] types = new Type[args.Length - 1]; for (int i = 1; i < args.Length; ++i) { ScriptUserdata type = args[i] as ScriptUserdata; Util.Assert(type != null, m_script, "generic_type 第" + (i + 1) + "参数必须是 userdata"); types[i - 1] = type.ValueType; } return(m_script.GetScorpioType(userdata.ValueType).MakeGenericType(types)); }
public object Call(ScriptObject[] args) { ScriptMethodFunction func = args[0] as ScriptMethodFunction; Util.Assert(func != null, m_script, "generic_method 第1个参数必须是 function"); ScorpioMethod method = func.Method; Type[] types = new Type[args.Length - 1]; for (int i = 1; i < args.Length; ++i) { ScriptUserdata type = args[i] as ScriptUserdata; Util.Assert(type != null, m_script, "generic_method 第" + (i + 1) + "参数必须是 userdata"); types[i - 1] = type.ValueType; } return(method.MakeGenericMethod(types)); }
public object Call(ScriptObject[] args) { ScriptUserdata userdata = args[0] as ScriptUserdata; if (userdata == null) { throw new ExecutionException("generic_type 参数必须是 userdata"); } Type[] types = new Type[args.Length - 1]; for (int i = 1; i < args.Length; ++i) { ScriptUserdata type = args[i] as ScriptUserdata; if (userdata == null) { throw new ExecutionException("generic_type 参数必须是 userdata"); } types[i - 1] = type.ValueType; } return(userdata.ValueType.MakeGenericType(types)); }
/// <summary> 获得一个类变量 </summary> public override object GetValue(object obj, string name) { if (m_ScorpioMethods.ContainsKey(name)) { return(m_ScorpioMethods[name]); } if (m_Functions.ContainsKey(name)) { return(GetMethod(obj, name, m_Functions[name])); } if (m_NestedTypes.ContainsKey(name)) { return(m_NestedTypes[name]); } UserdataVariable variable = GetVariable(name); if (variable != null) { return(variable.GetValue(obj)); } Type nestedType = m_Type.GetNestedType(name, Script.BindingFlag); if (nestedType != null) { ScriptUserdata ret = m_Script.CreateUserdata(nestedType); m_NestedTypes.Add(name, ret); return(ret); } UserdataMethod func = GetMethod(name); if (func != null) { return(GetMethod(obj, name, func)); } throw new ExecutionException(m_Script, "GetValue Type[" + m_Type.ToString() + "] 变量 [" + name + "] 不存在"); }