globtype.pas 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  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 = extended;
  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. {$ifdef SPARC}
  62. bestreal = real;
  63. ts32real = single;
  64. ts64real = double;
  65. ts80real = extended;
  66. ts64comp = extended;
  67. {$endif}
  68. pbestreal=^bestreal;
  69. { Switches which can be changed locally }
  70. tlocalswitch = (cs_localnone,
  71. { codegen }
  72. cs_check_overflow,cs_check_range,cs_check_object_ext,
  73. cs_check_io,cs_check_stack,
  74. cs_omitstackframe,cs_do_assertion,cs_generate_rtti,
  75. cs_full_boolean_eval,cs_typed_const_writable,
  76. { mmx }
  77. cs_mmx,cs_mmx_saturation,
  78. { parser }
  79. cs_typed_addresses,cs_strict_var_strings,cs_ansistrings
  80. );
  81. tlocalswitches = set of tlocalswitch;
  82. { Switches which can be changed only at the beginning of a new module }
  83. tmoduleswitch = (cs_modulenone,
  84. { parser }
  85. cs_fp_emulation,cs_extsyntax,cs_openstring,
  86. { support }
  87. cs_support_inline,cs_support_goto,cs_support_macro,
  88. cs_support_c_operators,cs_static_keyword,
  89. { generation }
  90. cs_profile,cs_debuginfo,cs_browser,cs_local_browser,cs_compilesystem,
  91. cs_lineinfo,
  92. { linking }
  93. cs_create_smart,cs_create_dynamic
  94. );
  95. tmoduleswitches = set of tmoduleswitch;
  96. { Switches which can be changed only for a whole program/compilation,
  97. mostly set with commandline }
  98. tglobalswitch = (cs_globalnone,
  99. { parameter switches }
  100. cs_check_unit_name,cs_constructor_name,
  101. { units }
  102. cs_load_objpas_unit,
  103. cs_load_gpc_unit,
  104. { optimizer }
  105. cs_regalloc,cs_uncertainopts,cs_littlesize,cs_optimize,
  106. cs_fastoptimize, cs_slowoptimize,cs_align,
  107. { browser }
  108. cs_browser_log,
  109. { debugger }
  110. cs_gdb_dbx,cs_gdb_gsym,cs_gdb_heaptrc,cs_gdb_lineinfo,cs_checkpointer,
  111. { assembling }
  112. cs_asm_leave,cs_asm_extern,cs_asm_pipe,cs_asm_source,
  113. cs_asm_regalloc,cs_asm_tempalloc,
  114. { linking }
  115. cs_link_extern,cs_link_static,cs_link_smart,cs_link_shared,cs_link_deffile,
  116. cs_link_strip,cs_link_staticflag,cs_link_on_target
  117. );
  118. tglobalswitches = set of tglobalswitch;
  119. { Switches which can be changed by a mode (fpc,tp7,delphi) }
  120. tmodeswitch = (m_none,m_all, { needed for keyword }
  121. { generic }
  122. m_fpc,m_objfpc,m_delphi,m_tp7,m_gpc,
  123. { more specific }
  124. m_class, { delphi class model }
  125. m_objpas, { load objpas unit }
  126. m_result, { result in functions }
  127. m_string_pchar, { pchar 2 string conversion }
  128. m_cvar_support, { cvar variable directive }
  129. m_nested_comment, { nested comments }
  130. m_tp_procvar, { tp style procvars (no @ needed) }
  131. m_repeat_forward, { repeating forward declarations is needed }
  132. m_pointer_2_procedure, { allows the assignement of pointers to
  133. procedure variables }
  134. m_autoderef, { does auto dereferencing of struct. vars }
  135. m_initfinal, { initialization/finalization for units }
  136. m_add_pointer, { allow pointer add/sub operations }
  137. m_default_ansistring, { ansistring turned on by default }
  138. m_out, { support the calling convention OUT }
  139. m_default_para, { support default parameters }
  140. m_hintdirective, { support hint directives }
  141. m_duplicate_names { allow locals/paras to have duplicate names of globals }
  142. );
  143. tmodeswitches = set of tmodeswitch;
  144. { win32 & OS/2 application types }
  145. tapptype = (app_none,
  146. app_gui,app_cui,app_fs
  147. );
  148. { interface types }
  149. tinterfacetypes = (
  150. it_interfacecom,
  151. it_interfacecorba
  152. );
  153. { currently parsed block type }
  154. tblock_type = (bt_none,
  155. bt_general,bt_type,bt_const,bt_except
  156. );
  157. { calling convention for tprocdef and tprocvardef }
  158. tproccalloption=(pocall_none,
  159. pocall_cdecl, { procedure uses C styled calling }
  160. pocall_cppdecl, { C++ calling conventions }
  161. pocall_compilerproc, { Procedure is used for internal compiler calls }
  162. pocall_far16, { Far16 for OS/2 }
  163. pocall_fpccall, { FPC default calling }
  164. pocall_inline, { Procedure is an assembler macro }
  165. pocall_internconst, { procedure has constant evaluator intern }
  166. pocall_internproc, { Procedure has compiler magic}
  167. pocall_palmossyscall, { procedure is a PalmOS system call }
  168. pocall_pascal, { pascal standard left to right }
  169. pocall_register, { procedure uses register (fastcall) calling }
  170. pocall_safecall, { safe call calling conventions }
  171. pocall_stdcall, { procedure uses stdcall call }
  172. pocall_system { system call }
  173. );
  174. tproccalloptions = set of tproccalloption;
  175. const
  176. proccalloptionStr : array[tproccalloption] of string[14]=('',
  177. 'CDecl',
  178. 'CPPDecl',
  179. 'CompilerProc',
  180. 'Far16',
  181. 'FPCCall',
  182. 'Inline',
  183. 'InternConst',
  184. 'InternProc',
  185. 'PalmOSSysCall',
  186. 'Pascal',
  187. 'Register',
  188. 'SafeCall',
  189. 'StdCall',
  190. 'System'
  191. );
  192. type
  193. stringid = string[maxidlen];
  194. tnormalset = set of byte; { 256 elements set }
  195. pnormalset = ^tnormalset;
  196. pdouble = ^double;
  197. pbyte = ^byte;
  198. pword = ^word;
  199. plongint = ^longint;
  200. Tconstant=record
  201. case signed:boolean of
  202. false:
  203. (valueu:cardinal);
  204. true:
  205. (values:longint);
  206. end;
  207. {$ifndef Delphi}
  208. {$ifndef xFPC}
  209. type
  210. pguid = ^tguid;
  211. tguid = packed record
  212. D1: LongWord;
  213. D2: Word;
  214. D3: Word;
  215. D4: array[0..7] of Byte;
  216. end;
  217. {$endif}
  218. {$endif}
  219. const
  220. { link options }
  221. link_none = $0;
  222. link_allways = $1;
  223. link_static = $2;
  224. link_smart = $4;
  225. link_shared = $8;
  226. implementation
  227. end.
  228. {
  229. $Log$
  230. Revision 1.21 2002-03-24 19:05:59 carl
  231. + patch for SPARC from Mazen NEIFER
  232. Revision 1.20 2002/01/24 18:25:48 peter
  233. * implicit result variable generation for assembler routines
  234. * removed m_tp modeswitch, use m_tp7 or not(m_fpc) instead
  235. Revision 1.19 2001/10/25 21:22:32 peter
  236. * calling convention rewrite
  237. Revision 1.18 2001/10/24 11:46:06 marco
  238. * Opt Align fix.
  239. Revision 1.17 2001/10/23 21:49:42 peter
  240. * $calling directive and -Cc commandline patch added
  241. from Pavel Ozerski
  242. Revision 1.16 2001/10/20 20:30:21 peter
  243. * read only typed const support, switch $J-
  244. Revision 1.15 2001/09/17 21:29:11 peter
  245. * merged netbsd, fpu-overflow from fixes branch
  246. Revision 1.14 2001/07/30 20:59:27 peter
  247. * m68k updates from v10 merged
  248. Revision 1.13 2001/07/01 20:16:15 peter
  249. * alignmentinfo record added
  250. * -Oa argument supports more alignment settings that can be specified
  251. per type: PROC,LOOP,VARMIN,VARMAX,CONSTMIN,CONSTMAX,RECORDMIN
  252. RECORDMAX,LOCALMIN,LOCALMAX. It is possible to set the mimimum
  253. required alignment and the maximum usefull alignment. The final
  254. alignment will be choosen per variable size dependent on these
  255. settings
  256. Revision 1.12 2001/06/03 21:57:35 peter
  257. + hint directive parsing support
  258. Revision 1.11 2001/01/20 18:32:52 hajny
  259. + APPTYPE support under OS/2, app_fs, GetEnvPChar for OS/2
  260. Revision 1.10 2000/11/29 00:30:30 florian
  261. * unused units removed from uses clause
  262. * some changes for widestrings
  263. Revision 1.9 2000/11/12 22:20:37 peter
  264. * create generic toutputsection for binary writers
  265. Revision 1.8 2000/11/04 14:25:19 florian
  266. + merged Attila's changes for interfaces, not tested yet
  267. Revision 1.7 2000/09/24 15:06:16 peter
  268. * use defines.inc
  269. Revision 1.6 2000/09/21 11:30:49 jonas
  270. + support for full boolean evaluation (b+/b-), default remains short
  271. circuit boolean evaluation
  272. Revision 1.5 2000/08/05 13:25:06 peter
  273. * packenum 1 fixes (merged)
  274. Revision 1.4 2000/08/02 19:49:59 peter
  275. * first things for default parameters
  276. Revision 1.3 2000/07/13 12:08:25 michael
  277. + patched to 1.1.0 with former 1.09patch from peter
  278. Revision 1.2 2000/07/13 11:32:41 michael
  279. + removed logs
  280. }