rtti.inc 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. {
  2. This file is part of the Free Pascal run time library.
  3. Copyright (c) 2011 by Jonas Maebe
  4. member of the Free Pascal development team
  5. See the file COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. **********************************************************************}
  11. procedure fpc_initialize_array_jstring_intern(arr: TJObjectArray; normalarrdim: longint); external name 'fpc_initialize_array_unicodestring';
  12. procedure fpc_initialize_array_unicodestring(arr: TJObjectArray; normalarrdim: longint);compilerproc;
  13. var
  14. i: longint;
  15. begin
  16. if normalarrdim > 0 then
  17. begin
  18. for i:=low(arr) to high(arr) do
  19. fpc_initialize_array_jstring_intern(TJObjectArray(arr[i]),normalarrdim-1);
  20. end
  21. else
  22. begin
  23. for i:=low(arr) to high(arr) do
  24. unicodestring(arr[i]):='';
  25. end;
  26. end;
  27. procedure fpc_initialize_array_ansistring_intern(arr: TJObjectArray; normalarrdim: longint); external name 'fpc_initialize_array_ansistring';
  28. procedure fpc_initialize_array_ansistring(arr: TJObjectArray; normalarrdim: longint);compilerproc;
  29. var
  30. i: longint;
  31. begin
  32. if normalarrdim > 0 then
  33. begin
  34. for i:=low(arr) to high(arr) do
  35. fpc_initialize_array_ansistring_intern(TJObjectArray(arr[i]),normalarrdim-1);
  36. end
  37. else
  38. begin
  39. for i:=low(arr) to high(arr) do
  40. ansistring(arr[i]):='';
  41. end;
  42. end;
  43. procedure fpc_initialize_array_dynarr_intern(arr: TJObjectArray; normalarrdim: longint); external name 'fpc_initialize_array_dynarr';
  44. procedure fpc_initialize_array_dynarr(arr: TJObjectArray; normalarrdim: longint);compilerproc;
  45. var
  46. i: longint;
  47. begin
  48. if normalarrdim > 0 then
  49. begin
  50. for i:=low(arr) to high(arr) do
  51. fpc_initialize_array_dynarr_intern(TJObjectArray(arr[i]),normalarrdim-1);
  52. end
  53. else
  54. begin
  55. for i:=low(arr) to high(arr) do
  56. arr[i]:=nil;
  57. end;
  58. end;
  59. procedure fpc_initialize_array_record_intern(arr: TJObjectArray; normalarrdim: longint; inst: FpcBaseRecordType); external name 'fpc_initialize_array_record';
  60. procedure fpc_initialize_array_record(arr: TJObjectArray; normalarrdim: longint; inst: FpcBaseRecordType);compilerproc;
  61. var
  62. i: longint;
  63. begin
  64. if normalarrdim > 0 then
  65. begin
  66. for i:=low(arr) to high(arr) do
  67. fpc_initialize_array_record_intern(TJObjectArray(arr[i]),normalarrdim-1,inst);
  68. end
  69. else
  70. begin
  71. for i:=low(arr) to high(arr) do
  72. arr[i]:=inst.clone;
  73. end;
  74. end;
  75. procedure fpc_initialize_array_procvar_intern(arr: TJObjectArray; normalarrdim: longint; inst: FpcBaseProcVarType); external name 'fpc_initialize_array_procvar';
  76. procedure fpc_initialize_array_procvar(arr: TJObjectArray; normalarrdim: longint; inst: FpcBaseProcVarType);compilerproc;
  77. var
  78. i: longint;
  79. begin
  80. if normalarrdim > 0 then
  81. begin
  82. for i:=low(arr) to high(arr) do
  83. fpc_initialize_array_procvar_intern(TJObjectArray(arr[i]),normalarrdim-1,inst);
  84. end
  85. else
  86. begin
  87. for i:=low(arr) to high(arr) do
  88. arr[i]:=inst.clone;
  89. end;
  90. end;
  91. { exactly the same as fpc_initialize_array_record, but can't use generic
  92. routine because of Java clonable design :( (except by rtti/invoke, but that's
  93. not particularly fast either) }
  94. procedure fpc_initialize_array_bitset_intern(arr: TJObjectArray; normalarrdim: longint; inst: FpcBitSet); external name 'fpc_initialize_array_bitset';
  95. procedure fpc_initialize_array_bitset(arr: TJObjectArray; normalarrdim: longint; inst: FpcBitSet);compilerproc;
  96. var
  97. i: longint;
  98. begin
  99. if normalarrdim > 0 then
  100. begin
  101. for i:=low(arr) to high(arr) do
  102. fpc_initialize_array_bitset_intern(TJObjectArray(arr[i]),normalarrdim-1,inst);
  103. end
  104. else
  105. begin
  106. for i:=low(arr) to high(arr) do
  107. arr[i]:=inst.clone;
  108. end;
  109. end;
  110. { idem }
  111. procedure fpc_initialize_array_enumset_intern(arr: TJObjectArray; normalarrdim: longint; inst: JUEnumSet); external name 'fpc_initialize_array_enumset';
  112. procedure fpc_initialize_array_enumset(arr: TJObjectArray; normalarrdim: longint; inst: JUEnumSet);compilerproc;
  113. var
  114. i: longint;
  115. begin
  116. if normalarrdim > 0 then
  117. begin
  118. for i:=low(arr) to high(arr) do
  119. fpc_initialize_array_enumset_intern(TJObjectArray(arr[i]),normalarrdim-1,inst);
  120. end
  121. else
  122. begin
  123. for i:=low(arr) to high(arr) do
  124. arr[i]:=inst.clone;
  125. end;
  126. end;
  127. { initialize entire array with the same object, without making copies. Used for
  128. initialization with enum instance }
  129. procedure fpc_initialize_array_object_intern(arr: TJObjectArray; normalarrdim: longint; inst: JLObject); external name 'fpc_initialize_array_object';
  130. procedure fpc_initialize_array_object(arr: TJObjectArray; normalarrdim: longint; inst: JLObject);compilerproc;
  131. var
  132. i: longint;
  133. begin
  134. if normalarrdim > 0 then
  135. begin
  136. for i:=low(arr) to high(arr) do
  137. fpc_initialize_array_object_intern(TJObjectArray(arr[i]),normalarrdim-1,inst);
  138. end
  139. else
  140. begin
  141. for i:=low(arr) to high(arr) do
  142. arr[i]:=inst;
  143. end;
  144. end;
  145. procedure fpc_initialize_array_shortstring_intern(arr: TJObjectArray; normalarrdim: longint; maxlen: byte); external name 'fpc_initialize_array_shortstring';
  146. procedure fpc_initialize_array_shortstring(arr: TJObjectArray; normalarrdim: longint; maxlen: byte);compilerproc;
  147. var
  148. i: longint;
  149. begin
  150. if normalarrdim > 0 then
  151. begin
  152. for i:=low(arr) to high(arr) do
  153. fpc_initialize_array_shortstring_intern(TJObjectArray(arr[i]),normalarrdim-1,maxlen);
  154. end
  155. else
  156. begin
  157. for i:=low(arr) to high(arr) do
  158. arr[i]:=ShortstringClass.CreateEmpty(maxlen);
  159. end;
  160. end;