globtype.pas 8.2 KB

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