2019-07-28 23:53:15 +03:00
|
|
|
|
// Copyright (c) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt)
|
2015-06-01 22:15:17 +03:00
|
|
|
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
|
|
|
|
|
using System;
|
2015-05-14 22:35:07 +03:00
|
|
|
|
using System.Collections;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
using PascalABCCompiler.SyntaxTree;
|
|
|
|
|
|
//using ICSharpCode.SharpDevelop.Dom;
|
|
|
|
|
|
using System.Reflection;
|
|
|
|
|
|
using PascalABCCompiler;
|
|
|
|
|
|
using PascalABCCompiler.TreeConverter;
|
|
|
|
|
|
using PascalABCCompiler.TreeRealization;
|
|
|
|
|
|
//using SymbolTable;
|
|
|
|
|
|
|
|
|
|
|
|
namespace CodeCompletion
|
|
|
|
|
|
{
|
|
|
|
|
|
public class ExpressionEvaluator
|
|
|
|
|
|
{
|
|
|
|
|
|
public Stack<RetValue> eval_stack = new Stack<RetValue>();
|
|
|
|
|
|
|
|
|
|
|
|
public void EvalPlus()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue right = eval_stack.Pop();
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null && right.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
TypeCode rcode = Type.GetTypeCode(right.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Int32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (int)left.prim_val + (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (int)left.prim_val + (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (int)left.prim_val + (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (int)left.prim_val + (long)right.prim_val; break;
|
2019-06-23 13:47:20 +03:00
|
|
|
|
case TypeCode.String : res.string_val = ((int)left.prim_val).ToString() + right.string_val; break;
|
2015-05-14 22:35:07 +03:00
|
|
|
|
case TypeCode.Int16 : res.prim_val = (int)left.prim_val + (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (int)left.prim_val + (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (int)left.prim_val + (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (int)left.prim_val + (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((int)left.prim_val) + (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (int)left.prim_val + (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Double:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (double)left.prim_val + (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (double)left.prim_val + (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (double)left.prim_val + (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (double)left.prim_val + (long)right.prim_val; break;
|
2019-06-23 13:47:20 +03:00
|
|
|
|
case TypeCode.String : res.string_val = ((double)left.prim_val).ToString() + right.string_val; break;
|
2015-05-14 22:35:07 +03:00
|
|
|
|
case TypeCode.Int16 : res.prim_val = (double)left.prim_val + (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (double)left.prim_val + (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (double)left.prim_val + (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (double)left.prim_val + (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (double)left.prim_val + (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (double)left.prim_val + (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Byte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (byte)left.prim_val + (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (byte)left.prim_val + (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (byte)left.prim_val + (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (byte)left.prim_val + (long)right.prim_val; break;
|
2019-06-23 13:47:20 +03:00
|
|
|
|
case TypeCode.String : res.string_val = ((byte)left.prim_val).ToString() + right.string_val; break;
|
2015-05-14 22:35:07 +03:00
|
|
|
|
case TypeCode.Int16 : res.prim_val = (byte)left.prim_val + (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (byte)left.prim_val + (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (byte)left.prim_val + (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (byte)left.prim_val + (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (byte)left.prim_val + (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (byte)left.prim_val + (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int16)left.prim_val + (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int16)left.prim_val + (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int16)left.prim_val + (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int16)left.prim_val + (long)right.prim_val; break;
|
2019-06-23 13:47:20 +03:00
|
|
|
|
case TypeCode.String : res.string_val = ((System.Int16)left.prim_val).ToString() + right.string_val; break;
|
2015-05-14 22:35:07 +03:00
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int16)left.prim_val + (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int16)left.prim_val + (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int16)left.prim_val + (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int16)left.prim_val + (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.Int16)left.prim_val + (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int16)left.prim_val + (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int64)left.prim_val + (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int64)left.prim_val + (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int64)left.prim_val + (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int64)left.prim_val + (long)right.prim_val; break;
|
2019-06-23 13:47:20 +03:00
|
|
|
|
case TypeCode.String : res.string_val = ((System.Int64)left.prim_val).ToString() + right.string_val; break;
|
2015-05-14 22:35:07 +03:00
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int64)left.prim_val + (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int64)left.prim_val + (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int64)left.prim_val + (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int64)left.prim_val + (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.Int64)left.prim_val + (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int64)left.prim_val + (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.String:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
2019-06-23 13:47:20 +03:00
|
|
|
|
case TypeCode.Byte : res.string_val = left.string_val + right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.Int32 : res.string_val = left.string_val + right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.Double : res.string_val = left.string_val + right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.Int64 : res.string_val = left.string_val + right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.String : res.string_val = left.string_val + right.string_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.string_val = left.string_val + right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.SByte : res.string_val = left.string_val + right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.string_val = left.string_val + right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.string_val = left.string_val + right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.string_val = left.string_val + right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.Single : res.string_val = left.string_val + right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.Char : res.string_val = left.string_val + right.prim_val.ToString(); break;
|
2015-05-14 22:35:07 +03:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.SByte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.SByte)left.prim_val + (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.SByte)left.prim_val + (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.SByte)left.prim_val + (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.SByte)left.prim_val + (long)right.prim_val; break;
|
2019-06-23 13:47:20 +03:00
|
|
|
|
case TypeCode.String : res.string_val = ((System.SByte)left.prim_val).ToString() + right.string_val; break;
|
2015-05-14 22:35:07 +03:00
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.SByte)left.prim_val + (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.SByte)left.prim_val + (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.SByte)left.prim_val + (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.SByte)left.prim_val + (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.SByte)left.prim_val + (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.SByte)left.prim_val + (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt16)left.prim_val + (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt16)left.prim_val + (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt16)left.prim_val + (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt16)left.prim_val + (long)right.prim_val; break;
|
2019-06-23 13:47:20 +03:00
|
|
|
|
case TypeCode.String : res.string_val = ((System.UInt16)left.prim_val).ToString() + right.string_val; break;
|
2015-05-14 22:35:07 +03:00
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt16)left.prim_val + (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt16)left.prim_val + (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt16)left.prim_val + (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt16)left.prim_val + (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt16)left.prim_val + (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt16)left.prim_val + (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt32)left.prim_val + (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt32)left.prim_val + (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt32)left.prim_val + (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt32)left.prim_val + (long)right.prim_val; break;
|
2019-06-23 13:47:20 +03:00
|
|
|
|
case TypeCode.String : res.string_val = ((System.UInt32)left.prim_val).ToString() + right.string_val; break;
|
2015-05-14 22:35:07 +03:00
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt32)left.prim_val + (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt32)left.prim_val + (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt32)left.prim_val + (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt32)left.prim_val + (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt32)left.prim_val + (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt32)left.prim_val + (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt64)left.prim_val + (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt64)left.prim_val + (System.UInt64)((int)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt64)left.prim_val + (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt64)left.prim_val + (System.UInt64)((long)right.prim_val); break;
|
2019-06-23 13:47:20 +03:00
|
|
|
|
case TypeCode.String : res.string_val = ((System.UInt64)left.prim_val).ToString() + right.string_val; break;
|
2015-05-14 22:35:07 +03:00
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt64)left.prim_val + (System.UInt64)((System.Int16)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt64)left.prim_val + (System.UInt64)((sbyte)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt64)left.prim_val + (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt64)left.prim_val + (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)left.prim_val + (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt64)left.prim_val + (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Single:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Single)left.prim_val + (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Single)left.prim_val + (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Single)left.prim_val + (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Single)left.prim_val + (long)right.prim_val; break;
|
2019-06-23 13:47:20 +03:00
|
|
|
|
case TypeCode.String : res.string_val = ((System.Single)left.prim_val).ToString() + right.string_val; break;
|
2015-05-14 22:35:07 +03:00
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Single)left.prim_val + (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Single)left.prim_val + (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Single)left.prim_val + (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Single)left.prim_val + (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Single)left.prim_val + (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Single)left.prim_val + (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Char:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
2019-06-23 13:47:20 +03:00
|
|
|
|
case TypeCode.Char : res.string_val = left.string_val + right.string_val; break;
|
|
|
|
|
|
case TypeCode.String : res.string_val = left.prim_val.ToString() + right.string_val; break;
|
2015-05-14 22:35:07 +03:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EvalMinus()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue right = eval_stack.Pop();
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null && right.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
TypeCode rcode = Type.GetTypeCode(right.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Int32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (int)left.prim_val - (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (int)left.prim_val - (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (int)left.prim_val - (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (int)left.prim_val - (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((int)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (int)left.prim_val - (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (int)left.prim_val - (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (int)left.prim_val - (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (int)left.prim_val - (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((int)left.prim_val) - (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (int)left.prim_val - (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Double:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (double)left.prim_val - (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (double)left.prim_val - (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (double)left.prim_val - (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (double)left.prim_val - (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((double)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (double)left.prim_val - (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (double)left.prim_val - (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (double)left.prim_val - (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (double)left.prim_val - (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (double)left.prim_val - (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (double)left.prim_val - (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Byte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (byte)left.prim_val - (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (byte)left.prim_val - (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (byte)left.prim_val - (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (byte)left.prim_val - (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((byte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (byte)left.prim_val - (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (byte)left.prim_val - (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (byte)left.prim_val - (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (byte)left.prim_val - (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (byte)left.prim_val - (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (byte)left.prim_val - (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int16)left.prim_val - (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int16)left.prim_val - (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int16)left.prim_val - (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int16)left.prim_val - (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int16)left.prim_val - (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int16)left.prim_val - (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int16)left.prim_val - (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int16)left.prim_val - (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.Int16)left.prim_val) - (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int16)left.prim_val - (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int64)left.prim_val - (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int64)left.prim_val - (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int64)left.prim_val - (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int64)left.prim_val - (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int64)left.prim_val - (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int64)left.prim_val - (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int64)left.prim_val - (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int64)left.prim_val - (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Int64)left.prim_val - (System.Int64)((System.UInt64)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int64)left.prim_val - (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case TypeCode.SByte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.SByte)left.prim_val - (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.SByte)left.prim_val - (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.SByte)left.prim_val - (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.SByte)left.prim_val - (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.SByte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.SByte)left.prim_val - (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.SByte)left.prim_val - (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.SByte)left.prim_val - (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.SByte)left.prim_val - (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.SByte)left.prim_val) - (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.SByte)left.prim_val - (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt16)left.prim_val - (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt16)left.prim_val - (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt16)left.prim_val - (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt16)left.prim_val - (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt16)left.prim_val - (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt16)left.prim_val - (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt16)left.prim_val - (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt16)left.prim_val - (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt16)left.prim_val - (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt16)left.prim_val - (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt32)left.prim_val - (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt32)left.prim_val - (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt32)left.prim_val - (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt32)left.prim_val - (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt32)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt32)left.prim_val - (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt32)left.prim_val - (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt32)left.prim_val - (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt32)left.prim_val - (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt32)left.prim_val - (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt32)left.prim_val - (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt64)left.prim_val - (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt64)left.prim_val - (System.UInt64)((int)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt64)left.prim_val - (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (long)((System.UInt64)left.prim_val) - (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt64)left.prim_val - (System.UInt64)((System.Int16)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt64)left.prim_val - (System.UInt64)((sbyte)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt64)left.prim_val - (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt64)left.prim_val - (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)left.prim_val - (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt64)left.prim_val - (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Single:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Single)left.prim_val - (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Single)left.prim_val - (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Single)left.prim_val - (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Single)left.prim_val - (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Single)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Single)left.prim_val - (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Single)left.prim_val - (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Single)left.prim_val - (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Single)left.prim_val - (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Single)left.prim_val - (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Single)left.prim_val - (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
2017-08-27 20:04:24 +03:00
|
|
|
|
|
|
|
|
|
|
public void EvalMult()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue right = eval_stack.Pop();
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null && right.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
TypeCode rcode = Type.GetTypeCode(right.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Int32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte: res.prim_val = (int)left.prim_val * (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32: res.prim_val = (int)left.prim_val * (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double: res.prim_val = (int)left.prim_val * (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64: res.prim_val = (int)left.prim_val * (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((int)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16: res.prim_val = (int)left.prim_val * (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte: res.prim_val = (int)left.prim_val * (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16: res.prim_val = (int)left.prim_val * (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32: res.prim_val = (int)left.prim_val * (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64: res.prim_val = (System.UInt64)((int)left.prim_val) * (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single: res.prim_val = (int)left.prim_val * (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Double:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte: res.prim_val = (double)left.prim_val * (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32: res.prim_val = (double)left.prim_val * (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double: res.prim_val = (double)left.prim_val * (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64: res.prim_val = (double)left.prim_val * (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((double)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16: res.prim_val = (double)left.prim_val * (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte: res.prim_val = (double)left.prim_val * (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16: res.prim_val = (double)left.prim_val * (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32: res.prim_val = (double)left.prim_val * (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64: res.prim_val = (double)left.prim_val * (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single: res.prim_val = (double)left.prim_val * (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Byte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte: res.prim_val = (byte)left.prim_val * (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32: res.prim_val = (byte)left.prim_val * (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double: res.prim_val = (byte)left.prim_val * (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64: res.prim_val = (byte)left.prim_val * (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((byte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16: res.prim_val = (byte)left.prim_val * (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte: res.prim_val = (byte)left.prim_val * (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16: res.prim_val = (byte)left.prim_val * (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32: res.prim_val = (byte)left.prim_val * (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64: res.prim_val = (byte)left.prim_val * (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single: res.prim_val = (byte)left.prim_val * (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte: res.prim_val = (System.Int16)left.prim_val * (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32: res.prim_val = (System.Int16)left.prim_val * (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double: res.prim_val = (System.Int16)left.prim_val * (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64: res.prim_val = (System.Int16)left.prim_val * (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16: res.prim_val = (System.Int16)left.prim_val * (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte: res.prim_val = (System.Int16)left.prim_val * (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16: res.prim_val = (System.Int16)left.prim_val * (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32: res.prim_val = (System.Int16)left.prim_val * (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64: res.prim_val = (System.UInt64)((System.Int16)left.prim_val) * (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single: res.prim_val = (System.Int16)left.prim_val * (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte: res.prim_val = (System.Int64)left.prim_val * (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32: res.prim_val = (System.Int64)left.prim_val * (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double: res.prim_val = (System.Int64)left.prim_val * (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64: res.prim_val = (System.Int64)left.prim_val * (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16: res.prim_val = (System.Int64)left.prim_val * (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte: res.prim_val = (System.Int64)left.prim_val * (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16: res.prim_val = (System.Int64)left.prim_val * (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32: res.prim_val = (System.Int64)left.prim_val * (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64: res.prim_val = (System.Int64)left.prim_val * (System.Int64)((System.UInt64)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.Single: res.prim_val = (System.Int64)left.prim_val * (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case TypeCode.SByte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte: res.prim_val = (System.SByte)left.prim_val * (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32: res.prim_val = (System.SByte)left.prim_val * (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double: res.prim_val = (System.SByte)left.prim_val * (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64: res.prim_val = (System.SByte)left.prim_val * (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.SByte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16: res.prim_val = (System.SByte)left.prim_val * (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte: res.prim_val = (System.SByte)left.prim_val * (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16: res.prim_val = (System.SByte)left.prim_val * (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32: res.prim_val = (System.SByte)left.prim_val * (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64: res.prim_val = (System.UInt64)((System.SByte)left.prim_val) * (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single: res.prim_val = (System.SByte)left.prim_val * (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte: res.prim_val = (System.UInt16)left.prim_val * (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32: res.prim_val = (System.UInt16)left.prim_val * (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double: res.prim_val = (System.UInt16)left.prim_val * (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64: res.prim_val = (System.UInt16)left.prim_val * (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16: res.prim_val = (System.UInt16)left.prim_val * (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte: res.prim_val = (System.UInt16)left.prim_val * (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16: res.prim_val = (System.UInt16)left.prim_val * (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32: res.prim_val = (System.UInt16)left.prim_val * (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64: res.prim_val = (System.UInt16)left.prim_val * (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single: res.prim_val = (System.UInt16)left.prim_val * (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte: res.prim_val = (System.UInt32)left.prim_val * (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32: res.prim_val = (System.UInt32)left.prim_val * (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double: res.prim_val = (System.UInt32)left.prim_val * (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64: res.prim_val = (System.UInt32)left.prim_val * (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt32)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16: res.prim_val = (System.UInt32)left.prim_val * (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte: res.prim_val = (System.UInt32)left.prim_val * (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16: res.prim_val = (System.UInt32)left.prim_val * (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32: res.prim_val = (System.UInt32)left.prim_val * (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64: res.prim_val = (System.UInt32)left.prim_val * (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single: res.prim_val = (System.UInt32)left.prim_val * (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte: res.prim_val = (System.UInt64)left.prim_val * (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32: res.prim_val = (System.UInt64)left.prim_val * (System.UInt64)((int)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.Double: res.prim_val = (System.UInt64)left.prim_val * (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64: res.prim_val = (long)((System.UInt64)left.prim_val) * (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16: res.prim_val = (System.UInt64)left.prim_val * (System.UInt64)((System.Int16)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.SByte: res.prim_val = (System.UInt64)left.prim_val * (System.UInt64)((sbyte)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.UInt16: res.prim_val = (System.UInt64)left.prim_val * (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32: res.prim_val = (System.UInt64)left.prim_val * (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64: res.prim_val = (System.UInt64)left.prim_val * (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single: res.prim_val = (System.UInt64)left.prim_val * (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Single:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte: res.prim_val = (System.Single)left.prim_val * (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32: res.prim_val = (System.Single)left.prim_val * (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double: res.prim_val = (System.Single)left.prim_val * (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64: res.prim_val = (System.Single)left.prim_val * (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Single)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16: res.prim_val = (System.Single)left.prim_val * (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte: res.prim_val = (System.Single)left.prim_val * (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16: res.prim_val = (System.Single)left.prim_val * (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32: res.prim_val = (System.Single)left.prim_val * (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64: res.prim_val = (System.Single)left.prim_val * (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single: res.prim_val = (System.Single)left.prim_val * (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
2015-05-14 22:35:07 +03:00
|
|
|
|
|
|
|
|
|
|
public void EvalDiv()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue right = eval_stack.Pop();
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null && right.prim_val != null)
|
|
|
|
|
|
{
|
2017-08-27 20:04:24 +03:00
|
|
|
|
res.prim_val = Convert.ToDouble(left.prim_val) / Convert.ToDouble(right.prim_val);
|
2015-05-14 22:35:07 +03:00
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EvalIDiv()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue right = eval_stack.Pop();
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null && right.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
TypeCode rcode = Type.GetTypeCode(right.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Int32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (int)left.prim_val / (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (int)left.prim_val / (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (int)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (int)left.prim_val / (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((int)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (int)left.prim_val / (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (int)left.prim_val / (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (int)left.prim_val / (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (int)left.prim_val / (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((int)left.prim_val) / (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (int)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Double:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (double)left.prim_val / (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (double)left.prim_val / (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (double)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (double)left.prim_val / (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((double)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (double)left.prim_val / (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (double)left.prim_val / (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (double)left.prim_val / (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (double)left.prim_val / (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (double)left.prim_val / (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (double)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Byte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (byte)left.prim_val / (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (byte)left.prim_val / (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (byte)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (byte)left.prim_val / (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((byte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (byte)left.prim_val / (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (byte)left.prim_val / (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (byte)left.prim_val / (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (byte)left.prim_val / (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (byte)left.prim_val / (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (byte)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int16)left.prim_val / (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int16)left.prim_val / (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int16)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int16)left.prim_val / (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int16)left.prim_val / (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int16)left.prim_val / (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int16)left.prim_val / (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int16)left.prim_val / (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.Int16)left.prim_val) / (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int16)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int64)left.prim_val / (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int64)left.prim_val / (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int64)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int64)left.prim_val / (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int64)left.prim_val / (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int64)left.prim_val / (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int64)left.prim_val / (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int64)left.prim_val / (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Int64)left.prim_val / (System.Int64)((System.UInt64)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int64)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case TypeCode.SByte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.SByte)left.prim_val / (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.SByte)left.prim_val / (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.SByte)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.SByte)left.prim_val / (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.SByte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.SByte)left.prim_val / (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.SByte)left.prim_val / (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.SByte)left.prim_val / (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.SByte)left.prim_val / (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.SByte)left.prim_val) / (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.SByte)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt16)left.prim_val / (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt16)left.prim_val / (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt16)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt16)left.prim_val / (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt16)left.prim_val / (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt16)left.prim_val / (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt16)left.prim_val / (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt16)left.prim_val / (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt16)left.prim_val / (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt16)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt32)left.prim_val / (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt32)left.prim_val / (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt32)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt32)left.prim_val / (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt32)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt32)left.prim_val / (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt32)left.prim_val / (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt32)left.prim_val / (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt32)left.prim_val / (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt32)left.prim_val / (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt32)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt64)left.prim_val / (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt64)left.prim_val / (System.UInt64)((int)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt64)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (long)((System.UInt64)left.prim_val) / (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt64)left.prim_val / (System.UInt64)((System.Int16)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt64)left.prim_val / (System.UInt64)((sbyte)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt64)left.prim_val / (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt64)left.prim_val / (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)left.prim_val / (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt64)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Single:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Single)left.prim_val / (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Single)left.prim_val / (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Single)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Single)left.prim_val / (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Single)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Single)left.prim_val / (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Single)left.prim_val / (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Single)left.prim_val / (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Single)left.prim_val / (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Single)left.prim_val / (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Single)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EvalAnd()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue right = eval_stack.Pop();
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null && right.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
TypeCode rcode = Type.GetTypeCode(right.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Int32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (int)left.prim_val & (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (int)left.prim_val & (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (int)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (int)left.prim_val & (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((int)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (int)left.prim_val & (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (int)left.prim_val & (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (int)left.prim_val & (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (int)left.prim_val & (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((int)left.prim_val) & (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (int)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Byte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (byte)left.prim_val & (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (byte)left.prim_val & (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (byte)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (byte)left.prim_val & (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((byte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (byte)left.prim_val & (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (byte)left.prim_val & (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (byte)left.prim_val & (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (byte)left.prim_val & (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (byte)left.prim_val & (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (byte)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int16)left.prim_val & (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int16)left.prim_val & (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.Int16)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int16)left.prim_val & (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int16)left.prim_val & (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int16)left.prim_val & (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int16)left.prim_val & (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int16)left.prim_val & (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.Int16)left.prim_val) & (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.Int16)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int64)left.prim_val & (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int64)left.prim_val & (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.Int64)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int64)left.prim_val & (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int64)left.prim_val & (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int64)left.prim_val & (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int64)left.prim_val & (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int64)left.prim_val & (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Int64)left.prim_val & (System.Int64)((System.UInt64)right.prim_val); break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.Int64)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case TypeCode.SByte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.SByte)left.prim_val & (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.SByte)left.prim_val & (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.SByte)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.SByte)left.prim_val & (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.SByte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.SByte)left.prim_val & (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.SByte)left.prim_val & (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.SByte)left.prim_val & (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.SByte)left.prim_val & (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.SByte)left.prim_val) & (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.SByte)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt16)left.prim_val & (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt16)left.prim_val & (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt16)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt16)left.prim_val & (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt16)left.prim_val & (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt16)left.prim_val & (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt16)left.prim_val & (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt16)left.prim_val & (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt16)left.prim_val & (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt16)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt32)left.prim_val & (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt32)left.prim_val & (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt32)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt32)left.prim_val & (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt32)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt32)left.prim_val & (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt32)left.prim_val & (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt32)left.prim_val & (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt32)left.prim_val & (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt32)left.prim_val & (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt32)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt64)left.prim_val & (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt64)left.prim_val & (System.UInt64)((int)right.prim_val); break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt64)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (long)((System.UInt64)left.prim_val) & (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt64)left.prim_val & (System.UInt64)((System.Int16)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt64)left.prim_val & (System.UInt64)((sbyte)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt64)left.prim_val & (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt64)left.prim_val & (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)left.prim_val & (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt64)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Boolean:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Boolean : res.prim_val = (bool)left.prim_val && (bool)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EvalOr()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue right = eval_stack.Pop();
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null && right.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
TypeCode rcode = Type.GetTypeCode(right.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Int32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (int)left.prim_val | (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (int)left.prim_val | (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (int)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (long)((int)left.prim_val) | (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((int)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (int)left.prim_val | (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (int)left.prim_val | (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (int)left.prim_val | (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (int)left.prim_val | (int)((System.UInt32)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((int)left.prim_val) | (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (int)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Byte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (byte)left.prim_val | (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (byte)left.prim_val | (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (byte)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (byte)left.prim_val | (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((byte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (byte)left.prim_val | (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (byte)left.prim_val | (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (byte)left.prim_val | (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (byte)left.prim_val | (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (byte)left.prim_val | (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (byte)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int16)left.prim_val | (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int16)left.prim_val | (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.Int16)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int16)left.prim_val | (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int16)left.prim_val | (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int16)left.prim_val | (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int16)left.prim_val | (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int16)left.prim_val | (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.Int16)left.prim_val) | (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.Int16)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int64)left.prim_val | (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int64)left.prim_val | (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.Int64)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int64)left.prim_val | (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int64)left.prim_val | (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int64)left.prim_val | (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int64)left.prim_val | (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int64)left.prim_val | (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Int64)left.prim_val | (System.Int64)((System.UInt64)right.prim_val); break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.Int64)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case TypeCode.SByte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.SByte)left.prim_val | (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.SByte)left.prim_val | (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.SByte)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.SByte)left.prim_val | (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.SByte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.SByte)left.prim_val | (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.SByte)left.prim_val | (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.SByte)left.prim_val | (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.SByte)left.prim_val | (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.SByte)left.prim_val) | (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.SByte)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt16)left.prim_val | (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt16)left.prim_val | (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt16)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt16)left.prim_val | (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt16)left.prim_val | (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt16)left.prim_val | (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt16)left.prim_val | (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt16)left.prim_val | (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt16)left.prim_val | (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt16)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt32)left.prim_val | (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt32)left.prim_val | (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt32)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt32)left.prim_val | (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt32)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt32)left.prim_val | (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt32)left.prim_val | (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt32)left.prim_val | (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt32)left.prim_val | (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt32)left.prim_val | (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt32)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt64)left.prim_val | (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt64)left.prim_val | (System.UInt64)((int)right.prim_val); break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt64)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (long)((System.UInt64)left.prim_val) | (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt64)left.prim_val | (System.UInt64)((System.Int16)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt64)left.prim_val | (System.UInt64)((sbyte)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt64)left.prim_val | (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt64)left.prim_val | (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)left.prim_val | (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt64)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Boolean:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Boolean : res.prim_val = (bool)left.prim_val || (bool)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EvalXor()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue right = eval_stack.Pop();
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null && right.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
TypeCode rcode = Type.GetTypeCode(right.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Int32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (int)left.prim_val ^ (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (int)left.prim_val ^ (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (int)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (int)left.prim_val ^ (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((int)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (int)left.prim_val ^ (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (int)left.prim_val ^ (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (int)left.prim_val ^ (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (int)left.prim_val ^ (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((int)left.prim_val) ^ (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (int)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Byte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (byte)left.prim_val ^ (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (byte)left.prim_val ^ (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (byte)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (byte)left.prim_val ^ (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((byte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (byte)left.prim_val ^ (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (byte)left.prim_val ^ (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (byte)left.prim_val ^ (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (byte)left.prim_val ^ (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (byte)left.prim_val ^ (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (byte)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int16)left.prim_val ^ (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int16)left.prim_val ^ (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.Int16)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int16)left.prim_val ^ (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int16)left.prim_val ^ (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int16)left.prim_val ^ (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int16)left.prim_val ^ (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int16)left.prim_val ^ (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.Int16)left.prim_val) ^ (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.Int16)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int64)left.prim_val ^ (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int64)left.prim_val ^ (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.Int64)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int64)left.prim_val ^ (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int64)left.prim_val ^ (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int64)left.prim_val ^ (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int64)left.prim_val ^ (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int64)left.prim_val ^ (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Int64)left.prim_val ^ (System.Int64)((System.UInt64)right.prim_val); break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.Int64)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case TypeCode.SByte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.SByte)left.prim_val ^ (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.SByte)left.prim_val ^ (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.SByte)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.SByte)left.prim_val ^ (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.SByte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.SByte)left.prim_val ^ (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.SByte)left.prim_val ^ (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.SByte)left.prim_val ^ (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.SByte)left.prim_val ^ (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.SByte)left.prim_val) ^ (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.SByte)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt16)left.prim_val ^ (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt16)left.prim_val ^ (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt16)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt16)left.prim_val ^ (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt16)left.prim_val ^ (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt16)left.prim_val ^ (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt16)left.prim_val ^ (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt16)left.prim_val ^ (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt16)left.prim_val ^ (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt16)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt32)left.prim_val ^ (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt32)left.prim_val ^ (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt32)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt32)left.prim_val ^ (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt32)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt32)left.prim_val ^ (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt32)left.prim_val ^ (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt32)left.prim_val ^ (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt32)left.prim_val ^ (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt32)left.prim_val ^ (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt32)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt64)left.prim_val ^ (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt64)left.prim_val ^ (System.UInt64)((int)right.prim_val); break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt64)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (long)((System.UInt64)left.prim_val) ^ (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt64)left.prim_val ^ (System.UInt64)((System.Int16)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt64)left.prim_val ^ (System.UInt64)((sbyte)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt64)left.prim_val ^ (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt64)left.prim_val ^ (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)left.prim_val ^ (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt64)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EvalBitwiseLeft()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue right = eval_stack.Pop();
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null && right.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
TypeCode rcode = Type.GetTypeCode(right.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Int32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (int)left.prim_val << (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (int)left.prim_val << (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (int)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Int64 : res.prim_val = (long)((int)left.prim_val) << (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((int)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (int)left.prim_val << (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (int)left.prim_val << (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (int)left.prim_val << (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (int)left.prim_val << (int)((System.UInt32)right.prim_val); break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.UInt64)((int)left.prim_val) << (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (int)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Byte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (byte)left.prim_val << (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (byte)left.prim_val << (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (byte)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Int64 : res.prim_val = (long)((byte)left.prim_val) << (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((byte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (byte)left.prim_val << (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (byte)left.prim_val << (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (byte)left.prim_val << (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt32 : res.prim_val = (System.UInt32)((byte)left.prim_val) << (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.UInt64)((byte)left.prim_val) << (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (byte)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int16)left.prim_val << (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int16)left.prim_val << (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.Int16)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Int64 : res.prim_val = (long)((System.Int16)left.prim_val) << (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int16)left.prim_val << (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int16)left.prim_val << (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int16)left.prim_val << (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt32 : res.prim_val = (System.UInt32)((System.Int16)left.prim_val) << (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.Int16)left.prim_val) << (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.Int16)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int64)left.prim_val << (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int64)left.prim_val << (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.Int64)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Int64 : res.prim_val = (long)((System.Int64)left.prim_val) << (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int64)left.prim_val << (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int64)left.prim_val << (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int64)left.prim_val << (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt32 : res.prim_val = (System.Int64)left.prim_val << (System.Int64)((System.UInt32)right.prim_val); break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.Int64)left.prim_val << (System.Int64)((System.UInt64)right.prim_val); break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.Int64)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case TypeCode.SByte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.SByte)left.prim_val << (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.SByte)left.prim_val << (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.SByte)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Int64 : res.prim_val = (System.SByte)left.prim_val << (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.SByte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.SByte)left.prim_val << (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.SByte)left.prim_val << (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.SByte)left.prim_val << (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt32 : res.prim_val = (System.UInt32)((System.SByte)left.prim_val) << (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.SByte)left.prim_val) << (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.SByte)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt16)left.prim_val << (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt16)left.prim_val << (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt16)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Int64 : res.prim_val = (System.UInt16)left.prim_val << (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt16)left.prim_val << (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt16)left.prim_val << (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt16)left.prim_val << (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt32 : res.prim_val = (System.UInt16)left.prim_val << (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.UInt16)left.prim_val << (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt16)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt32)left.prim_val << (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt32)left.prim_val << (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt32)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Int64 : res.prim_val = (System.UInt32)left.prim_val << (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt32)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt32)left.prim_val << (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt32)left.prim_val << (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt32)left.prim_val << (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt32 : res.prim_val = (System.UInt32)left.prim_val << (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.UInt32)left.prim_val << (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt32)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt64)left.prim_val << (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt64)left.prim_val << (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt64)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Int64 : res.prim_val = (System.UInt64)left.prim_val << (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt64)left.prim_val << (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt64)left.prim_val << (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt64)left.prim_val << (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt32 : res.prim_val = (System.UInt64)left.prim_val << (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.UInt64)left.prim_val << (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt64)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EvalBitwiseRight()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue right = eval_stack.Pop();
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null && right.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
TypeCode rcode = Type.GetTypeCode(right.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Int32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (int)left.prim_val >> (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (int)left.prim_val >> (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (int)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Int64 : res.prim_val = (int)left.prim_val >> (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((int)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (int)left.prim_val >> (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (int)left.prim_val >> (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (int)left.prim_val >> (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt32 : res.prim_val = (int)left.prim_val >> (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (int)left.prim_val >> (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (int)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Byte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (byte)left.prim_val >> (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (byte)left.prim_val >> (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (byte)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Int64 : res.prim_val = (byte)left.prim_val >> (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((byte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (byte)left.prim_val >> (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (byte)left.prim_val >> (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (byte)left.prim_val >> (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt32 : res.prim_val = (byte)left.prim_val >> (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (byte)left.prim_val >> (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (byte)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int16)left.prim_val >> (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int16)left.prim_val >> (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.Int16)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Int64 : res.prim_val = (System.Int16)left.prim_val >> (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int16)left.prim_val >> (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int16)left.prim_val >> (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int16)left.prim_val >> (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt32 : res.prim_val = (System.Int16)left.prim_val >> (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.Int16)left.prim_val >> (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.Int16)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int64)left.prim_val >> (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int64)left.prim_val >> (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.Int64)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Int64 : res.prim_val = (System.Int64)left.prim_val >> (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int64)left.prim_val >> (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int64)left.prim_val >> (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int64)left.prim_val >> (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt32 : res.prim_val = (System.Int64)left.prim_val >> (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.Int64)left.prim_val >> (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.Int64)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case TypeCode.SByte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.SByte)left.prim_val >> (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.SByte)left.prim_val >> (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.SByte)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Int64 : res.prim_val = (System.SByte)left.prim_val >> (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.SByte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.SByte)left.prim_val >> (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.SByte)left.prim_val >> (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.SByte)left.prim_val >> (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt32 : res.prim_val = (System.SByte)left.prim_val >> (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.SByte)left.prim_val >> (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.SByte)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt16)left.prim_val >> (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt16)left.prim_val >> (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt16)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Int64 : res.prim_val = (System.UInt16)left.prim_val >> (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt16)left.prim_val >> (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt16)left.prim_val >> (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt16)left.prim_val >> (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt32 : res.prim_val = (System.UInt16)left.prim_val >> (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.UInt16)left.prim_val >> (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt16)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt32)left.prim_val >> (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt32)left.prim_val >> (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt32)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Int64 : res.prim_val = (System.UInt32)left.prim_val >> (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt32)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt32)left.prim_val >> (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt32)left.prim_val >> (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt32)left.prim_val >> (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt32 : res.prim_val = (System.UInt32)left.prim_val >> (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.UInt32)left.prim_val >> (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt32)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt64)left.prim_val >> (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt64)left.prim_val >> (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt64)left.prim_val / (double)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Int64 : res.prim_val = (System.UInt64)left.prim_val >> (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt64)left.prim_val >> (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt64)left.prim_val >> (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt64)left.prim_val >> (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt32 : res.prim_val = (System.UInt64)left.prim_val >> (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.UInt64)left.prim_val >> (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt64)left.prim_val / (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EvalEqual()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue right = eval_stack.Pop();
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null && right.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
TypeCode rcode = Type.GetTypeCode(right.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Int32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (int)left.prim_val == (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (int)left.prim_val == (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (int)left.prim_val == (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (int)left.prim_val == (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((int)left.prim_val).ToString() == (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (int)left.prim_val == (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (int)left.prim_val == (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (int)left.prim_val == (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (int)left.prim_val == (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((int)left.prim_val) == (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (int)left.prim_val == (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Double:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (double)left.prim_val == (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (double)left.prim_val == (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (double)left.prim_val == (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (double)left.prim_val == (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((double)left.prim_val).ToString() == (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (double)left.prim_val == (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (double)left.prim_val == (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (double)left.prim_val == (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (double)left.prim_val == (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (double)left.prim_val == (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (double)left.prim_val == (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Byte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (byte)left.prim_val == (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (byte)left.prim_val == (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (byte)left.prim_val == (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (byte)left.prim_val == (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((byte)left.prim_val).ToString() == (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (byte)left.prim_val == (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (byte)left.prim_val == (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (byte)left.prim_val == (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (byte)left.prim_val == (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (byte)left.prim_val == (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (byte)left.prim_val == (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int16)left.prim_val == (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int16)left.prim_val == (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int16)left.prim_val == (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int16)left.prim_val == (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((System.Int16)left.prim_val).ToString() == (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int16)left.prim_val == (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int16)left.prim_val == (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int16)left.prim_val == (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int16)left.prim_val == (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.Int16)left.prim_val + (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int16)left.prim_val == (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int64)left.prim_val == (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int64)left.prim_val == (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int64)left.prim_val == (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int64)left.prim_val == (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((System.Int64)left.prim_val).ToString() == (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int64)left.prim_val == (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int64)left.prim_val == (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int64)left.prim_val == (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int64)left.prim_val == (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.Int64)left.prim_val + (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int64)left.prim_val == (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.String:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (string)left.prim_val == right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (string)left.prim_val == right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (string)left.prim_val == right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (string)left.prim_val == right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = (string)left.prim_val == right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (string)left.prim_val == right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (string)left.prim_val == right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (string)left.prim_val == right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (string)left.prim_val == right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (string)left.prim_val == right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (string)left.prim_val == right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.Char : res.prim_val = (string)left.prim_val == right.prim_val.ToString(); break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.SByte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.SByte)left.prim_val == (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.SByte)left.prim_val == (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.SByte)left.prim_val == (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.SByte)left.prim_val == (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((System.SByte)left.prim_val).ToString() == (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.SByte)left.prim_val == (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.SByte)left.prim_val == (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.SByte)left.prim_val == (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.SByte)left.prim_val == (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.SByte)left.prim_val + (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.SByte)left.prim_val == (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt16)left.prim_val == (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt16)left.prim_val == (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt16)left.prim_val == (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt16)left.prim_val == (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((System.UInt16)left.prim_val).ToString() == (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt16)left.prim_val == (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt16)left.prim_val == (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt16)left.prim_val == (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt16)left.prim_val == (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt16)left.prim_val == (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt16)left.prim_val == (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt32)left.prim_val == (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt32)left.prim_val == (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt32)left.prim_val == (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt32)left.prim_val == (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((System.UInt32)left.prim_val).ToString() == (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt32)left.prim_val == (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt32)left.prim_val == (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt32)left.prim_val == (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt32)left.prim_val == (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt32)left.prim_val == (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt32)left.prim_val == (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt64)left.prim_val == (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt64)left.prim_val == (System.UInt64)((int)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt64)left.prim_val == (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt64)left.prim_val == (System.UInt64)((long)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((System.UInt64)left.prim_val).ToString() == (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt64)left.prim_val == (System.UInt64)((System.Int16)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt64)left.prim_val == (System.UInt64)((sbyte)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt64)left.prim_val == (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt64)left.prim_val == (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)left.prim_val == (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt64)left.prim_val == (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Single:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Single)left.prim_val == (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Single)left.prim_val == (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Single)left.prim_val == (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Single)left.prim_val == (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((System.Single)left.prim_val).ToString() == (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Single)left.prim_val == (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Single)left.prim_val == (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Single)left.prim_val == (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Single)left.prim_val == (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Single)left.prim_val == (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Single)left.prim_val == (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Boolean:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Boolean : res.prim_val = (bool)left.prim_val == (bool)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Char:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Char: res.prim_val = (char)left.prim_val == (char)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String: res.prim_val = left.prim_val.ToString() == right.prim_val.ToString(); break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EvalNotEqual()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue right = eval_stack.Pop();
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null && right.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
TypeCode rcode = Type.GetTypeCode(right.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Int32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (int)left.prim_val != (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (int)left.prim_val != (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (int)left.prim_val != (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (int)left.prim_val != (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((int)left.prim_val).ToString() != (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (int)left.prim_val != (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (int)left.prim_val != (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (int)left.prim_val != (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (int)left.prim_val != (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((int)left.prim_val) != (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (int)left.prim_val != (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Double:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (double)left.prim_val != (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (double)left.prim_val != (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (double)left.prim_val != (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (double)left.prim_val != (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((double)left.prim_val).ToString() != (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (double)left.prim_val != (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (double)left.prim_val != (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (double)left.prim_val != (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (double)left.prim_val != (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (double)left.prim_val != (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (double)left.prim_val != (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Byte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (byte)left.prim_val != (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (byte)left.prim_val != (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (byte)left.prim_val != (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (byte)left.prim_val != (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((byte)left.prim_val).ToString() != (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (byte)left.prim_val != (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (byte)left.prim_val != (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (byte)left.prim_val != (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (byte)left.prim_val != (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (byte)left.prim_val != (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (byte)left.prim_val != (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int16)left.prim_val != (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int16)left.prim_val != (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int16)left.prim_val != (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int16)left.prim_val != (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((System.Int16)left.prim_val).ToString() != (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int16)left.prim_val != (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int16)left.prim_val != (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int16)left.prim_val != (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int16)left.prim_val != (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.Int16)left.prim_val != (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int16)left.prim_val != (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int64)left.prim_val != (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int64)left.prim_val != (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int64)left.prim_val != (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int64)left.prim_val != (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((System.Int64)left.prim_val).ToString() != (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int64)left.prim_val != (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int64)left.prim_val != (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int64)left.prim_val != (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int64)left.prim_val != (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.Int64)left.prim_val != (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int64)left.prim_val != (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.String:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (string)left.prim_val != right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (string)left.prim_val != right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (string)left.prim_val != right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (string)left.prim_val != right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = (string)left.prim_val != right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (string)left.prim_val != right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (string)left.prim_val != right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (string)left.prim_val != right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (string)left.prim_val != right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (string)left.prim_val != right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (string)left.prim_val != right.prim_val.ToString(); break;
|
|
|
|
|
|
case TypeCode.Char : res.prim_val = (string)left.prim_val != right.prim_val.ToString(); break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.SByte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.SByte)left.prim_val != (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.SByte)left.prim_val != (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.SByte)left.prim_val != (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.SByte)left.prim_val != (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((System.SByte)left.prim_val).ToString() != (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.SByte)left.prim_val != (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.SByte)left.prim_val != (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.SByte)left.prim_val != (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.SByte)left.prim_val != (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64 : res.prim_val = (System.SByte)left.prim_val != (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.SByte)left.prim_val != (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt16)left.prim_val != (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt16)left.prim_val != (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt16)left.prim_val != (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt16)left.prim_val != (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((System.UInt16)left.prim_val).ToString() != (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt16)left.prim_val != (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt16)left.prim_val != (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt16)left.prim_val != (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt16)left.prim_val != (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt16)left.prim_val != (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt16)left.prim_val != (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt32)left.prim_val != (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt32)left.prim_val != (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt32)left.prim_val != (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt32)left.prim_val != (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((System.UInt32)left.prim_val).ToString() != (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt32)left.prim_val != (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt32)left.prim_val != (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt32)left.prim_val != (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt32)left.prim_val != (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt32)left.prim_val != (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt32)left.prim_val != (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt64)left.prim_val != (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt64)left.prim_val != (System.UInt64)((int)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt64)left.prim_val != (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt64)left.prim_val != (System.UInt64)((long)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((System.UInt64)left.prim_val).ToString() != (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt64)left.prim_val != (System.UInt64)((System.Int16)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt64)left.prim_val != (System.UInt64)((sbyte)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt64)left.prim_val != (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt64)left.prim_val != (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)left.prim_val != (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt64)left.prim_val != (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Single:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Single)left.prim_val != (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Single)left.prim_val != (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Single)left.prim_val != (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Single)left.prim_val != (long)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.String : res.prim_val = ((System.Single)left.prim_val).ToString() != (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Single)left.prim_val != (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Single)left.prim_val != (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Single)left.prim_val != (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Single)left.prim_val != (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Single)left.prim_val != (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Single)left.prim_val != (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Boolean:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Boolean : res.prim_val = (bool)left.prim_val != (bool)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Char:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Char: res.prim_val = (char)left.prim_val != (char)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EvalLess()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue right = eval_stack.Pop();
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null && right.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
TypeCode rcode = Type.GetTypeCode(right.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Int32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (int)left.prim_val < (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (int)left.prim_val < (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (int)left.prim_val < (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (int)left.prim_val < (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((int)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (int)left.prim_val < (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (int)left.prim_val < (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (int)left.prim_val < (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (int)left.prim_val < (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((int)left.prim_val) < (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (int)left.prim_val < (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Double:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (double)left.prim_val < (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (double)left.prim_val < (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (double)left.prim_val < (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (double)left.prim_val < (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((double)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (double)left.prim_val < (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (double)left.prim_val < (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (double)left.prim_val < (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (double)left.prim_val < (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (double)left.prim_val < (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (double)left.prim_val < (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Byte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (byte)left.prim_val < (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (byte)left.prim_val < (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (byte)left.prim_val < (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (byte)left.prim_val < (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((byte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (byte)left.prim_val < (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (byte)left.prim_val < (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (byte)left.prim_val < (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (byte)left.prim_val < (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (byte)left.prim_val < (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (byte)left.prim_val < (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int16)left.prim_val < (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int16)left.prim_val < (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int16)left.prim_val < (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int16)left.prim_val < (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int16)left.prim_val < (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int16)left.prim_val < (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int16)left.prim_val < (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int16)left.prim_val < (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.Int16)left.prim_val) < (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int16)left.prim_val < (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int64)left.prim_val < (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int64)left.prim_val < (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int64)left.prim_val < (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int64)left.prim_val < (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int64)left.prim_val < (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int64)left.prim_val < (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int64)left.prim_val < (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int64)left.prim_val < (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Int64)left.prim_val < (System.Int64)((System.UInt64)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int64)left.prim_val < (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case TypeCode.SByte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.SByte)left.prim_val < (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.SByte)left.prim_val < (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.SByte)left.prim_val < (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.SByte)left.prim_val < (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.SByte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.SByte)left.prim_val < (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.SByte)left.prim_val < (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.SByte)left.prim_val < (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.SByte)left.prim_val < (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.SByte)left.prim_val) < (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.SByte)left.prim_val < (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt16)left.prim_val < (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt16)left.prim_val < (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt16)left.prim_val < (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt16)left.prim_val < (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt16)left.prim_val < (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt16)left.prim_val < (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt16)left.prim_val < (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt16)left.prim_val < (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt16)left.prim_val < (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt16)left.prim_val < (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt32)left.prim_val < (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt32)left.prim_val < (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt32)left.prim_val < (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt32)left.prim_val < (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt32)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt32)left.prim_val < (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt32)left.prim_val < (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt32)left.prim_val < (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt32)left.prim_val < (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt32)left.prim_val < (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt32)left.prim_val < (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt64)left.prim_val < (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt64)left.prim_val < (System.UInt64)((int)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt64)left.prim_val < (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (long)((System.UInt64)left.prim_val) < (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt64)left.prim_val < (System.UInt64)((System.Int16)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt64)left.prim_val < (System.UInt64)((sbyte)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt64)left.prim_val < (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt64)left.prim_val < (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)left.prim_val < (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt64)left.prim_val < (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Single:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Single)left.prim_val < (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Single)left.prim_val < (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Single)left.prim_val < (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Single)left.prim_val < (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Single)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Single)left.prim_val < (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Single)left.prim_val < (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Single)left.prim_val < (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Single)left.prim_val < (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Single)left.prim_val < (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Single)left.prim_val < (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Boolean:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Boolean : res.prim_val = (int)left.prim_val < (int)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Char:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Char: res.prim_val = (char)left.prim_val < (char)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EvalLessEqual()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue right = eval_stack.Pop();
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null && right.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
TypeCode rcode = Type.GetTypeCode(right.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Int32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (int)left.prim_val <= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (int)left.prim_val <= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (int)left.prim_val <= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (int)left.prim_val <= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((int)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (int)left.prim_val <= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (int)left.prim_val <= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (int)left.prim_val <= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (int)left.prim_val <= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((int)left.prim_val) <= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (int)left.prim_val <= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Double:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (double)left.prim_val <= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (double)left.prim_val <= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (double)left.prim_val <= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (double)left.prim_val <= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((double)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (double)left.prim_val <= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (double)left.prim_val <= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (double)left.prim_val <= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (double)left.prim_val <= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (double)left.prim_val <= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (double)left.prim_val <= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Byte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (byte)left.prim_val <= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (byte)left.prim_val <= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (byte)left.prim_val <= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (byte)left.prim_val <= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((byte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (byte)left.prim_val <= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (byte)left.prim_val <= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (byte)left.prim_val <= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (byte)left.prim_val <= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (byte)left.prim_val <= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (byte)left.prim_val <= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int16)left.prim_val <= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int16)left.prim_val <= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int16)left.prim_val <= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int16)left.prim_val <= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int16)left.prim_val <= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int16)left.prim_val <= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int16)left.prim_val <= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int16)left.prim_val <= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.Int16)left.prim_val) <= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int16)left.prim_val <= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int64)left.prim_val <= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int64)left.prim_val <= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int64)left.prim_val <= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int64)left.prim_val <= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int64)left.prim_val <= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int64)left.prim_val <= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int64)left.prim_val <= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int64)left.prim_val <= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Int64)left.prim_val <= (System.Int64)((System.UInt64)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int64)left.prim_val <= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case TypeCode.SByte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.SByte)left.prim_val <= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.SByte)left.prim_val <= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.SByte)left.prim_val <= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.SByte)left.prim_val <= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.SByte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.SByte)left.prim_val <= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.SByte)left.prim_val <= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.SByte)left.prim_val <= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.SByte)left.prim_val <= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.SByte)left.prim_val) <= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.SByte)left.prim_val <= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt16)left.prim_val <= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt16)left.prim_val <= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt16)left.prim_val <= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt16)left.prim_val <= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt16)left.prim_val <= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt16)left.prim_val <= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt16)left.prim_val <= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt16)left.prim_val <= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt16)left.prim_val <= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt16)left.prim_val <= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt32)left.prim_val <= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt32)left.prim_val <= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt32)left.prim_val <= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt32)left.prim_val <= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt32)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt32)left.prim_val <= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt32)left.prim_val <= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt32)left.prim_val <= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt32)left.prim_val <= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt32)left.prim_val <= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt32)left.prim_val <= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt64)left.prim_val <= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt64)left.prim_val <= (System.UInt64)((int)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt64)left.prim_val <= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (long)((System.UInt64)left.prim_val) <= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt64)left.prim_val <= (System.UInt64)((System.Int16)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt64)left.prim_val <= (System.UInt64)((sbyte)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt64)left.prim_val <= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt64)left.prim_val <= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)left.prim_val <= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt64)left.prim_val <= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Single:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Single)left.prim_val <= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Single)left.prim_val <= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Single)left.prim_val <= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Single)left.prim_val <= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Single)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Single)left.prim_val <= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Single)left.prim_val <= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Single)left.prim_val <= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Single)left.prim_val <= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Single)left.prim_val <= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Single)left.prim_val <= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Boolean:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Boolean : res.prim_val = (int)left.prim_val <= (int)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Char:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Char: res.prim_val = (char)left.prim_val <= (char)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EvalGreater()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue right = eval_stack.Pop();
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null && right.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
TypeCode rcode = Type.GetTypeCode(right.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Int32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (int)left.prim_val > (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (int)left.prim_val > (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (int)left.prim_val > (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (int)left.prim_val > (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((int)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (int)left.prim_val > (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (int)left.prim_val > (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (int)left.prim_val > (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (int)left.prim_val > (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((int)left.prim_val) > (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (int)left.prim_val > (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Double:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (double)left.prim_val > (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (double)left.prim_val > (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (double)left.prim_val > (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (double)left.prim_val > (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((double)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (double)left.prim_val > (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (double)left.prim_val > (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (double)left.prim_val > (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (double)left.prim_val > (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (double)left.prim_val > (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (double)left.prim_val > (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Byte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (byte)left.prim_val > (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (byte)left.prim_val > (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (byte)left.prim_val > (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (byte)left.prim_val > (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((byte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (byte)left.prim_val > (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (byte)left.prim_val > (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (byte)left.prim_val > (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (byte)left.prim_val > (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (byte)left.prim_val > (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (byte)left.prim_val > (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int16)left.prim_val > (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int16)left.prim_val > (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int16)left.prim_val > (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int16)left.prim_val > (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int16)left.prim_val > (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int16)left.prim_val > (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int16)left.prim_val > (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int16)left.prim_val > (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.Int16)left.prim_val) > (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int16)left.prim_val > (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int64)left.prim_val > (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int64)left.prim_val > (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int64)left.prim_val > (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int64)left.prim_val > (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int64)left.prim_val > (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int64)left.prim_val > (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int64)left.prim_val > (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int64)left.prim_val > (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Int64)left.prim_val > (System.Int64)((System.UInt64)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int64)left.prim_val > (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case TypeCode.SByte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.SByte)left.prim_val > (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.SByte)left.prim_val > (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.SByte)left.prim_val > (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.SByte)left.prim_val > (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.SByte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.SByte)left.prim_val > (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.SByte)left.prim_val > (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.SByte)left.prim_val > (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.SByte)left.prim_val > (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.SByte)left.prim_val) > (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.SByte)left.prim_val > (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt16)left.prim_val > (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt16)left.prim_val > (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt16)left.prim_val > (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt16)left.prim_val > (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt16)left.prim_val > (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt16)left.prim_val > (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt16)left.prim_val > (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt16)left.prim_val > (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt16)left.prim_val > (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt16)left.prim_val > (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt32)left.prim_val > (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt32)left.prim_val > (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt32)left.prim_val > (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt32)left.prim_val > (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt32)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt32)left.prim_val > (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt32)left.prim_val > (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt32)left.prim_val > (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt32)left.prim_val > (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt32)left.prim_val > (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt32)left.prim_val > (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt64)left.prim_val > (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt64)left.prim_val > (System.UInt64)((int)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt64)left.prim_val > (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (long)((System.UInt64)left.prim_val) > (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt64)left.prim_val > (System.UInt64)((System.Int16)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt64)left.prim_val > (System.UInt64)((sbyte)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt64)left.prim_val > (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt64)left.prim_val > (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)left.prim_val > (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt64)left.prim_val > (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Single:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Single)left.prim_val > (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Single)left.prim_val > (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Single)left.prim_val > (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Single)left.prim_val > (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Single)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Single)left.prim_val > (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Single)left.prim_val > (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Single)left.prim_val > (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Single)left.prim_val > (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Single)left.prim_val > (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Single)left.prim_val > (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Boolean:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Boolean : res.prim_val = (int)left.prim_val > (int)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Char:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Char: res.prim_val = (char)left.prim_val > (char)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EvalGreaterEqual()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue right = eval_stack.Pop();
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null && right.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
TypeCode rcode = Type.GetTypeCode(right.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Int32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (int)left.prim_val >= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (int)left.prim_val >= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (int)left.prim_val >= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (int)left.prim_val >= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((int)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (int)left.prim_val >= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (int)left.prim_val >= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (int)left.prim_val >= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (int)left.prim_val >= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((int)left.prim_val) >= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (int)left.prim_val >= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Double:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (double)left.prim_val >= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (double)left.prim_val >= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (double)left.prim_val >= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (double)left.prim_val >= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((double)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (double)left.prim_val >= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (double)left.prim_val >= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (double)left.prim_val >= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (double)left.prim_val >= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (double)left.prim_val >= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (double)left.prim_val >= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Byte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (byte)left.prim_val >= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (byte)left.prim_val >= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (byte)left.prim_val >= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (byte)left.prim_val >= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((byte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (byte)left.prim_val >= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (byte)left.prim_val >= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (byte)left.prim_val >= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (byte)left.prim_val >= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (byte)left.prim_val >= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (byte)left.prim_val >= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int16)left.prim_val >= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int16)left.prim_val >= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int16)left.prim_val >= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int16)left.prim_val >= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int16)left.prim_val >= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int16)left.prim_val >= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int16)left.prim_val >= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int16)left.prim_val >= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.Int16)left.prim_val) >= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int16)left.prim_val >= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int64)left.prim_val >= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int64)left.prim_val >= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Int64)left.prim_val >= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int64)left.prim_val >= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int64)left.prim_val >= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int64)left.prim_val >= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int64)left.prim_val >= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int64)left.prim_val >= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Int64)left.prim_val >= (System.Int64)((System.UInt64)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Int64)left.prim_val >= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case TypeCode.SByte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.SByte)left.prim_val >= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.SByte)left.prim_val >= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.SByte)left.prim_val >= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.SByte)left.prim_val >= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.SByte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.SByte)left.prim_val >= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.SByte)left.prim_val >= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.SByte)left.prim_val >= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.SByte)left.prim_val >= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.SByte)left.prim_val) >= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.SByte)left.prim_val >= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt16)left.prim_val >= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt16)left.prim_val >= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt16)left.prim_val >= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt16)left.prim_val >= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt16)left.prim_val >= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt16)left.prim_val >= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt16)left.prim_val >= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt16)left.prim_val >= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt16)left.prim_val >= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt16)left.prim_val >= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt32)left.prim_val >= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt32)left.prim_val >= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt32)left.prim_val >= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt32)left.prim_val >= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt32)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt32)left.prim_val >= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt32)left.prim_val >= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt32)left.prim_val >= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt32)left.prim_val >= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt32)left.prim_val >= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt32)left.prim_val >= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt64)left.prim_val >= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt64)left.prim_val >= (System.UInt64)((int)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.UInt64)left.prim_val >= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (long)((System.UInt64)left.prim_val) >= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt64)left.prim_val >= (System.UInt64)((System.Int16)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt64)left.prim_val >= (System.UInt64)((sbyte)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt64)left.prim_val >= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt64)left.prim_val >= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)left.prim_val >= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.UInt64)left.prim_val >= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Single:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Single)left.prim_val >= (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Single)left.prim_val >= (int)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double : res.prim_val = (System.Single)left.prim_val >= (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Single)left.prim_val >= (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Single)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Single)left.prim_val >= (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Single)left.prim_val >= (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Single)left.prim_val >= (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Single)left.prim_val >= (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Single)left.prim_val >= (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single : res.prim_val = (System.Single)left.prim_val >= (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Boolean:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Boolean : res.prim_val = (int)left.prim_val >= (int)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Char:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Char: res.prim_val = (char)left.prim_val >= (char)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EvalRem()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue right = eval_stack.Pop();
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null && right.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
TypeCode rcode = Type.GetTypeCode(right.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Int32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (int)left.prim_val % (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (int)left.prim_val % (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (int)left.prim_val % (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (int)left.prim_val % (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((int)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (int)left.prim_val % (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (int)left.prim_val % (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (int)left.prim_val % (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (int)left.prim_val % (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((int)left.prim_val) % (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (int)left.prim_val % (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Byte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (byte)left.prim_val % (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (byte)left.prim_val % (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (byte)left.prim_val % (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (byte)left.prim_val % (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((byte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (byte)left.prim_val % (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (byte)left.prim_val % (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (byte)left.prim_val % (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (byte)left.prim_val % (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (byte)left.prim_val % (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (byte)left.prim_val % (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int16)left.prim_val % (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int16)left.prim_val % (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.Int16)left.prim_val % (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int16)left.prim_val % (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int16)left.prim_val % (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int16)left.prim_val % (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int16)left.prim_val % (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int16)left.prim_val % (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.Int16)left.prim_val) % (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.Int16)left.prim_val % (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.Int64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.Int64)left.prim_val % (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.Int64)left.prim_val % (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.Int64)left.prim_val % (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.Int64)left.prim_val % (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.Int64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.Int64)left.prim_val % (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.Int64)left.prim_val % (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.Int64)left.prim_val % (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.Int64)left.prim_val % (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.Int64)left.prim_val % (System.Int64)((System.UInt64)right.prim_val); break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.Int64)left.prim_val % (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case TypeCode.SByte:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.SByte)left.prim_val % (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.SByte)left.prim_val % (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.SByte)left.prim_val % (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.SByte)left.prim_val % (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.SByte)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.SByte)left.prim_val % (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.SByte)left.prim_val % (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.SByte)left.prim_val % (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.SByte)left.prim_val % (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)((System.SByte)left.prim_val) % (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.SByte)left.prim_val % (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt16:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt16)left.prim_val % (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt16)left.prim_val % (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt16)left.prim_val % (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt16)left.prim_val % (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt16)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt16)left.prim_val % (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt16)left.prim_val % (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt16)left.prim_val % (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt16)left.prim_val % (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt16)left.prim_val % (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt16)left.prim_val % (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt32:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt32)left.prim_val % (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt32)left.prim_val % (int)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt32)left.prim_val % (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (System.UInt32)left.prim_val % (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt32)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt32)left.prim_val % (System.Int16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt32)left.prim_val % (sbyte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt32)left.prim_val % (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt32)left.prim_val % (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt32)left.prim_val % (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt32)left.prim_val % (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case TypeCode.UInt64:
|
|
|
|
|
|
{
|
|
|
|
|
|
switch(rcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte : res.prim_val = (System.UInt64)left.prim_val % (byte)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32 : res.prim_val = (System.UInt64)left.prim_val % (System.UInt64)((int)right.prim_val); break;
|
|
|
|
|
|
//case TypeCode.Double : res.prim_val = (System.UInt64)left.prim_val % (double)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64 : res.prim_val = (long)((System.UInt64)left.prim_val) % (long)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.String : res.prim_val = ((System.UInt64)left.prim_val).ToString() + (string)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16 : res.prim_val = (System.UInt64)left.prim_val % (System.UInt64)((System.Int16)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.SByte : res.prim_val = (System.UInt64)left.prim_val % (System.UInt64)((sbyte)right.prim_val); break;
|
|
|
|
|
|
case TypeCode.UInt16 : res.prim_val = (System.UInt64)left.prim_val % (System.UInt16)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32 : res.prim_val = (System.UInt64)left.prim_val % (System.UInt32)right.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64 : res.prim_val = (System.UInt64)left.prim_val % (System.UInt64)right.prim_val; break;
|
|
|
|
|
|
//case TypeCode.Single : res.prim_val = (System.UInt64)left.prim_val % (System.Single)right.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EvalNot()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Boolean : res.prim_val = !(bool)left.prim_val; break;
|
|
|
|
|
|
case TypeCode.Byte: res.prim_val = ~(byte)left.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16: res.prim_val = ~(System.Int16)left.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32: res.prim_val = ~(System.Int32)left.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64: res.prim_val = ~(System.Int64)left.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte: res.prim_val = ~(sbyte)left.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16: res.prim_val = ~(System.UInt16)left.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32: res.prim_val = ~(System.UInt32)left.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt64: res.prim_val = ~(System.UInt64)left.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void EvalUnmin()
|
|
|
|
|
|
{
|
|
|
|
|
|
RetValue left = eval_stack.Pop();
|
|
|
|
|
|
RetValue res = new RetValue();
|
|
|
|
|
|
if (left.prim_val != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
TypeCode lcode = Type.GetTypeCode(left.prim_val.GetType());
|
|
|
|
|
|
switch (lcode)
|
|
|
|
|
|
{
|
|
|
|
|
|
case TypeCode.Byte: res.prim_val = -(byte)left.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int16: res.prim_val = -(System.Int16)left.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int32: res.prim_val = -(System.Int32)left.prim_val; break;
|
|
|
|
|
|
case TypeCode.Int64: res.prim_val = -(System.Int64)left.prim_val; break;
|
|
|
|
|
|
case TypeCode.SByte: res.prim_val = -(sbyte)left.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt16: res.prim_val = -(System.UInt16)left.prim_val; break;
|
|
|
|
|
|
case TypeCode.UInt32: res.prim_val = -(System.UInt32)left.prim_val; break;
|
|
|
|
|
|
//case TypeCode.UInt64: res.prim_val = -(System.UInt64)left.prim_val; break;
|
|
|
|
|
|
case TypeCode.Double: res.prim_val = -(double)left.prim_val; break;
|
|
|
|
|
|
case TypeCode.Single: res.prim_val = -(System.Single)left.prim_val; break;
|
|
|
|
|
|
}
|
|
|
|
|
|
eval_stack.Push(res);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public void visit(token_taginfo node)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
public void visit(declaration_specificator node)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|