ObjectToString - убрал подчеркивание
TypeName - убрал артефакты реализации в implementation и тесты, это использующие
This commit is contained in:
parent
7681391663
commit
443ed6d3d7
|
|
@ -15,7 +15,7 @@ internal static class RevisionClass
|
|||
public const string Major = "3";
|
||||
public const string Minor = "9";
|
||||
public const string Build = "0";
|
||||
public const string Revision = "3474";
|
||||
public const string Revision = "3477";
|
||||
|
||||
public const string MainVersion = Major + "." + Minor;
|
||||
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%COREVERSION%=0
|
||||
%REVISION%=3474
|
||||
%MINOR%=9
|
||||
%REVISION%=3477
|
||||
%COREVERSION%=0
|
||||
%MAJOR%=3
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
// This CSharp output file generated by Gardens Point LEX
|
||||
// Version: 1.1.3.301
|
||||
// Machine: DESKTOP-G8V08V4
|
||||
// DateTime: 05.05.2024 20:08:13
|
||||
// DateTime: 07.05.2024 10:51:36
|
||||
// UserName: ?????????
|
||||
// GPLEX input file <ABCPascal.lex>
|
||||
// GPLEX frame file <embedded resource>
|
||||
|
|
@ -2185,7 +2185,7 @@ if (parserTools.buildTreeForFormatter)
|
|||
parserTools.ParseDirective(yytext, CurrentLexLocation, out var directiveName, out var directiveParams);
|
||||
var orgDirectiveName = directiveName;
|
||||
|
||||
if (directiveName == null) // сл<EFBFBD>?<3F>?ай п<>?с<>?ой ди<D0B4>?ек<D0B5>?ив<D0B8>?
|
||||
if (directiveName == null) // ム<EFBFBD>サム?ム?ミーミケ ミソム?ム<>?ミセミケ ミエミクム?ミオミコム?ミクミイム?
|
||||
break;
|
||||
|
||||
parserTools.CheckDirectiveParams(directiveName, directiveParams, CurrentLexLocation);
|
||||
|
|
@ -2283,7 +2283,7 @@ BEGIN(INITIAL);
|
|||
parserTools.ParseDirective(yytext, CurrentLexLocation, out directiveName, out directiveParams);
|
||||
orgDirectiveName = directiveName;
|
||||
|
||||
if (directiveName == null) // сл<EFBFBD>?<3F>?ай п<>?с<>?ой ди<D0B4>?ек<D0B5>?ив<D0B8>?
|
||||
if (directiveName == null) // ム<EFBFBD>サム?ム?ミーミケ ミソム?ム<>?ミセミケ ミエミクム?ミオミコム?ミクミイム?
|
||||
break;
|
||||
|
||||
parserTools.CheckDirectiveParams(directiveName, directiveParams, CurrentLexLocation);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
// GPPG version 1.3.6
|
||||
// Machine: DESKTOP-G8V08V4
|
||||
// DateTime: 05.05.2024 20:08:14
|
||||
// DateTime: 07.05.2024 10:51:37
|
||||
// UserName: ?????????
|
||||
// Input file <D:\PABC_Git\Parsers\PascalABCParserNewSaushkin\ABCPascal.y>
|
||||
|
||||
|
|
|
|||
|
|
@ -377,5 +377,6 @@ script=
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
3.9.0.3474
|
||||
3.9.0.3477
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
!define VERSION '3.9.0.3474'
|
||||
!define VERSION '3.9.0.3477'
|
||||
|
|
|
|||
|
|
@ -1399,7 +1399,7 @@ procedure IOGraphABCSystem.write(obj: object);
|
|||
end;
|
||||
|
||||
begin
|
||||
var s := _ObjectToString(obj);
|
||||
var s := ObjectToString(obj);
|
||||
lock f do
|
||||
begin
|
||||
//var fnt := GraphABC.Font.NETFont;
|
||||
|
|
|
|||
|
|
@ -2910,7 +2910,7 @@ type
|
|||
begin
|
||||
if TestMode = tmNone then
|
||||
inherited write(obj);
|
||||
OutputString += _ObjectToString(obj);
|
||||
OutputString += ObjectToString(obj);
|
||||
OutputList += obj;
|
||||
CreateNewLineBeforeMessage := True;
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -2486,7 +2486,7 @@ type
|
|||
sb += '{ ';
|
||||
end;
|
||||
if rt<>nil then
|
||||
sb.Append(_ObjectToString(val)) else
|
||||
sb.Append(ObjectToString(val)) else
|
||||
sb += 'nil';
|
||||
if typeof(T) <> rt then
|
||||
sb += ' }';
|
||||
|
|
@ -2516,7 +2516,7 @@ type
|
|||
begin
|
||||
if d.Target<>nil then
|
||||
begin
|
||||
sb += _ObjectToString(d.Target);
|
||||
sb += ObjectToString(d.Target);
|
||||
sb += ' => ';
|
||||
end;
|
||||
var mi := d.Method;
|
||||
|
|
|
|||
|
|
@ -1506,19 +1506,11 @@ function EnumerateDirectories(path: string): sequence of string;
|
|||
/// Возвращает последовательность имен каталогов по заданному пути, включая подкаталоги
|
||||
function EnumerateAllDirectories(path: string): sequence of string;
|
||||
|
||||
/// Возвращает имя отражённого типа "t"
|
||||
/// Возвращает строку с именем данного типа
|
||||
function TypeToTypeName(t: System.Type): string;
|
||||
/// Добавляет в res имя отражённого типа "t"
|
||||
procedure TypeToTypeName(t: System.Type; res: StringBuilder);
|
||||
/// Записывает в res имя отражённого типа "t"
|
||||
procedure TypeToTypeName(t: System.Type; res: TextWriter);
|
||||
|
||||
/// Возвращает имя типа объекта "o"
|
||||
function TypeName(o: object): string;
|
||||
/// Добавляет в res имя типа объекта "o"
|
||||
procedure TypeName(o: object; res: StringBuilder);
|
||||
/// Записывает в res имя типа объекта "o"
|
||||
procedure TypeName(o: object; res: TextWriter);
|
||||
/// Возвращает строку с именем типа объекта
|
||||
function TypeName(obj: object): string;
|
||||
|
||||
///-procedure New<T>(var p: ^T);
|
||||
/// Выделяет динамическую память размера sizeof(T) и возвращает в переменной p указатель на нее. Тип T должен быть размерным
|
||||
|
|
@ -2675,12 +2667,8 @@ function RuntimeInitialize(kind: byte; variable: object): object;
|
|||
///Вычисление размера типа на этапе выполнения
|
||||
function GetRuntimeSize<T>: integer;
|
||||
|
||||
/// Возвращает строку для вывода подобного Write
|
||||
function _ObjectToString(o: object): string;
|
||||
/// Добавляет в res строку для вывода подобного Write
|
||||
procedure _ObjectToString(o: object; res: StringBuilder);
|
||||
/// Записывает в res строку для вывода подобного Write
|
||||
procedure _ObjectToString(o: object; res: TextWriter);
|
||||
/// Преобразует объект в строковое представление
|
||||
function ObjectToString(obj: object): string;
|
||||
|
||||
function IsUnix: boolean;
|
||||
///--
|
||||
|
|
@ -4175,9 +4163,11 @@ procedure operator+=(var left: StringBuilder; right: string); extensionmethod :=
|
|||
function operator implicit(s: string): StringBuilder; extensionmethod := new StringBuilder(s);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// _ObjectToString
|
||||
// ObjectToString
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
procedure TypeToTypeNameHelper(t: System.Type; res: TextWriter); forward;
|
||||
|
||||
type
|
||||
ObjectToStringUtils = static class
|
||||
|
||||
|
|
@ -4219,7 +4209,7 @@ type
|
|||
res.Write( name );
|
||||
res.Write(': ');
|
||||
end;
|
||||
TypeToTypeName(par.ParameterType, res);
|
||||
TypeToTypeNameHelper(par.ParameterType, res);
|
||||
end;
|
||||
res.Write(')');
|
||||
end;
|
||||
|
|
@ -4227,12 +4217,13 @@ type
|
|||
if rt<>nil then
|
||||
begin
|
||||
res.Write(': ');
|
||||
TypeToTypeName(rt, res);
|
||||
TypeToTypeNameHelper(rt, res);
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
private static empty_obj_arr := new object[0];
|
||||
|
||||
public static procedure ContentsToString(o: Object; prev: Stack<object>; res: TextWriter);
|
||||
const val_sep = '; ';
|
||||
begin
|
||||
|
|
@ -4299,8 +4290,8 @@ type
|
|||
prev.Push(o);
|
||||
AppendImpl(o, prev, res);
|
||||
if prev.Pop<>o then raise new InvalidOperationException;
|
||||
|
||||
end;
|
||||
|
||||
public static procedure AppendImpl(o: Object; prev: Stack<object>; res: TextWriter);
|
||||
const max_seq_len = 100;
|
||||
begin
|
||||
|
|
@ -4484,9 +4475,7 @@ type
|
|||
{$endregion IEnumerable}
|
||||
|
||||
ContentsToString(o, prev, res);
|
||||
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
function TryWriteFromTypeCode(t: System.Type; res: TextWriter): boolean;
|
||||
|
|
@ -4522,7 +4511,7 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure TypeToTypeName(t: System.Type; res: TextWriter);
|
||||
procedure TypeToTypeNameHelper(t: System.Type; res: TextWriter);
|
||||
begin
|
||||
if t=nil then
|
||||
begin
|
||||
|
|
@ -4546,7 +4535,7 @@ begin
|
|||
if rank<1 then
|
||||
raise new NotImplementedException;
|
||||
res.Write(' of ');
|
||||
TypeToTypeName(t.GetElementType, res);
|
||||
TypeToTypeNameHelper(t.GetElementType, res);
|
||||
exit;
|
||||
end;
|
||||
|
||||
|
|
@ -4562,7 +4551,7 @@ begin
|
|||
) then
|
||||
begin
|
||||
res.Write('sequence of ');
|
||||
TypeToTypeName(typed.GetGenericArguments.Single, res);
|
||||
TypeToTypeNameHelper(typed.GetGenericArguments.Single, res);
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
|
|
@ -4579,7 +4568,7 @@ begin
|
|||
if any_gen_arg then
|
||||
res.Write(', ') else
|
||||
any_gen_arg := true;
|
||||
TypeToTypeName(arg, res);
|
||||
TypeToTypeNameHelper(arg, res);
|
||||
end;
|
||||
res.Write(')');
|
||||
exit;
|
||||
|
|
@ -4627,7 +4616,7 @@ begin
|
|||
gen_args := own_args;
|
||||
|
||||
end;
|
||||
TypeToTypeName(parent, res);
|
||||
TypeToTypeNameHelper(parent, res);
|
||||
res.Write('+');
|
||||
end;
|
||||
|
||||
|
|
@ -4641,7 +4630,7 @@ begin
|
|||
if any_gen_arg then
|
||||
res.Write(', ') else
|
||||
any_gen_arg := true;
|
||||
TypeToTypeName(arg, res);
|
||||
TypeToTypeNameHelper(arg, res);
|
||||
end;
|
||||
res.Write('>');
|
||||
exit;
|
||||
|
|
@ -4653,12 +4642,13 @@ begin
|
|||
if t.IsGenericParameter then
|
||||
res.Write(']');
|
||||
end;
|
||||
procedure TypeToTypeName(t: System.Type; res: StringBuilder) :=
|
||||
TypeToTypeName(t, new StringWriter(res));
|
||||
|
||||
procedure TypeName(o: object; res: TextWriter);
|
||||
procedure TypeToTypeNameHelper(t: System.Type; res: StringBuilder) :=
|
||||
TypeToTypeNameHelper(t, new StringWriter(res));
|
||||
|
||||
procedure TypeNameHelper(obj: object; res: TextWriter);
|
||||
begin
|
||||
var t := o?.GetType;
|
||||
var t := obj?.GetType;
|
||||
|
||||
// Зачем? TypeName(@a) не работает
|
||||
// Можно сделать TypeName волшебной функцией, вызывая
|
||||
|
|
@ -4672,37 +4662,39 @@ begin
|
|||
var static_arr_field := t?.GetField('NullBasedArray');
|
||||
if static_arr_field<>nil then
|
||||
begin
|
||||
TypeName(static_arr_field.GetValue(o), res);
|
||||
TypeNameHelper(static_arr_field.GetValue(obj), res);
|
||||
exit;
|
||||
end;
|
||||
|
||||
TypeToTypeName(t, res);
|
||||
TypeToTypeNameHelper(t, res);
|
||||
end;
|
||||
|
||||
procedure TypeNameHelper(obj: object; res: StringBuilder) := TypeNameHelper(obj, new StringWriter(res));
|
||||
|
||||
function TypeName(obj: object): string;
|
||||
begin
|
||||
var res := new StringBuilder;
|
||||
TypeNameHelper(obj, res);
|
||||
Result := res.ToString;
|
||||
end;
|
||||
procedure TypeName(o: object; res: StringBuilder) :=
|
||||
TypeName(o, new StringWriter(res));
|
||||
|
||||
function TypeToTypeName(t: System.Type): string;
|
||||
begin
|
||||
var res := new StringBuilder;
|
||||
TypeToTypeName(t, res);
|
||||
TypeToTypeNameHelper(t, res);
|
||||
Result := res.ToString;
|
||||
end;
|
||||
|
||||
function TypeName(o: object): string;
|
||||
begin
|
||||
var res := new StringBuilder;
|
||||
TypeName(o, res);
|
||||
Result := res.ToString;
|
||||
end;
|
||||
|
||||
procedure _ObjectToString(o: object; res: TextWriter) :=
|
||||
procedure _ObjectToStringHelper(o: object; res: TextWriter) :=
|
||||
ObjectToStringUtils.Append(o, new Stack<object>, res);
|
||||
procedure _ObjectToString(o: object; res: StringBuilder) :=
|
||||
_ObjectToString(o, new StringWriter(res));
|
||||
function _ObjectToString(o: object): string;
|
||||
|
||||
procedure _ObjectToStringHelper(o: object; res: StringBuilder) :=
|
||||
_ObjectToStringHelper(o, new StringWriter(res));
|
||||
|
||||
function ObjectToString(obj: object): string;
|
||||
begin
|
||||
var res := new StringBuilder;
|
||||
_ObjectToString(o, res);
|
||||
_ObjectToStringHelper(obj, res);
|
||||
Result := res.ToString;
|
||||
end;
|
||||
|
||||
|
|
@ -6283,7 +6275,7 @@ procedure IOStandardSystem.write(obj: object);
|
|||
begin
|
||||
if not console_alloc then
|
||||
AllocConsole;
|
||||
Console.Write(_ObjectToString(obj));
|
||||
Console.Write(ObjectToString(obj));
|
||||
end;
|
||||
|
||||
procedure IOStandardSystem.write(p: pointer);
|
||||
|
|
@ -7526,7 +7518,7 @@ begin
|
|||
if f.sw = nil then
|
||||
raise new System.IO.IOException(GetTranslation(FILE_NOT_OPENED_FOR_WRITING));
|
||||
|
||||
f.sw.Write(_ObjectToString(val));
|
||||
f.sw.Write(ObjectToString(val));
|
||||
{if val = nil then
|
||||
begin
|
||||
f.sw.Write('nil');
|
||||
|
|
@ -11751,7 +11743,7 @@ begin
|
|||
for var j := 0 to Self.ColCount - 1 do
|
||||
begin
|
||||
if PrintMatrixWithFormat then
|
||||
Write(_ObjectToString(Self[i, j]).PadLeft(w))
|
||||
Write(ObjectToString(Self[i, j]).PadLeft(w))
|
||||
else Print(Self[i, j]);
|
||||
end;
|
||||
Writeln;
|
||||
|
|
@ -14526,7 +14518,7 @@ end;
|
|||
function FormatValue(value: object; NumOfChars: integer): string;
|
||||
begin
|
||||
if value <> nil then
|
||||
Result := _ObjectToString(value)
|
||||
Result := ObjectToString(value)
|
||||
else
|
||||
Result := 'nil';
|
||||
Result := Result.PadLeft(NumOfChars);
|
||||
|
|
|
|||
|
|
@ -1,106 +0,0 @@
|
|||
type
|
||||
r1 = record
|
||||
public a := 123;
|
||||
public b := 'abc';
|
||||
internal c := 'err';
|
||||
|
||||
public property p: byte read byte(a);
|
||||
internal property e: string read 'err';
|
||||
|
||||
private function raise_getter: byte;
|
||||
begin
|
||||
Result := 0;
|
||||
raise new Exception('Expected Exception');
|
||||
end;
|
||||
public property f: byte read raise_getter;
|
||||
|
||||
end;
|
||||
|
||||
Base<T1,T2,T3> = class end;
|
||||
Derived<T> = class(Base<T, array of T, word>) end;
|
||||
|
||||
var res := new StringBuilder;
|
||||
procedure TestO(o: object);
|
||||
begin
|
||||
TypeName(o, res);
|
||||
res.Append('{ ');
|
||||
_ObjectToString(o, res);
|
||||
res.Append(' }'#10);
|
||||
end;
|
||||
procedure TestT(t: System.Type);
|
||||
begin
|
||||
TypeToTypeName(t, res);
|
||||
res.Append(#10);
|
||||
end;
|
||||
|
||||
begin
|
||||
|
||||
TestO(1);
|
||||
TestO('abc'); // typeof(string).IsPrimitive=false, но Type.GetTypeCode работает
|
||||
TestO(new System.UIntPtr(123)); // Выводим только UIntPtr, без пространства имён
|
||||
TestO(System.ConsoleColor.Cyan); // Type.GetTypeCode возвращает integer - это надо явно обходить
|
||||
TestO(Lst(0).GetEnumerator); // Вложенный тип
|
||||
|
||||
// Картежи
|
||||
TestO(System.Tuple.Create(1,2.3));
|
||||
TestO(System.ValueTuple.Create(1,2.3)); // Сейчас ValueTuple не обрабатывает
|
||||
|
||||
// Последовательности
|
||||
TestO(new byte[2,1,1,1,1,1,1,1,2]);
|
||||
TestO(new byte[2,1,1,1,0,1,1,1,2]); // 0 элементов
|
||||
TestO(|1.2,3|.ToList); // Элементы real, потому что у 1 из них есть вещественная часть
|
||||
TestO(|1.2,3|.ToHashSet); // Мноежства выводятся в {}
|
||||
TestO(|1,2,3,4,5|.Skip(1).Take(3)); // C# yield последовательность
|
||||
TestO(|1,2,3,4,5|.AdjacentGroup); // Паскалевская yield последовательность
|
||||
TestO(new System.Collections.ArrayList(|6,7,8|)); // Вывод содержимого НЕ типизированной последовательности
|
||||
|
||||
// Тип не реализует последовательность - а является ею
|
||||
TestO(|Seq(0)|);
|
||||
TestO(|Seq(0) as System.Collections.IEnumerable|);
|
||||
|
||||
// Сложная структура со свойствами
|
||||
TestO(new r1);
|
||||
|
||||
// Содержимое ссылок на функции
|
||||
var d1 := procedure(b: byte)->exit();
|
||||
var d2: Action<byte> := d1;
|
||||
var d3 := function: object->d1;
|
||||
var d4: Func0<object> := d3;
|
||||
TestO(d1);
|
||||
TestO(d2); // Преобразование к содержимому типу делегата
|
||||
TestO(Delegate(d3)); // Захват переменной
|
||||
TestO(Delegate(d4)); // Два предыдущих вместе
|
||||
TestO(Arr(d1)); // Внутри массива
|
||||
TestO(Arr&<System.MulticastDelegate>(d1)); // Тип элементов массива абстрактный, поэтому у него нету .Invoke
|
||||
|
||||
// Генерики
|
||||
TestT(typeof(Dictionary<,>)); // Не подставленные параметры в [], т.е. [TKey]
|
||||
TestT(typeof(Derived<byte>).BaseType); // Сложная подстановка типов
|
||||
TestT(typeof(Derived<>).BaseType); // Только часть типов подставлена
|
||||
TestT(Lst(0).GetType.GetGenericTypeDefinition);
|
||||
TestT(Lst(0).GetEnumerator.GetType.GetGenericTypeDefinition); // Вложенный тип без подстановки
|
||||
|
||||
// Особый генерик, подобный не существует нигде в стандартной библиотеке .Net
|
||||
begin
|
||||
{$reference ObjectToStringExt.dll}
|
||||
var t := typeof(OTS.CS.Parent<>).GetNestedTypes.Single;
|
||||
TestT(t);
|
||||
TestT(t.MakeGenericType(typeof(byte), typeof(word)));
|
||||
TestT(t.MakeGenericType(typeof(byte), t.GetGenericArguments[1]));
|
||||
TestT(t.MakeGenericType(t.GetGenericArguments[0], typeof(word)));
|
||||
end;
|
||||
|
||||
var otp_fname := 'ObjectToString.txt';
|
||||
var otp_new_fname := 'ObjectToString[new].txt';
|
||||
var enc := new System.Text.UTF8Encoding(true);
|
||||
|
||||
var dir := GetCurrentDir;
|
||||
if System.IO.Path.GetFileName(dir)='exe' then
|
||||
dir := System.IO.Path.GetDirectoryName(dir);
|
||||
|
||||
var expected := ReadAllText(dir+'\'+otp_fname, enc).Remove(#13);
|
||||
var curr := res.ToString.RegexReplace('(?<=Exception:[^\n]*)\r?\n(?:(?!(?<!\()\)).)*', '', RegexOptions.Singleline);
|
||||
var tr := expected = curr;
|
||||
if not tr then WriteAllText(dir+'\'+otp_new_fname, curr, enc);
|
||||
Assert(tr);
|
||||
end.
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
integer{ 1 }
|
||||
string{ abc }
|
||||
UIntPtr{ 123 }
|
||||
ConsoleColor{ Cyan }
|
||||
List<integer>+Enumerator{ (Current=0) }
|
||||
(integer, real){ (1, 2.3) }
|
||||
ValueTuple<integer, real>{ (1, 2.3) }
|
||||
array[,,,,,,,,] of byte{ [[[[[[[[[0,0]]]]]]]],[[[[[[[[0,0]]]]]]]]] }
|
||||
array[,,,,,,,,] of byte{ [[[[[[[[[]]]]]]]]] }
|
||||
List<real>{ [1.2,3] }
|
||||
HashSet<real>{ {1.2,3} }
|
||||
sequence of integer{ [2,3,4] }
|
||||
sequence of array of integer{ [[1],[2],[3],[4],[5]] }
|
||||
ArrayList{ [6,7,8] }
|
||||
array of sequence of integer{ [[0]] }
|
||||
array of IEnumerable{ [[0]] }
|
||||
r1{ (a=123; b=abc; p=123; f=System.Exception: Expected Exception) }
|
||||
procedure(byte){ procedure lambda(b: byte) }
|
||||
procedure(byte){ procedure lambda(b: byte) => procedure Invoke(b: byte) }
|
||||
function: Object{ (d1=procedure lambda(b: byte)) => function lambda: Object }
|
||||
function: Object{ (d1=procedure lambda(b: byte)) => function lambda: Object => function Invoke: Object }
|
||||
array of procedure(byte){ [procedure lambda(b: byte)] }
|
||||
array of MulticastDelegate{ [procedure lambda(b: byte)] }
|
||||
Dictionary<[TKey], [TValue]>
|
||||
Base<byte, array of byte, word>
|
||||
Base<[T], array of [T], word>
|
||||
List<[T]>
|
||||
List<[T]>+Enumerator
|
||||
Parent<[T1]>+Nested<[T2]>
|
||||
Parent<byte>+Nested<word>
|
||||
Parent<byte>+Nested<[T2]>
|
||||
Parent<[T1]>+Nested<word>
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
|
||||
|
||||
|
||||
namespace OTS.CS {
|
||||
|
||||
public class Parent<T1> {
|
||||
|
||||
public class Nested<T2> { }
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
|
|
@ -1399,7 +1399,7 @@ procedure IOGraphABCSystem.write(obj: object);
|
|||
end;
|
||||
|
||||
begin
|
||||
var s := _ObjectToString(obj);
|
||||
var s := ObjectToString(obj);
|
||||
lock f do
|
||||
begin
|
||||
//var fnt := GraphABC.Font.NETFont;
|
||||
|
|
|
|||
|
|
@ -2910,7 +2910,7 @@ type
|
|||
begin
|
||||
if TestMode = tmNone then
|
||||
inherited write(obj);
|
||||
OutputString += _ObjectToString(obj);
|
||||
OutputString += ObjectToString(obj);
|
||||
OutputList += obj;
|
||||
CreateNewLineBeforeMessage := True;
|
||||
end;
|
||||
|
|
|
|||
|
|
@ -2486,7 +2486,7 @@ type
|
|||
sb += '{ ';
|
||||
end;
|
||||
if rt<>nil then
|
||||
sb.Append(_ObjectToString(val)) else
|
||||
sb.Append(ObjectToString(val)) else
|
||||
sb += 'nil';
|
||||
if typeof(T) <> rt then
|
||||
sb += ' }';
|
||||
|
|
@ -2516,7 +2516,7 @@ type
|
|||
begin
|
||||
if d.Target<>nil then
|
||||
begin
|
||||
sb += _ObjectToString(d.Target);
|
||||
sb += ObjectToString(d.Target);
|
||||
sb += ' => ';
|
||||
end;
|
||||
var mi := d.Method;
|
||||
|
|
|
|||
|
|
@ -2667,12 +2667,8 @@ function RuntimeInitialize(kind: byte; variable: object): object;
|
|||
///Вычисление размера типа на этапе выполнения
|
||||
function GetRuntimeSize<T>: integer;
|
||||
|
||||
/// Возвращает строку для вывода подобного Write
|
||||
function _ObjectToString(o: object): string;
|
||||
/// Добавляет в res строку для вывода подобного Write
|
||||
procedure _ObjectToString(o: object; res: StringBuilder);
|
||||
/// Записывает в res строку для вывода подобного Write
|
||||
procedure _ObjectToString(o: object; res: TextWriter);
|
||||
/// Преобразует объект в строковое представление
|
||||
function ObjectToString(obj: object): string;
|
||||
|
||||
function IsUnix: boolean;
|
||||
///--
|
||||
|
|
@ -4167,7 +4163,7 @@ procedure operator+=(var left: StringBuilder; right: string); extensionmethod :=
|
|||
function operator implicit(s: string): StringBuilder; extensionmethod := new StringBuilder(s);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// _ObjectToString
|
||||
// ObjectToString
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
procedure TypeToTypeNameHelper(t: System.Type; res: TextWriter); forward;
|
||||
|
|
@ -4689,14 +4685,16 @@ begin
|
|||
Result := res.ToString;
|
||||
end;
|
||||
|
||||
procedure _ObjectToString(o: object; res: TextWriter) :=
|
||||
procedure _ObjectToStringHelper(o: object; res: TextWriter) :=
|
||||
ObjectToStringUtils.Append(o, new Stack<object>, res);
|
||||
procedure _ObjectToString(o: object; res: StringBuilder) :=
|
||||
_ObjectToString(o, new StringWriter(res));
|
||||
function _ObjectToString(o: object): string;
|
||||
|
||||
procedure _ObjectToStringHelper(o: object; res: StringBuilder) :=
|
||||
_ObjectToStringHelper(o, new StringWriter(res));
|
||||
|
||||
function ObjectToString(obj: object): string;
|
||||
begin
|
||||
var res := new StringBuilder;
|
||||
_ObjectToString(o, res);
|
||||
_ObjectToStringHelper(obj, res);
|
||||
Result := res.ToString;
|
||||
end;
|
||||
|
||||
|
|
@ -6277,7 +6275,7 @@ procedure IOStandardSystem.write(obj: object);
|
|||
begin
|
||||
if not console_alloc then
|
||||
AllocConsole;
|
||||
Console.Write(_ObjectToString(obj));
|
||||
Console.Write(ObjectToString(obj));
|
||||
end;
|
||||
|
||||
procedure IOStandardSystem.write(p: pointer);
|
||||
|
|
@ -7520,7 +7518,7 @@ begin
|
|||
if f.sw = nil then
|
||||
raise new System.IO.IOException(GetTranslation(FILE_NOT_OPENED_FOR_WRITING));
|
||||
|
||||
f.sw.Write(_ObjectToString(val));
|
||||
f.sw.Write(ObjectToString(val));
|
||||
{if val = nil then
|
||||
begin
|
||||
f.sw.Write('nil');
|
||||
|
|
@ -11745,7 +11743,7 @@ begin
|
|||
for var j := 0 to Self.ColCount - 1 do
|
||||
begin
|
||||
if PrintMatrixWithFormat then
|
||||
Write(_ObjectToString(Self[i, j]).PadLeft(w))
|
||||
Write(ObjectToString(Self[i, j]).PadLeft(w))
|
||||
else Print(Self[i, j]);
|
||||
end;
|
||||
Writeln;
|
||||
|
|
@ -14520,7 +14518,7 @@ end;
|
|||
function FormatValue(value: object; NumOfChars: integer): string;
|
||||
begin
|
||||
if value <> nil then
|
||||
Result := _ObjectToString(value)
|
||||
Result := ObjectToString(value)
|
||||
else
|
||||
Result := 'nil';
|
||||
Result := Result.PadLeft(NumOfChars);
|
||||
|
|
|
|||
|
|
@ -1141,19 +1141,19 @@
|
|||
<member name="M:TypedFileRead(PABCSystem.TypedFile)">
|
||||
<summary>--</summary>
|
||||
</member>
|
||||
<member name="M:FilePos(PABCSystem.BinaryFile)">
|
||||
<member name="M:FilePos(@file)">
|
||||
<summary>--</summary>
|
||||
</member>
|
||||
<member name="M:FileSize(PABCSystem.BinaryFile)">
|
||||
<member name="M:FileSize(@file)">
|
||||
<summary>--</summary>
|
||||
</member>
|
||||
<member name="M:Seek(PABCSystem.BinaryFile,System.Int64)">
|
||||
<member name="M:Seek(@file,System.Int64)">
|
||||
<summary>--</summary>
|
||||
</member>
|
||||
<member name="M:BinaryFileInit(PABCSystem.BinaryFile@)">
|
||||
<member name="M:BinaryFileInit(@file@)">
|
||||
<summary>--</summary>
|
||||
</member>
|
||||
<member name="M:BinaryFileRead(PABCSystem.BinaryFile@,System.Type)">
|
||||
<member name="M:BinaryFileRead(@file@,System.Type)">
|
||||
<summary>--</summary>
|
||||
</member>
|
||||
<member name="M:PascalABCVersion">
|
||||
|
|
@ -2626,14 +2626,8 @@
|
|||
<member name="M:GetRuntimeSize``1">
|
||||
<summary>Вычисление размера типа на этапе выполнения</summary>
|
||||
</member>
|
||||
<member name="M:_ObjectToString(System.Object)">
|
||||
<summary>Возвращает строку для вывода подобного Write</summary>
|
||||
</member>
|
||||
<member name="M:_ObjectToString(System.Object,System.Text.StringBuilder)">
|
||||
<summary>Добавляет в res строку для вывода подобного Write</summary>
|
||||
</member>
|
||||
<member name="M:_ObjectToString(System.Object,System.IO.TextWriter)">
|
||||
<summary>Записывает в res строку для вывода подобного Write</summary>
|
||||
<member name="M:ObjectToString(System.Object)">
|
||||
<summary>Преобразует объект в строковое представление</summary>
|
||||
</member>
|
||||
<member name="M:ExecuteAssemlyIsDll">
|
||||
<summary>--</summary>
|
||||
|
|
|
|||
Loading…
Reference in a new issue