TypeName - оставил в интерфейсе только необходимое

This commit is contained in:
Mikhalkovich Stanislav 2024-05-06 22:30:41 +03:00
parent efafd27ffb
commit 7681391663
7 changed files with 41 additions and 59 deletions

View file

@ -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 = "3473";
public const string Revision = "3474";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%MINOR%=9
%REVISION%=3473
%COREVERSION%=0
%REVISION%=3474
%MINOR%=9
%MAJOR%=3

Binary file not shown.

View file

@ -1 +1 @@
3.9.0.3473
3.9.0.3474

View file

@ -1 +1 @@
!define VERSION '3.9.0.3473'
!define VERSION '3.9.0.3474'

View file

@ -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 должен быть размерным
@ -4178,6 +4170,8 @@ function operator implicit(s: string): StringBuilder; extensionmethod := new Str
// _ObjectToString
//------------------------------------------------------------------------------
procedure TypeToTypeNameHelper(t: System.Type; res: TextWriter); forward;
type
ObjectToStringUtils = static class
@ -4219,7 +4213,7 @@ type
res.Write( name );
res.Write(': ');
end;
TypeToTypeName(par.ParameterType, res);
TypeToTypeNameHelper(par.ParameterType, res);
end;
res.Write(')');
end;
@ -4227,14 +4221,15 @@ 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 = '; ';
const val_sep = '; ';
begin
res.Write('(');
var any_vals := false;
@ -4299,10 +4294,10 @@ 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;
const max_seq_len = 100;
begin
if o = nil then
begin
@ -4484,9 +4479,7 @@ type
{$endregion IEnumerable}
ContentsToString(o, prev, res);
end;
end;
function TryWriteFromTypeCode(t: System.Type; res: TextWriter): boolean;
@ -4522,7 +4515,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 +4539,7 @@ begin
if rank<1 then
raise new NotImplementedException;
res.Write(' of ');
TypeToTypeName(t.GetElementType, res);
TypeToTypeNameHelper(t.GetElementType, res);
exit;
end;
@ -4562,7 +4555,7 @@ begin
) then
begin
res.Write('sequence of ');
TypeToTypeName(typed.GetGenericArguments.Single, res);
TypeToTypeNameHelper(typed.GetGenericArguments.Single, res);
exit;
end;
end;
@ -4579,7 +4572,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 +4620,7 @@ begin
gen_args := own_args;
end;
TypeToTypeName(parent, res);
TypeToTypeNameHelper(parent, res);
res.Write('+');
end;
@ -4641,7 +4634,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 +4646,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,26 +4666,26 @@ 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);
Result := res.ToString;
end;
function TypeName(o: object): string;
begin
var res := new StringBuilder;
TypeName(o, res);
TypeToTypeNameHelper(t, res);
Result := res.ToString;
end;

View file

@ -1267,22 +1267,10 @@
<summary>Возвращает последовательность имен каталогов по заданному пути, включая подкаталоги</summary>
</member>
<member name="M:TypeToTypeName(System.Type)">
<summary>Возвращает имя отражённого типа "t"</summary>
</member>
<member name="M:TypeToTypeName(System.Type,System.Text.StringBuilder)">
<summary>Добавляет в res имя отражённого типа "t"</summary>
</member>
<member name="M:TypeToTypeName(System.Type,System.IO.TextWriter)">
<summary>Записывает в res имя отражённого типа "t"</summary>
<summary>Возвращает строку с именем данного типа</summary>
</member>
<member name="M:TypeName(System.Object)">
<summary>Возвращает имя типа объекта "o"</summary>
</member>
<member name="M:TypeName(System.Object,System.Text.StringBuilder)">
<summary>Добавляет в res имя типа объекта "o"</summary>
</member>
<member name="M:TypeName(System.Object,System.IO.TextWriter)">
<summary>Записывает в res имя типа объекта "o"</summary>
<summary>Возвращает строку с именем типа объекта</summary>
</member>
<member name="M:ExtractFileName(System.String)">
<summary>Выделяет имя файла из полного имени файла fileName</summary>