public void DefineAndSet(string name, TypeBridge type, CQ_Value value) { if (values == null) { values = new Dictionary <string, CQ_Value>(); } else if (values.ContainsKey(name)) { throw new Exception(name + "已经定义过"); } CQ_Value v = new CQ_Value(); if (type.type != null) { v.m_type = type.type; } else if (type.stype != null) { v.m_stype = type.stype; } v.UsingValue(value); values[name] = v; int newdepth = tvalueDepth.Pop() + 1; tvalueDepth.Push(newdepth); tvalues.Push(name); }
public CQ_Value ComputeValue(CQ_Content content) { #if CQUARK_DEBUG content.InStack(this); #endif CQ_Value v = _expressions[0].ComputeValue(content); CQ_Value oldVal = CQ_Value.Null; if (content.values != null && content.values.ContainsKey(value_name)) { oldVal = content.values[value_name]; } else if (content.CallType != null && content.CallType.members.ContainsKey(value_name)) { if (content.CallType.members[value_name].bStatic) { oldVal = content.CallType.staticMemberInstance[value_name]; } else { oldVal = content.CallThis.member[value_name]; } } oldVal.UsingValue(v); content.Set(value_name, oldVal); #if CQUARK_DEBUG content.OutStack(this); #endif return(CQ_Value.Null); }
public void Set(string name, CQ_Value value) { if (values == null) { values = new Dictionary <string, CQ_Value>(); } CQ_Value oldVal = CQ_Value.Null; bool bFind = values.TryGetValue(name, out oldVal); if (bFind) { //var第一次赋值类型 if (oldVal.m_type == typeof(Type_Var.var)) { if (value.m_type != null) { oldVal.m_type = value.m_type; } else if (value.m_stype != null) { oldVal.m_stype = value.m_stype; } } oldVal.UsingValue(value); values[name] = oldVal; } else { if (CallType != null) { Class_CQuark.Member retM = Class_CQuark.Member.Null; bool bRet = CallType.members.TryGetValue(name, out retM); if (bRet) { if (retM.bStatic) { CQ_Value val = CallType.staticMemberInstance[name]; val.UsingValue(value); CallType.staticMemberInstance[name] = val; } else { CQ_Value val = CallThis.member[name]; val.UsingValue(value); CallThis.member[name] = val; } return; } } string err = CallType.Name + "\n"; foreach (var m in CallType.members) { err += m.Key + ","; } throw new Exception("值没有定义过" + name + "," + err); } }
public bool MemberValueSet(CQ_Content content, object object_this, string valuename, CQ_Value value) { CQ_ClassInstance sin = object_this as CQ_ClassInstance; if (sin.member.ContainsKey(valuename)) { CQ_Value oldVal = sin.member[valuename]; oldVal.UsingValue(value); sin.member[valuename] = oldVal; return(true); } throw new NotImplementedException(); }
public bool StaticValueSet(CQ_Content content, string valuename, CQ_Value value) { NewStatic(); if (this.staticMemberInstance.ContainsKey(valuename)) { CQ_Value oldVal = this.staticMemberInstance[valuename]; oldVal.UsingValue(value); this.staticMemberInstance[valuename] = oldVal; return(true); } throw new NotImplementedException(); }
public CQ_Value ComputeValue(CQ_Content content) { #if CQUARK_DEBUG content.InStack(this); #endif CQ_Value v = content.Get(value_name); IType type = CQuark.AppDomain.GetITypeByCQValue(v); CQ_Value retVal = type.Math2Value(mathop, v, CQ_Value.One); v.UsingValue(retVal); content.Set(value_name, v); #if CQUARK_DEBUG content.OutStack(this); #endif return(v); }
public IEnumerator CoroutineCompute(CQ_Content content, UnityEngine.MonoBehaviour coroutine) { #if CQUARK_DEBUG content.InStack(this); #endif if (_expressions[0].hasCoroutine) { yield return(coroutine.StartCoroutine(_expressions[0].CoroutineCompute(content, coroutine))); } else { CQ_Value v = _expressions[0].ComputeValue(content); CQ_Value oldVal = CQ_Value.Null; if (content.values != null && content.values.ContainsKey(value_name)) { oldVal = content.values[value_name]; } else if (content.CallType != null && content.CallType.members.ContainsKey(value_name)) { if (content.CallType.members[value_name].bStatic) { oldVal = content.CallType.staticMemberInstance[value_name]; } else { oldVal = content.CallThis.member[value_name]; } } oldVal.UsingValue(v); content.Set(value_name, oldVal); } #if CQUARK_DEBUG content.OutStack(this); #endif }
public CQ_Value ComputeValue(CQ_Content content) { #if CQUARK_DEBUG content.InStack(this); #endif CQ_Value left = _expressions[0].ComputeValue(content); CQ_Value right = _expressions[1].ComputeValue(content); IType type = CQuark.AppDomain.GetITypeByCQValue(left); CQ_Value val = type.Math2Value(mathop, left, right); //val.SetValue(left.typeBridge, type.ConvertTo(val.GetValue(), left.typeBridge)); left.UsingValue(val); if (_expressions[0] is CQ_Expression_MemberValueGet) { CQ_Expression_MemberValueGet f = _expressions[0] as CQ_Expression_MemberValueGet; CQ_Value parent = f._expressions[0].ComputeValue(content); if (parent == CQ_Value.Null) { throw new Exception("调用空对象的方法:" + f._expressions[0].ToString() + ":" + ToString()); } //这几行是为了快速获取Unity的静态变量,而不需要反射 object obj = parent.GetObject(); if (!Wrap.MemberValueSet(parent.m_type, obj, f.membername, val)) { IType ptype = CQuark.AppDomain.GetITypeByCQValue(parent); ptype._class.MemberValueSet(content, obj, f.membername, val); } } else if (_expressions[0] is CQ_Expression_StaticValueGet) { CQ_Expression_StaticValueGet f = _expressions[0] as CQ_Expression_StaticValueGet; //这几行是为了快速获取Unity的静态变量,而不需要反射 if (!Wrap.StaticValueSet(type.typeBridge.type, f.staticmembername, val)) { f.type._class.StaticValueSet(content, f.staticmembername, val); } } else if (_expressions[0] is CQ_Expression_GetValue) { CQ_Expression_GetValue f = _expressions[0] as CQ_Expression_GetValue; content.Set(f.value_name, left); } else if (_expressions[0] is CQ_Expression_IndexGet) { CQ_Expression_IndexGet f = _expressions[0] as CQ_Expression_IndexGet; CQ_Value parent = f._expressions[0].ComputeValue(content); object obj = parent.GetObject(); CQ_Value key = f._expressions[1].ComputeValue(content); IType parenttype = CQuark.AppDomain.GetITypeByCQValue(parent); parenttype._class.IndexSet(content, obj, key.GetObject(), left.GetObject()); CQ_Expression_GetValue g = f._expressions[0] as CQ_Expression_GetValue; content.Set(g.value_name, parent); } #if CQUARK_DEBUG content.OutStack(this); #endif return(CQ_Value.Null); }