Пример #1
0
        public override DynValue Visit(IncrementationNode incrementationNode)
        {
            if (!(incrementationNode.Target is VariableNode) && !(incrementationNode.Target is IndexingNode))
            {
                throw new RuntimeException(
                          "A variable value is required as increment operand", incrementationNode.Line
                          );
            }

            var numValue = Visit(incrementationNode.Target);

            if (numValue.Type != DynValueType.Number)
            {
                throw new RuntimeException(
                          "Cannot increment this value because it's not a number.", incrementationNode.Line
                          );
            }

            if (incrementationNode.IsPrefix)
            {
                var retVal = new DynValue(numValue.Number + 1);
                numValue.CopyFrom(retVal);

                return(retVal);
            }
            else
            {
                var retVal = numValue.Copy();
                numValue.CopyFrom(new DynValue(numValue.Number + 1));

                return(retVal);
            }
        }
Пример #2
0
 public abstract DynValue Visit(IncrementationNode incrementationNode);