예제 #1
0
 protected internal RuntimeValue_Indirect(Engine eng, WireProtocol.Commands.Debugging_Value[] array, int pos) : base(eng, array[pos])
 {
     if (++pos < array.Length)
     {
         m_value = Convert(eng, array, pos);
     }
 }
예제 #2
0
        public RuntimeValue Assign(RuntimeValue val)
        {
            RuntimeValue retval = null;

            if (IsReflection || (val != null && val.IsReflection))
            {
                byte[] data = new byte[8];
                uint   dt   = (uint)RuntimeDataType.DATATYPE_OBJECT;

                if (val != null)
                {
                    dt = val.m_handle.m_dt;
                    Array.Copy(val.m_handle.m_builtinValue, data, data.Length);
                }

                if (SetBlock(dt, data))
                {
                    retval = this;
                }
            }
            else if (IsPrimitive)
            {
                if (val == null || val.IsPrimitive == false)
                {
                    throw new InvalidCastException("The two runtime values are incompatible");
                }

                Value = val.Value;

                retval = this;
            }
            else
            {
                if (val != null && val.IsPrimitive == true)
                {
                    throw new InvalidCastException("The two runtime values are incompatible");
                }

                retval = Assign(val != null ? val.ReferenceIdDirect : 0);
            }

            return(retval);
        }