globtype.pas 8.3 KB

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