globtype.pas 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  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. interface
  20. const
  21. maxidlen = 64;
  22. type
  23. { System independent float names }
  24. {$ifdef i386}
  25. bestreal = extended;
  26. ts32real = single;
  27. ts64real = double;
  28. ts80real = extended;
  29. ts64comp = extended;
  30. {$endif}
  31. {$ifdef m68k}
  32. bestreal = real;
  33. ts32real = single;
  34. ts64real = double;
  35. ts80real = extended;
  36. ts64comp = comp;
  37. {$endif}
  38. {$ifdef alpha}
  39. bestreal = extended;
  40. ts32real = single;
  41. ts64real = double;
  42. ts80real = extended;
  43. ts64comp = comp;
  44. {$endif}
  45. {$ifdef powerpc}
  46. bestreal = double;
  47. ts32real = single;
  48. ts64real = double;
  49. ts80real = extended;
  50. ts64comp = comp;
  51. {$endif powerpc}
  52. pbestreal=^bestreal;
  53. { Switches which can be changed locally }
  54. tlocalswitch = (cs_localnone,
  55. { codegen }
  56. cs_check_overflow,cs_check_range,cs_check_object_ext,
  57. cs_check_io,cs_check_stack,
  58. cs_omitstackframe,cs_do_assertion,cs_generate_rtti,
  59. { mmx }
  60. cs_mmx,cs_mmx_saturation,
  61. { parser }
  62. cs_typed_addresses,cs_strict_var_strings,cs_ansistrings
  63. );
  64. tlocalswitches = set of tlocalswitch;
  65. { Switches which can be changed only at the beginning of a new module }
  66. tmoduleswitch = (cs_modulenone,
  67. { parser }
  68. cs_fp_emulation,cs_extsyntax,cs_openstring,
  69. { support }
  70. cs_support_inline,cs_support_goto,cs_support_macro,
  71. cs_support_c_operators,cs_static_keyword,
  72. cs_typed_const_not_changeable,
  73. { generation }
  74. cs_profile,cs_debuginfo,cs_browser,cs_local_browser,cs_compilesystem,
  75. cs_lineinfo,
  76. { linking }
  77. cs_create_smart,cs_create_dynamic
  78. );
  79. tmoduleswitches = set of tmoduleswitch;
  80. { Switches which can be changed only for a whole program/compilation,
  81. mostly set with commandline }
  82. tglobalswitch = (cs_globalnone,
  83. { parameter switches }
  84. cs_check_unit_name,cs_constructor_name,
  85. { units }
  86. cs_load_objpas_unit,
  87. cs_load_gpc_unit,
  88. { optimizer }
  89. cs_regalloc,cs_uncertainopts,cs_littlesize,cs_optimize,
  90. cs_fastoptimize, cs_slowoptimize,cs_align,
  91. { browser }
  92. cs_browser_log,
  93. { debugger }
  94. cs_gdb_dbx,cs_gdb_gsym,cs_gdb_heaptrc,cs_gdb_lineinfo,cs_checkpointer,
  95. { assembling }
  96. cs_asm_leave,cs_asm_extern,cs_asm_pipe,cs_asm_source,
  97. cs_asm_regalloc,cs_asm_tempalloc,
  98. { linking }
  99. cs_link_extern,cs_link_static,cs_link_smart,cs_link_shared,cs_link_deffile,
  100. cs_link_strip,cs_link_toc,cs_link_staticflag
  101. );
  102. tglobalswitches = set of tglobalswitch;
  103. { Switches which can be changed by a mode (fpc,tp7,delphi) }
  104. tmodeswitch = (m_none,m_all, { needed for keyword }
  105. { generic }
  106. m_fpc,m_objfpc,m_delphi,m_tp,m_tp7,m_gpc,
  107. { more specific }
  108. m_class, { delphi class model }
  109. m_objpas, { load objpas unit }
  110. m_result, { result in functions }
  111. m_string_pchar, { pchar 2 string conversion }
  112. m_cvar_support, { cvar variable directive }
  113. m_nested_comment, { nested comments }
  114. m_tp_procvar, { tp style procvars (no @ needed) }
  115. m_repeat_forward, { repeating forward declarations is needed }
  116. m_pointer_2_procedure, { allows the assignement of pointers to
  117. procedure variables }
  118. m_autoderef, { does auto dereferencing of struct. vars }
  119. m_initfinal, { initialization/finalization for units }
  120. m_add_pointer, { allow pointer add/sub operations }
  121. m_default_ansistring { ansistring turned on by default }
  122. );
  123. tmodeswitches = set of tmodeswitch;
  124. { win32 sub system }
  125. tapptype = (at_none,
  126. at_gui,at_cui
  127. );
  128. { currently parsed block type }
  129. tblock_type = (bt_none,
  130. bt_general,bt_type,bt_const,bt_except
  131. );
  132. { packrecords types }
  133. tpackrecords = (packrecord_none,
  134. packrecord_1,packrecord_2,packrecord_4,
  135. packrecord_8,packrecord_16,packrecord_32,
  136. packrecord_C
  137. );
  138. const
  139. packrecordalignment : array[tpackrecords] of byte=(0,
  140. 1,2,4,8,16,32,1
  141. );
  142. type
  143. stringid = string[maxidlen];
  144. tnormalset = set of byte; { 256 elements set }
  145. pnormalset = ^tnormalset;
  146. pdouble = ^double;
  147. pbyte = ^byte;
  148. pword = ^word;
  149. plongint = ^longint;
  150. {$IFDEF TP}
  151. Tconstant=record
  152. case signed:boolean of
  153. false:
  154. (valueu:longint);
  155. true:
  156. (values:longint);
  157. end;
  158. {$ELSE}
  159. Tconstant=record
  160. case signed:boolean of
  161. false:
  162. (valueu:cardinal);
  163. true:
  164. (values:longint);
  165. end;
  166. {$ENDIF}
  167. const
  168. { link options }
  169. link_none = $0;
  170. link_allways = $1;
  171. link_static = $2;
  172. link_smart = $4;
  173. link_shared = $8;
  174. implementation
  175. begin
  176. end.
  177. {
  178. $Log$
  179. Revision 1.1 2000-07-13 06:29:51 michael
  180. + Initial import
  181. Revision 1.32 2000/06/11 07:00:21 peter
  182. * fixed pchar->string conversion for delphi mode
  183. Revision 1.31 2000/05/31 06:57:11 florian
  184. * first implementation of -Oa switch
  185. Revision 1.30 2000/05/16 20:19:05 pierre
  186. + -CR option to enable check for object virtual method
  187. Revision 1.29 2000/02/28 17:23:57 daniel
  188. * Current work of symtable integration committed. The symtable can be
  189. activated by defining 'newst', but doesn't compile yet. Changes in type
  190. checking and oop are completed. What is left is to write a new
  191. symtablestack and adapt the parser to use it.
  192. Revision 1.28 2000/02/09 13:22:53 peter
  193. * log truncated
  194. Revision 1.27 2000/02/09 10:35:48 peter
  195. * -Xt option to link staticly against c libs
  196. Revision 1.26 2000/02/06 17:20:52 peter
  197. * -gl switch for auto lineinfo including
  198. Revision 1.25 2000/01/07 01:14:27 peter
  199. * updated copyright to 2000
  200. Revision 1.24 1999/11/12 11:03:50 peter
  201. * searchpaths changed to stringqueue object
  202. Revision 1.23 1999/11/09 13:00:38 peter
  203. * define FPC_DELPHI,FPC_OBJFPC,FPC_TP,FPC_GPC
  204. * initial support for ansistring default with modes
  205. Revision 1.22 1999/11/06 14:34:21 peter
  206. * truncated log to 20 revs
  207. Revision 1.21 1999/11/04 10:55:31 peter
  208. * TSearchPathString for the string type of the searchpaths, which is
  209. ansistring under FPC/Delphi
  210. Revision 1.20 1999/10/22 10:39:34 peter
  211. * split type reading from pdecl to ptype unit
  212. * parameter_dec routine is now used for procedure and procvars
  213. Revision 1.19 1999/09/20 16:38:54 peter
  214. * cs_create_smart instead of cs_smartlink
  215. * -CX is create smartlink
  216. * -CD is create dynamic, but does nothing atm.
  217. Revision 1.18 1999/09/08 16:05:32 peter
  218. * pointer add/sub is now as expected and the same results as inc/dec
  219. Revision 1.17 1999/08/13 15:44:58 peter
  220. * first things to include lineinfo in the executable
  221. Revision 1.16 1999/08/11 17:26:33 peter
  222. * tlinker object is now inherited for win32 and dos
  223. * postprocessexecutable is now a method of tlinker
  224. Revision 1.15 1999/08/04 13:02:42 jonas
  225. * all tokens now start with an underscore
  226. * PowerPC compiles!!
  227. Revision 1.14 1999/08/01 23:04:48 michael
  228. + Changes for Alpha
  229. Revision 1.13 1999/07/23 16:05:21 peter
  230. * alignment is now saved in the symtable
  231. * C alignment added for records
  232. * PPU version increased to solve .12 <-> .13 probs
  233. }