<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body smarttemplateinserted="true">
<div id="smartTemplate4-template">Hi,</div>
<div><br>
</div>
<div>that is generating rather odd code (r40721)<br>
<p>project1.lpr:9 begin<br>
0000000000401090 55 push %rbp<br>
0000000000401091 4889e5 mov %rsp,%rbp<br>
0000000000401094 488d6424f0 lea
-0x10(%rsp),%rsp<br>
0000000000401099 48895df8 mov %rbx,-0x8(%rbp)<br>
project1.lpr:10 if TypeInfo(T) =
TypeInfo(Integer) then WriteLn('an integer');<br>
000000000040109D 488d1584af0700 lea
0x7af84(%rip),%rdx # 0x47c028
<RTTI_$SYSTEM_$$_LONGINT><br>
00000000004010A4 488d057daf0700 lea
0x7af7d(%rip),%rax # 0x47c028
<RTTI_$SYSTEM_$$_LONGINT><br>
00000000004010AB 4839c2 cmp %rax,%rdx<br>
00000000004010AE 752b jne 0x4010db
<ADD$1$CRC713F463B+75><br>
00000000004010B0 e8cbcf0100 callq 0x41e080
<fpc_get_output><br>
00000000004010B5 4889c3 mov %rax,%rbx<br>
00000000004010B8 488d15412f0600 lea
0x62f41(%rip),%rdx # 0x464000 <_$PROJECT1$_Ld1><br>
00000000004010BF 4889de mov %rbx,%rsi<br>
00000000004010C2 31ff xor %edi,%edi<br>
00000000004010C4 e867d30100 callq 0x41e430
<fpc_write_text_shortstr><br>
00000000004010C9 e8d2700100 callq 0x4181a0
<fpc_iocheck><br>
00000000004010CE 4889df mov %rbx,%rdi<br>
00000000004010D1 e85ad20100 callq 0x41e330
<fpc_writeln_end><br>
00000000004010D6 e8c5700100 callq 0x4181a0
<fpc_iocheck><br>
project1.lpr:11 if TypeInfo(T) =
TypeInfo(String) then WriteLn('a string');<br>
00000000004010DB 488d0546af0700 lea
0x7af46(%rip),%rax # 0x47c028
<RTTI_$SYSTEM_$$_LONGINT><br>
00000000004010E2 488d1537b20700 lea
0x7b237(%rip),%rdx # 0x47c320
<RTTI_$SYSTEM_$$_SHORTSTRING><br>
00000000004010E9 4839d0 cmp %rdx,%rax<br>
00000000004010EC 752b jne 0x401119
<ADD$1$CRC713F463B+137><br>
00000000004010EE e88dcf0100 callq 0x41e080
<fpc_get_output><br>
00000000004010F3 4889c3 mov %rax,%rbx<br>
00000000004010F6 488d15132f0600 lea
0x62f13(%rip),%rdx # 0x464010 <_$PROJECT1$_Ld2><br>
00000000004010FD 4889de mov %rbx,%rsi<br>
0000000000401100 31ff xor %edi,%edi<br>
0000000000401102 e829d30100 callq 0x41e430
<fpc_write_text_shortstr><br>
0000000000401107 e894700100 callq 0x4181a0
<fpc_iocheck><br>
000000000040110C 4889df mov %rbx,%rdi<br>
000000000040110F e81cd20100 callq 0x41e330
<fpc_writeln_end><br>
0000000000401114 e887700100 callq 0x4181a0
<fpc_iocheck><br>
project1.lpr:12 end;<br>
<br>
</p>
The compiler should know everything about TypeInfo(T) and optimize
it away where possible<br>
<br>
Cheers,<br>
Benito </div>
<div class="moz-cite-prefix">On 25.08.20 04:32, leledumbo via
fpc-pascal wrote:<br>
</div>
<blockquote type="cite"
cite="mid:1598322758866-0.post@n5.nabble.com">
<blockquote type="cite">
<pre class="moz-quote-pre" wrap="">I remember something like this in RTTI though but can't find it in your
</pre>
</blockquote>
<pre class="moz-quote-pre" wrap="">docs yet for generics.
{$mode objfpc}
uses
typinfo;
generic procedure Add<T>;
begin
if TypeInfo(T) = TypeInfo(Integer) then WriteLn('an integer');
if TypeInfo(T) = TypeInfo(String) then WriteLn('a string');
end;
begin
specialize Add<Integer>;
specialize Add<String>;
end.
--
Sent from: <a class="moz-txt-link-freetext" href="http://free-pascal-general.1045716.n5.nabble.com/">http://free-pascal-general.1045716.n5.nabble.com/</a>
_______________________________________________
fpc-pascal maillist - <a class="moz-txt-link-abbreviated" href="mailto:fpc-pascal@lists.freepascal.org">fpc-pascal@lists.freepascal.org</a>
<a class="moz-txt-link-freetext" href="https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal">https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal</a>
</pre>
</blockquote>
</body>
</html>