Esempio n. 1
0
        public override void Eval(EvaluatorState ev)
        {
            //Console.WriteLine(this.ToString());

            // second operand (source)
            ev.GetVal();

            // first operand (destination)
            IValue storeValue = ev.Stack.ReadTop();

            ev.Stack.Pop(); // pop destination or index

            if (storeValue.TypeOf() == ValueTypeID.TYPE_STOREREF)
            {
                DoStoreOp((ValueStore)storeValue.GetObjectValue(), ev.RegR, variation);
            }
            else if (storeValue.TypeOf() == ValueTypeID.TYPE_TABLEDATAREF)
            {
                ValueTableItem vti = (ValueTableItem)storeValue.GetObjectValue();

                if (ev.RegR.TypeOf() == ValueTypeID.TYPE_UNDEFINED)
                {
                    ValueTable table = vti.Parent;
                    table.Delete(vti.Key);
                }
                else
                {
                    DoTableOp(vti, ev.RegR, variation);
                }
            }
            else
            {
                throw new SharpNektonException(new SharpNektonError(SharpNektonErrorID.E_EXPTYPESTOREREF));
            }
        }