globtype.pas 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  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_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.31 2000-05-31 06:57:11 florian
  180. * first implementation of -Oa switch
  181. Revision 1.30 2000/05/16 20:19:05 pierre
  182. + -CR option to enable check for object virtual method
  183. Revision 1.29 2000/02/28 17:23:57 daniel
  184. * Current work of symtable integration committed. The symtable can be
  185. activated by defining 'newst', but doesn't compile yet. Changes in type
  186. checking and oop are completed. What is left is to write a new
  187. symtablestack and adapt the parser to use it.
  188. Revision 1.28 2000/02/09 13:22:53 peter
  189. * log truncated
  190. Revision 1.27 2000/02/09 10:35:48 peter
  191. * -Xt option to link staticly against c libs
  192. Revision 1.26 2000/02/06 17:20:52 peter
  193. * -gl switch for auto lineinfo including
  194. Revision 1.25 2000/01/07 01:14:27 peter
  195. * updated copyright to 2000
  196. Revision 1.24 1999/11/12 11:03:50 peter
  197. * searchpaths changed to stringqueue object
  198. Revision 1.23 1999/11/09 13:00:38 peter
  199. * define FPC_DELPHI,FPC_OBJFPC,FPC_TP,FPC_GPC
  200. * initial support for ansistring default with modes
  201. Revision 1.22 1999/11/06 14:34:21 peter
  202. * truncated log to 20 revs
  203. Revision 1.21 1999/11/04 10:55:31 peter
  204. * TSearchPathString for the string type of the searchpaths, which is
  205. ansistring under FPC/Delphi
  206. Revision 1.20 1999/10/22 10:39:34 peter
  207. * split type reading from pdecl to ptype unit
  208. * parameter_dec routine is now used for procedure and procvars
  209. Revision 1.19 1999/09/20 16:38:54 peter
  210. * cs_create_smart instead of cs_smartlink
  211. * -CX is create smartlink
  212. * -CD is create dynamic, but does nothing atm.
  213. Revision 1.18 1999/09/08 16:05:32 peter
  214. * pointer add/sub is now as expected and the same results as inc/dec
  215. Revision 1.17 1999/08/13 15:44:58 peter
  216. * first things to include lineinfo in the executable
  217. Revision 1.16 1999/08/11 17:26:33 peter
  218. * tlinker object is now inherited for win32 and dos
  219. * postprocessexecutable is now a method of tlinker
  220. Revision 1.15 1999/08/04 13:02:42 jonas
  221. * all tokens now start with an underscore
  222. * PowerPC compiles!!
  223. Revision 1.14 1999/08/01 23:04:48 michael
  224. + Changes for Alpha
  225. Revision 1.13 1999/07/23 16:05:21 peter
  226. * alignment is now saved in the symtable
  227. * C alignment added for records
  228. * PPU version increased to solve .12 <-> .13 probs
  229. }