/// <summary>
 /// Agrega sin verficar que no contenga la llave. Usarse solo si se verifico que no esten presentes los valores antes
 /// </summary>
 /// <param name="key"></param>
 /// <param name="value"></param>
 public void UnsafeAdd(string key, PyObj value)
 {
     key = key.ToLowerInvariant();
     if (value.IsNull())
     {
         Table[key] = new MemoryBlock(MyNull.GetInstance());
     }
     if (value.IsPrimitive())
     {
         Table[key] = new MemoryBlock(MyPrimitiveFactory.CreateCopy((MyPrimitive)value));
     }
     else//Only option left is for value to be customInstance
     {
         Table[key] = new MemoryBlock(value);
     }
 }
 /// <summary>
 /// Retorna false si no agrego el valor a la tabla de simbolos. Solo se agregan valores que no esten presentes
 /// </summary>
 /// <param name="type"></param
 /// <param name="value"></param>
 /// <returns></returns>
 public bool Add(string key, PyObj value)
 {
     key = key.ToLowerInvariant();
     if (Table.ContainsKey(key))
     {
         return(false);
     }
     if (value.IsNull())
     {
         Table[key] = new MemoryBlock(MyNull.GetInstance());
     }
     if (value.IsPrimitive())
     {
         Table[key] = new MemoryBlock(MyPrimitiveFactory.CreateCopy((MyPrimitive)value));
     }
     else//Only option left is for value to be customInstance
     {
         Table[key] = new MemoryBlock(value);
     }
     return(true);
 }
        /// <summary>
        /// Retorna false si no se cambio el valor de la llave en la tabla de simbolos. Solo se cambian valores que ya estan presentes
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool Set(string key, PyObj value)
        {
            key = key.ToLowerInvariant();
            MemoryBlock memoryBlock;

            if (!Table.TryGetValue(key, out memoryBlock))
            {
                return(false);
            }
            if (value.IsNull())
            {
                memoryBlock.Value = MyNull.GetInstance();
            }
            if (value.IsPrimitive())
            {
                memoryBlock.Value = MyPrimitiveFactory.CreateCopy((MyPrimitive)value);
            }
            else//Only option left is for value to be customInstance
            {
                memoryBlock.Value = value;
            }
            return(true);
        }
示例#4
0
        public Word Visit(IncDecExpr incDecExpr)
        {
            var result = incDecExpr.Value.Accept(this);

            if (IsError(result))
            {
                return(result);
            }
            if (!IsMemoryBlock(result))
            {
                return(ErrorFactory.IncDecNonRefError(incDecExpr.Value, incDecExpr.IncDecOperator));
            }
            var memoryBlock = (MemoryBlock)result;
            var pyObj       = memoryBlock.Value;
            var pyObjType   = pyObj.GetMyType();

            if (!TypeConstants.IsNumber(pyObjType))
            {
                return(ErrorFactory.IncDecError(incDecExpr, incDecExpr.IncDecOperator, pyObj));
            }
            var pyObjCopy = MyPrimitiveFactory.CreateCopy((MyPrimitive)pyObj);

            switch (incDecExpr.IncDecOperator)
            {
            case IncDecOperator.PlusPlus:
                memoryBlock.Value = (PyObj)pyObj.BinaryOperation(BinaryOperator.Plus, new MyInt(1));
                break;

            case IncDecOperator.MinusMinus:
                memoryBlock.Value = (PyObj)pyObj.BinaryOperation(BinaryOperator.Minus, new MyInt(1));
                break;

            default:
                throw new Exception("Operador Inc dec no valido: " + incDecExpr.IncDecOperator);
            }
            return(pyObjCopy);
        }
示例#5
0
 public Word Visit(StringLiteralNode stringLiteralNode)
 {
     return(MyPrimitiveFactory.Create(stringLiteralNode.Value));
 }
示例#6
0
 public Word Visit(NumberLiteralNode numberLiteralNode)
 {
     return(MyPrimitiveFactory.Create(numberLiteralNode.Value));
 }
示例#7
0
 public Word Visit(IdentifierNode identifierNode)
 {
     return(MyPrimitiveFactory.Create(identifierNode.Value));
 }
示例#8
0
 public Word Visit(CharLiteralNode charLiteralNode)
 {
     return(MyPrimitiveFactory.Create(charLiteralNode.Value));
 }
示例#9
0
 public Word Visit(BooleanLiteralNode boolLiteralNode)
 {
     return(MyPrimitiveFactory.Create(boolLiteralNode.Value));
 }