globtype.pas 8.5 KB

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