This commit is contained in:
Бондарев Иван 2017-08-27 19:04:24 +02:00
parent fd05a1ebd0
commit f2341f845c
5 changed files with 238 additions and 389 deletions

View file

@ -444,206 +444,206 @@ namespace CodeCompletion
eval_stack.Push(res);
}
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);
}
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);
}
public void EvalDiv()
{
@ -652,192 +652,7 @@ namespace CodeCompletion
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;
}
res.prim_val = Convert.ToDouble(left.prim_val) / Convert.ToDouble(right.prim_val);
eval_stack.Push(res);
}
}

View file

@ -5124,6 +5124,10 @@ namespace CodeCompletion
if (this.ctn.IsSubclassOf(cs.ctn))
return true;
if (implemented_interfaces != null)
foreach (TypeScope interf in implemented_interfaces)
if (interf.IsEqual(ts))
return true;
TypeCode code1 = Type.GetTypeCode(this.ctn);
TypeCode code2 = Type.GetTypeCode(cs.ctn);
bool left = false;

View file

@ -119,7 +119,8 @@ namespace CodeCompletion
private static ProcScope char_smeq;
private static ProcScope char_gr;
private static ProcScope char_greq;
private static ProcScope char_plus;
private static ProcScope string_plus;
private static ProcScope string_eq;
private static ProcScope string_noteq;
@ -798,7 +799,7 @@ namespace CodeCompletion
int_type.AddName(PascalABCCompiler.TreeConverter.compiler_string_consts.plus_name, int64_plus);
int_type.AddName(PascalABCCompiler.TreeConverter.compiler_string_consts.minus_name, int64_minus);
int_type.AddName(PascalABCCompiler.TreeConverter.compiler_string_consts.mul_name, int64_mul);
int_type.AddName(PascalABCCompiler.TreeConverter.compiler_string_consts.div_name, int64_div);
int_type.AddName(PascalABCCompiler.TreeConverter.compiler_string_consts.idiv_name, int64_div);
int_type.AddName(PascalABCCompiler.TreeConverter.compiler_string_consts.mod_name, int64_mod);
int_type.AddName(PascalABCCompiler.TreeConverter.compiler_string_consts.shl_name, int64_shl);
int_type.AddName(PascalABCCompiler.TreeConverter.compiler_string_consts.shr_name, int64_shr);
@ -968,6 +969,23 @@ namespace CodeCompletion
ps.AddParameter(right);
char_type.AddName(PascalABCCompiler.TreeConverter.compiler_string_consts.gr_name, ps);
ps = new ProcScope(PascalABCCompiler.TreeConverter.compiler_string_consts.plus_name, char_type);
char_plus = ps;
left = new ElementScope(new SymInfo("", SymbolKind.Parameter, ""), char_type, char_type);
right = new ElementScope(new SymInfo("", SymbolKind.Parameter, ""), char_type, char_type);
ps.return_type = string_type;
ps.AddParameter(left);
ps.AddParameter(right);
char_type.AddName(PascalABCCompiler.TreeConverter.compiler_string_consts.plus_name, ps);
ps = new ProcScope(PascalABCCompiler.TreeConverter.compiler_string_consts.plus_name, char_type);
left = new ElementScope(new SymInfo("", SymbolKind.Parameter, ""), char_type, char_type);
right = new ElementScope(new SymInfo("", SymbolKind.Parameter, ""), string_type, char_type);
ps.return_type = string_type;
ps.AddParameter(left);
ps.AddParameter(right);
char_type.AddName(PascalABCCompiler.TreeConverter.compiler_string_consts.plus_name, ps);
//string type
ps = new ProcScope(PascalABCCompiler.TreeConverter.compiler_string_consts.plus_name, string_type);
string_plus = ps;

View file

@ -1,3 +1,6 @@
type TRec = record
end;
type
myint{@type myint = integer@} = integer;
myptr{@type myptr = ^real@} = ^real;
@ -5,6 +8,7 @@ type
myset{@type myset = set of char@} = set of char;
myarr{@type myarr = array of (integer,integer)@} = array of (integer, integer);
myarr2{@type myarr2 = array[,] of List<string>@} = array[,] of List<string>;
myrec = TRec;
begin

View file

@ -10,8 +10,16 @@ begin
var a7{@var a7: string[5];@}: string[5];
var a8{@var a8: List<integer>;@} := new List<integer>;
var a9{@var a9: real;@} := 2+3.4;
var a10{@var a10: List<integer>;@} := a8+2;
var a10{@var a10: sequence of integer;@} := a8+2;
var a11{@var a11: integer;@} := a8[2];
var a12 := sin{@function Sin(x: real): real;@}(2);
var a14{@var a14: real;@} := 5/5;
var a15{@var a15: integer;@} := 5 div 5;
var a16{@var a16: int64;@} := int64(5) div 5;
var a17{@var a17: string;@} := 'a'+'b';
var a18{@var a18: string;@} := a3+a2;
var a19{@var a19: string;@} := a2+a3;
var a20{@var a20: List<integer>;@} := a8 + a8;
var a21{@var a21: boolean;@} := 2 in a8;
writeln(a1{@var a1: integer;@}+a4);
end.