This commit is contained in:
Бондарев Иван 2019-06-23 12:47:20 +02:00
parent a1160f993d
commit 05e4198ab4
3 changed files with 56 additions and 24 deletions

View file

@ -17,6 +17,21 @@ namespace CodeCompletion
public struct RetValue public struct RetValue
{ {
public object prim_val; public object prim_val;
public string string_val
{
get
{
string s = (string)prim_val;
if (s != null && s.StartsWith("'") && s.EndsWith("'"))
s = s.Substring(1, s.Length - 2);
return s;
}
set
{
prim_val = "'" + value + "'";
}
}
} }
public class DomConverter : ICodeCompletionDomConverter public class DomConverter : ICodeCompletionDomConverter

View file

@ -37,7 +37,7 @@ namespace CodeCompletion
case TypeCode.Int32 : res.prim_val = (int)left.prim_val + (int)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.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.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.String : res.string_val = ((int)left.prim_val).ToString() + right.string_val; break;
case TypeCode.Int16 : res.prim_val = (int)left.prim_val + (System.Int16)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.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.UInt16 : res.prim_val = (int)left.prim_val + (System.UInt16)right.prim_val; break;
@ -55,7 +55,7 @@ namespace CodeCompletion
case TypeCode.Int32 : res.prim_val = (double)left.prim_val + (int)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.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.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.String : res.string_val = ((double)left.prim_val).ToString() + right.string_val; break;
case TypeCode.Int16 : res.prim_val = (double)left.prim_val + (System.Int16)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.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.UInt16 : res.prim_val = (double)left.prim_val + (System.UInt16)right.prim_val; break;
@ -73,7 +73,7 @@ namespace CodeCompletion
case TypeCode.Int32 : res.prim_val = (byte)left.prim_val + (int)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.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.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.String : res.string_val = ((byte)left.prim_val).ToString() + right.string_val; break;
case TypeCode.Int16 : res.prim_val = (byte)left.prim_val + (System.Int16)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.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.UInt16 : res.prim_val = (byte)left.prim_val + (System.UInt16)right.prim_val; break;
@ -91,7 +91,7 @@ namespace CodeCompletion
case TypeCode.Int32 : res.prim_val = (System.Int16)left.prim_val + (int)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.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.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.String : res.string_val = ((System.Int16)left.prim_val).ToString() + right.string_val; break;
case TypeCode.Int16 : res.prim_val = (System.Int16)left.prim_val + (System.Int16)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.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.UInt16 : res.prim_val = (System.Int16)left.prim_val + (System.UInt16)right.prim_val; break;
@ -109,7 +109,7 @@ namespace CodeCompletion
case TypeCode.Int32 : res.prim_val = (System.Int64)left.prim_val + (int)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.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.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.String : res.string_val = ((System.Int64)left.prim_val).ToString() + right.string_val; break;
case TypeCode.Int16 : res.prim_val = (System.Int64)left.prim_val + (System.Int16)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.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.UInt16 : res.prim_val = (System.Int64)left.prim_val + (System.UInt16)right.prim_val; break;
@ -123,18 +123,18 @@ namespace CodeCompletion
{ {
switch(rcode) switch(rcode)
{ {
case TypeCode.Byte : res.prim_val = (string)left.prim_val + right.prim_val.ToString(); break; case TypeCode.Byte : res.string_val = left.string_val + right.prim_val.ToString(); break;
case TypeCode.Int32 : res.prim_val = (string)left.prim_val + right.prim_val.ToString(); break; case TypeCode.Int32 : res.string_val = left.string_val + right.prim_val.ToString(); break;
case TypeCode.Double : res.prim_val = (string)left.prim_val + right.prim_val.ToString(); break; case TypeCode.Double : res.string_val = left.string_val + right.prim_val.ToString(); break;
case TypeCode.Int64 : res.prim_val = (string)left.prim_val + right.prim_val.ToString(); break; case TypeCode.Int64 : res.string_val = left.string_val + right.prim_val.ToString(); break;
case TypeCode.String : res.prim_val = (string)left.prim_val + right.prim_val.ToString(); break; case TypeCode.String : res.string_val = left.string_val + right.string_val; break;
case TypeCode.Int16 : res.prim_val = (string)left.prim_val + right.prim_val.ToString(); break; case TypeCode.Int16 : res.string_val = left.string_val + right.prim_val.ToString(); break;
case TypeCode.SByte : res.prim_val = (string)left.prim_val + right.prim_val.ToString(); break; case TypeCode.SByte : res.string_val = left.string_val + right.prim_val.ToString(); break;
case TypeCode.UInt16 : res.prim_val = (string)left.prim_val + right.prim_val.ToString(); break; case TypeCode.UInt16 : res.string_val = left.string_val + right.prim_val.ToString(); break;
case TypeCode.UInt32 : res.prim_val = (string)left.prim_val + right.prim_val.ToString(); break; case TypeCode.UInt32 : res.string_val = left.string_val + right.prim_val.ToString(); break;
case TypeCode.UInt64 : res.prim_val = (string)left.prim_val + right.prim_val.ToString(); break; case TypeCode.UInt64 : res.string_val = left.string_val + right.prim_val.ToString(); break;
case TypeCode.Single : res.prim_val = (string)left.prim_val + right.prim_val.ToString(); break; case TypeCode.Single : res.string_val = left.string_val + right.prim_val.ToString(); break;
case TypeCode.Char : res.prim_val = (string)left.prim_val + right.prim_val.ToString(); break; case TypeCode.Char : res.string_val = left.string_val + right.prim_val.ToString(); break;
} }
} }
break; break;
@ -146,7 +146,7 @@ namespace CodeCompletion
case TypeCode.Int32 : res.prim_val = (System.SByte)left.prim_val + (int)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.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.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.String : res.string_val = ((System.SByte)left.prim_val).ToString() + right.string_val; break;
case TypeCode.Int16 : res.prim_val = (System.SByte)left.prim_val + (System.Int16)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.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.UInt16 : res.prim_val = (System.SByte)left.prim_val + (System.UInt16)right.prim_val; break;
@ -164,7 +164,7 @@ namespace CodeCompletion
case TypeCode.Int32 : res.prim_val = (System.UInt16)left.prim_val + (int)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.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.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.String : res.string_val = ((System.UInt16)left.prim_val).ToString() + right.string_val; break;
case TypeCode.Int16 : res.prim_val = (System.UInt16)left.prim_val + (System.Int16)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.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.UInt16 : res.prim_val = (System.UInt16)left.prim_val + (System.UInt16)right.prim_val; break;
@ -182,7 +182,7 @@ namespace CodeCompletion
case TypeCode.Int32 : res.prim_val = (System.UInt32)left.prim_val + (int)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.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.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.String : res.string_val = ((System.UInt32)left.prim_val).ToString() + right.string_val; break;
case TypeCode.Int16 : res.prim_val = (System.UInt32)left.prim_val + (System.Int16)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.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.UInt16 : res.prim_val = (System.UInt32)left.prim_val + (System.UInt16)right.prim_val; break;
@ -200,7 +200,7 @@ namespace CodeCompletion
case TypeCode.Int32 : res.prim_val = (System.UInt64)left.prim_val + (System.UInt64)((int)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.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.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.String : res.string_val = ((System.UInt64)left.prim_val).ToString() + right.string_val; break;
case TypeCode.Int16 : res.prim_val = (System.UInt64)left.prim_val + (System.UInt64)((System.Int16)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.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.UInt16 : res.prim_val = (System.UInt64)left.prim_val + (System.UInt16)right.prim_val; break;
@ -218,7 +218,7 @@ namespace CodeCompletion
case TypeCode.Int32 : res.prim_val = (System.Single)left.prim_val + (int)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.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.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.String : res.string_val = ((System.Single)left.prim_val).ToString() + right.string_val; break;
case TypeCode.Int16 : res.prim_val = (System.Single)left.prim_val + (System.Int16)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.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.UInt16 : res.prim_val = (System.Single)left.prim_val + (System.UInt16)right.prim_val; break;
@ -232,8 +232,8 @@ namespace CodeCompletion
{ {
switch(rcode) switch(rcode)
{ {
case TypeCode.Char : res.prim_val = (string)left.prim_val + (string)right.prim_val; break; case TypeCode.Char : res.string_val = left.string_val + right.string_val; break;
case TypeCode.String : res.prim_val = left.prim_val.ToString() + (string)right.prim_val; break; case TypeCode.String : res.string_val = left.prim_val.ToString() + right.string_val; break;
} }
} }
break; break;

View file

@ -0,0 +1,17 @@
const
s1 = 'abc';
s2 = 'def';
s3 = s1+s2;
s4 = s1+'d';
s5 = s1+6;
i = 6;
s6 = s1 + i;
s7 = s1 + s2 + 'gh';
begin
writeln(s3{@const s3: string = 'abcdef';@});
writeln(s4{@const s4: string = 'abcd';@});
writeln(s5{@const s5: string = 'abc6';@});
writeln(s6{@const s6: string = 'abc6';@});
writeln(s7{@const s7: string = 'abcdefgh';@});
end.