globtype.pas 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. {
  2. $Id$
  3. Copyright (c) 1998-2000 by Florian Klaempfl, Pierre Muller
  4. Global types
  5. This program is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 2 of the License, or
  8. (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program; if not, write to the Free Software
  15. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  16. ****************************************************************************
  17. }
  18. unit globtype;
  19. {$i defines.inc}
  20. interface
  21. const
  22. maxidlen = 64;
  23. type
  24. { System independent float names }
  25. {$ifdef i386}
  26. bestreal = extended;
  27. ts32real = single;
  28. ts64real = double;
  29. ts80real = extended;
  30. ts64comp = extended;
  31. {$endif}
  32. {$ifdef m68k}
  33. bestreal = real;
  34. ts32real = single;
  35. ts64real = double;
  36. ts80real = extended;
  37. ts64comp = comp;
  38. {$endif}
  39. {$ifdef alpha}
  40. bestreal = extended;
  41. ts32real = single;
  42. ts64real = double;
  43. ts80real = extended;
  44. ts64comp = comp;
  45. {$endif}
  46. {$ifdef powerpc}
  47. bestreal = double;
  48. ts32real = single;
  49. ts64real = double;
  50. ts80real = extended;
  51. ts64comp = comp;
  52. {$endif powerpc}
  53. {$ifdef ia64}
  54. bestreal = extended;
  55. ts32real = single;
  56. ts64real = double;
  57. ts80real = extended;
  58. { on the ia64 comp will be mapped to int64 }
  59. ts64comp = comp;
  60. {$endif}
  61. pbestreal=^bestreal;
  62. { Switches which can be changed locally }
  63. tlocalswitch = (cs_localnone,
  64. { codegen }
  65. cs_check_overflow,cs_check_range,cs_check_object_ext,
  66. cs_check_io,cs_check_stack,
  67. cs_omitstackframe,cs_do_assertion,cs_generate_rtti,
  68. cs_full_boolean_eval,
  69. { mmx }
  70. cs_mmx,cs_mmx_saturation,
  71. { parser }
  72. cs_typed_addresses,cs_strict_var_strings,cs_ansistrings
  73. );
  74. tlocalswitches = set of tlocalswitch;
  75. { Switches which can be changed only at the beginning of a new module }
  76. tmoduleswitch = (cs_modulenone,
  77. { parser }
  78. cs_fp_emulation,cs_extsyntax,cs_openstring,
  79. { support }
  80. cs_support_inline,cs_support_goto,cs_support_macro,
  81. cs_support_c_operators,cs_static_keyword,
  82. cs_typed_const_not_changeable,
  83. { generation }
  84. cs_profile,cs_debuginfo,cs_browser,cs_local_browser,cs_compilesystem,
  85. cs_lineinfo,
  86. { linking }
  87. cs_create_smart,cs_create_dynamic
  88. );
  89. tmoduleswitches = set of tmoduleswitch;
  90. { Switches which can be changed only for a whole program/compilation,
  91. mostly set with commandline }
  92. tglobalswitch = (cs_globalnone,
  93. { parameter switches }
  94. cs_check_unit_name,cs_constructor_name,
  95. { units }
  96. cs_load_objpas_unit,
  97. cs_load_gpc_unit,
  98. { optimizer }
  99. cs_regalloc,cs_uncertainopts,cs_littlesize,cs_optimize,
  100. cs_fastoptimize, cs_slowoptimize,
  101. { browser }
  102. cs_browser_log,
  103. { debugger }
  104. cs_gdb_dbx,cs_gdb_gsym,cs_gdb_heaptrc,cs_gdb_lineinfo,cs_checkpointer,
  105. { assembling }
  106. cs_asm_leave,cs_asm_extern,cs_asm_pipe,cs_asm_source,
  107. cs_asm_regalloc,cs_asm_tempalloc,
  108. { linking }
  109. cs_link_extern,cs_link_static,cs_link_smart,cs_link_shared,cs_link_deffile,
  110. cs_link_strip,cs_link_staticflag
  111. );
  112. tglobalswitches = set of tglobalswitch;
  113. { Switches which can be changed by a mode (fpc,tp7,delphi) }
  114. tmodeswitch = (m_none,m_all, { needed for keyword }
  115. { generic }
  116. m_fpc,m_objfpc,m_delphi,m_tp,m_tp7,m_gpc,
  117. { more specific }
  118. m_class, { delphi class model }
  119. m_objpas, { load objpas unit }
  120. m_result, { result in functions }
  121. m_string_pchar, { pchar 2 string conversion }
  122. m_cvar_support, { cvar variable directive }
  123. m_nested_comment, { nested comments }
  124. m_tp_procvar, { tp style procvars (no @ needed) }
  125. m_repeat_forward, { repeating forward declarations is needed }
  126. m_pointer_2_procedure, { allows the assignement of pointers to
  127. procedure variables }
  128. m_autoderef, { does auto dereferencing of struct. vars }
  129. m_initfinal, { initialization/finalization for units }
  130. m_add_pointer, { allow pointer add/sub operations }
  131. m_default_ansistring, { ansistring turned on by default }
  132. m_out, { support the calling convention OUT }
  133. m_default_para, { support default parameters }
  134. m_hintdirective { support hint directives }
  135. );
  136. tmodeswitches = set of tmodeswitch;
  137. { win32 & OS/2 application types }
  138. tapptype = (app_none,
  139. app_gui,app_cui,app_fs
  140. );
  141. { interface types }
  142. tinterfacetypes = (
  143. it_interfacecom,
  144. it_interfacecorba
  145. );
  146. { currently parsed block type }
  147. tblock_type = (bt_none,
  148. bt_general,bt_type,bt_const,bt_except
  149. );
  150. type
  151. stringid = string[maxidlen];
  152. tnormalset = set of byte; { 256 elements set }
  153. pnormalset = ^tnormalset;
  154. pdouble = ^double;
  155. pbyte = ^byte;
  156. pword = ^word;
  157. plongint = ^longint;
  158. Tconstant=record
  159. case signed:boolean of
  160. false:
  161. (valueu:cardinal);
  162. true:
  163. (values:longint);
  164. end;
  165. {$ifndef Delphi}
  166. {$ifndef xFPC}
  167. type
  168. tguid = packed record
  169. D1: LongWord;
  170. D2: Word;
  171. D3: Word;
  172. D4: array[0..7] of Byte;
  173. end;
  174. {$endif}
  175. {$endif}
  176. const
  177. { link options }
  178. link_none = $0;
  179. link_allways = $1;
  180. link_static = $2;
  181. link_smart = $4;
  182. link_shared = $8;
  183. implementation
  184. end.
  185. {
  186. $Log$
  187. Revision 1.13 2001-07-01 20:16:15 peter
  188. * alignmentinfo record added
  189. * -Oa argument supports more alignment settings that can be specified
  190. per type: PROC,LOOP,VARMIN,VARMAX,CONSTMIN,CONSTMAX,RECORDMIN
  191. RECORDMAX,LOCALMIN,LOCALMAX. It is possible to set the mimimum
  192. required alignment and the maximum usefull alignment. The final
  193. alignment will be choosen per variable size dependent on these
  194. settings
  195. Revision 1.12 2001/06/03 21:57:35 peter
  196. + hint directive parsing support
  197. Revision 1.11 2001/01/20 18:32:52 hajny
  198. + APPTYPE support under OS/2, app_fs, GetEnvPChar for OS/2
  199. Revision 1.10 2000/11/29 00:30:30 florian
  200. * unused units removed from uses clause
  201. * some changes for widestrings
  202. Revision 1.9 2000/11/12 22:20:37 peter
  203. * create generic toutputsection for binary writers
  204. Revision 1.8 2000/11/04 14:25:19 florian
  205. + merged Attila's changes for interfaces, not tested yet
  206. Revision 1.7 2000/09/24 15:06:16 peter
  207. * use defines.inc
  208. Revision 1.6 2000/09/21 11:30:49 jonas
  209. + support for full boolean evaluation (b+/b-), default remains short
  210. circuit boolean evaluation
  211. Revision 1.5 2000/08/05 13:25:06 peter
  212. * packenum 1 fixes (merged)
  213. Revision 1.4 2000/08/02 19:49:59 peter
  214. * first things for default parameters
  215. Revision 1.3 2000/07/13 12:08:25 michael
  216. + patched to 1.1.0 with former 1.09patch from peter
  217. Revision 1.2 2000/07/13 11:32:41 michael
  218. + removed logs
  219. }