symconst.pas 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538
  1. {
  2. $Id$
  3. Copyright (c) 1998-2000 by Florian Klaempfl, Pierre Muller
  4. Symbol table constants
  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 symconst;
  19. {$i defines.inc}
  20. interface
  21. const
  22. def_alignment = 4;
  23. { if you change one of the following contants, }
  24. { you have also to change the typinfo unit}
  25. { and the rtl/i386,template/rttip.inc files }
  26. tkUnknown = 0;
  27. tkInteger = 1;
  28. tkChar = 2;
  29. tkEnumeration = 3;
  30. tkFloat = 4;
  31. tkSet = 5;
  32. tkMethod = 6;
  33. tkSString = 7;
  34. tkString = tkSString;
  35. tkLString = 8;
  36. tkAString = 9;
  37. tkWString = 10;
  38. tkVariant = 11;
  39. tkArray = 12;
  40. tkRecord = 13;
  41. tkInterface= 14;
  42. tkClass = 15;
  43. tkObject = 16;
  44. tkWChar = 17;
  45. tkBool = 18;
  46. tkInt64 = 19;
  47. tkQWord = 20;
  48. tkDynArray = 21;
  49. tkInterfaceCorba = 22;
  50. otSByte = 0;
  51. otUByte = 1;
  52. otSWord = 2;
  53. otUWord = 3;
  54. otSLong = 4;
  55. otULong = 5;
  56. ftSingle = 0;
  57. ftDouble = 1;
  58. ftExtended = 2;
  59. ftComp = 3;
  60. ftCurr = 4;
  61. mkProcedure= 0;
  62. mkFunction = 1;
  63. mkConstructor = 2;
  64. mkDestructor = 3;
  65. mkClassProcedure= 4;
  66. mkClassFunction = 5;
  67. pfvar = 1;
  68. pfConst = 2;
  69. pfArray = 4;
  70. pfAddress = 8;
  71. pfReference= 16;
  72. pfOut = 32;
  73. main_program_level = 1;
  74. unit_init_level = 1;
  75. normal_function_level = 2;
  76. type
  77. { Deref entry options }
  78. tdereftype = (derefnil,
  79. derefaktrecordindex,
  80. derefaktstaticindex,
  81. derefunit,
  82. derefrecord,
  83. derefindex,
  84. dereflocal,
  85. derefpara,
  86. derefaktlocal
  87. );
  88. { symbol options }
  89. tsymoption=(sp_none,
  90. sp_public,
  91. sp_private,
  92. sp_published,
  93. sp_protected,
  94. sp_static,
  95. sp_hint_deprecated,
  96. sp_hint_platform,
  97. sp_hint_library,
  98. sp_has_overloaded
  99. ,sp_10
  100. ,sp_11
  101. ,sp_12
  102. ,sp_13
  103. ,sp_14
  104. ,sp_15
  105. ,sp_16
  106. ,sp_17
  107. ,sp_18
  108. ,sp_19
  109. ,sp_20
  110. ,sp_21
  111. ,sp_22
  112. ,sp_23
  113. ,sp_24
  114. );
  115. tsymoptions=set of tsymoption;
  116. { flags for a definition }
  117. tdefoption=(df_none,
  118. df_has_inittable, { init data has been generated }
  119. df_has_rttitable { rtti data has been generated }
  120. ,df_3
  121. ,df_4
  122. ,df_5
  123. ,df_6
  124. ,df_7
  125. ,df_8
  126. ,df_9
  127. ,df_10
  128. ,df_11
  129. ,df_12
  130. ,df_13
  131. ,df_14
  132. ,df_15
  133. ,df_16
  134. ,df_17
  135. ,df_18
  136. ,df_19
  137. ,df_20
  138. ,df_21
  139. ,df_22
  140. ,df_23
  141. ,df_24
  142. );
  143. tdefoptions=set of tdefoption;
  144. { base types for orddef }
  145. tbasetype = (
  146. uauto,uvoid,uchar,
  147. u8bit,u16bit,u32bit,
  148. s8bit,s16bit,s32bit,
  149. bool8bit,bool16bit,bool32bit,
  150. u64bit,s64bit,uwidechar
  151. );
  152. { float types }
  153. tfloattype = (
  154. s32real,s64real,s80real,
  155. s64comp
  156. );
  157. { string types }
  158. tstringtype = (st_default,
  159. st_shortstring, st_longstring, st_ansistring, st_widestring
  160. );
  161. { set types }
  162. tsettype = (
  163. normset,smallset,varset
  164. );
  165. { calling convention for tprocdef and tprocvardef }
  166. tproccalloption=(pocall_none,
  167. pocall_clearstack, { Use IBM flat calling convention. (Used by GCC.) }
  168. pocall_leftright, { Push parameters from left to right }
  169. pocall_cdecl, { procedure uses C styled calling }
  170. pocall_register, { procedure uses register (fastcall) calling }
  171. pocall_stdcall, { procedure uses stdcall call }
  172. pocall_safecall, { safe call calling conventions }
  173. pocall_palmossyscall, { procedure is a PalmOS system call }
  174. pocall_system,
  175. pocall_inline, { Procedure is an assembler macro }
  176. pocall_internproc, { Procedure has compiler magic}
  177. pocall_internconst, { procedure has constant evaluator intern }
  178. pocall_cppdecl, { C++ calling conventions }
  179. pocall_compilerproc { Procedure is used for internal compiler calls }
  180. ,pocall_14
  181. ,pocall_15
  182. ,pocall_16
  183. ,pocall_17
  184. ,pocall_18
  185. ,pocall_19
  186. ,pocall_20
  187. ,pocall_21
  188. ,pocall_22
  189. ,pocall_23
  190. ,pocall_24
  191. );
  192. tproccalloptions=set of tproccalloption;
  193. { basic type for tprocdef and tprocvardef }
  194. tproctypeoption=(potype_none,
  195. potype_proginit, { Program initialization }
  196. potype_unitinit, { unit initialization }
  197. potype_unitfinalize, { unit finalization }
  198. potype_constructor, { Procedure is a constructor }
  199. potype_destructor, { Procedure is a destructor }
  200. potype_operator { Procedure defines an operator }
  201. ,potype_7
  202. ,potype_8
  203. ,potype_9
  204. ,potype_10
  205. ,potype_11
  206. ,potype_12
  207. ,potype_13
  208. ,potype_14
  209. ,potype_15
  210. ,potype_16
  211. ,potype_17
  212. ,potype_18
  213. ,potype_19
  214. ,potype_20
  215. ,potype_21
  216. ,potype_22
  217. ,potype_23
  218. ,potype_24
  219. );
  220. tproctypeoptions=set of tproctypeoption;
  221. { other options for tprocdef and tprocvardef }
  222. tprocoption=(po_none,
  223. po_classmethod, { class method }
  224. po_virtualmethod, { Procedure is a virtual method }
  225. po_abstractmethod, { Procedure is an abstract method }
  226. po_staticmethod, { static method }
  227. po_overridingmethod, { method with override directive }
  228. po_methodpointer, { method pointer, only in procvardef, also used for 'with object do' }
  229. po_containsself, { self is passed explicit to the compiler }
  230. po_interrupt, { Procedure is an interrupt handler }
  231. po_iocheck, { IO checking should be done after a call to the procedure }
  232. po_assembler, { Procedure is written in assembler }
  233. po_msgstr, { method for string message handling }
  234. po_msgint, { method for int message handling }
  235. po_exports, { Procedure has export directive (needed for OS/2) }
  236. po_external, { Procedure is external (in other object or lib)}
  237. po_savestdregs, { save std regs cdecl and stdcall need that ! }
  238. po_saveregisters, { save all registers }
  239. po_overload, { procedure is declared with overload directive }
  240. po_varargs { printf like arguments }
  241. ,po_19
  242. ,po_20
  243. ,po_21
  244. ,po_22
  245. ,po_23
  246. ,po_24
  247. );
  248. tprocoptions=set of tprocoption;
  249. { options for objects and classes }
  250. tobjectdeftype = (odt_none,
  251. odt_class,
  252. odt_object,
  253. odt_interfacecom,
  254. odt_interfacecorba,
  255. odt_cppclass
  256. );
  257. { options for objects and classes }
  258. tobjectoption=(oo_none,
  259. oo_is_forward, { the class is only a forward declared yet }
  260. oo_has_virtual, { the object/class has virtual methods }
  261. oo_has_private,
  262. oo_has_protected,
  263. oo_has_constructor, { the object/class has a constructor }
  264. oo_has_destructor, { the object/class has a destructor }
  265. oo_has_vmt, { the object/class has a vmt }
  266. oo_has_msgstr,
  267. oo_has_msgint,
  268. oo_has_abstract, { the object/class has an abstract method => no instances can be created }
  269. oo_can_have_published { the class has rtti, i.e. you can publish properties }
  270. ,oo_12
  271. ,oo_13
  272. ,oo_14
  273. ,oo_15
  274. ,oo_16
  275. ,oo_17
  276. ,oo_18
  277. ,oo_19
  278. ,oo_20
  279. ,oo_21
  280. ,oo_22
  281. ,oo_23
  282. ,oo_24
  283. );
  284. tobjectoptions=set of tobjectoption;
  285. { options for properties }
  286. tpropertyoption=(ppo_none,
  287. ppo_indexed,
  288. ppo_defaultproperty,
  289. ppo_stored,
  290. ppo_hasparameters,
  291. ppo_is_override
  292. ,ppo_6
  293. ,ppo_7
  294. ,ppo_8
  295. ,ppo_9
  296. ,ppo_10
  297. ,ppo_11
  298. ,ppo_12
  299. ,ppo_13
  300. ,ppo_14
  301. ,ppo_15
  302. ,ppo_16
  303. ,ppo_17
  304. ,ppo_18
  305. ,ppo_19
  306. ,ppo_20
  307. ,ppo_21
  308. ,ppo_22
  309. ,ppo_23
  310. ,ppo_24
  311. );
  312. tpropertyoptions=set of tpropertyoption;
  313. { options for variables }
  314. tvaroption=(vo_none,
  315. vo_regable,
  316. vo_is_C_var,
  317. vo_is_external,
  318. vo_is_dll_var,
  319. vo_is_thread_var,
  320. vo_fpuregable,
  321. vo_is_local_copy,
  322. vo_is_const, { variable is declared as const (parameter) and can't be written to }
  323. vo_is_exported
  324. ,vo_10
  325. ,vo_11
  326. ,vo_12
  327. ,vo_13
  328. ,vo_14
  329. ,vo_15
  330. ,vo_16
  331. ,vo_17
  332. ,vo_18
  333. ,vo_19
  334. ,vo_20
  335. ,vo_21
  336. ,vo_22
  337. ,vo_23
  338. ,vo_24
  339. );
  340. tvaroptions=set of tvaroption;
  341. { types of the symtables }
  342. tsymtabletype = (abstractsymtable,
  343. globalsymtable,staticsymtable,
  344. objectsymtable,recordsymtable,
  345. localsymtable,parasymtable,
  346. withsymtable,stt_exceptsymtable,
  347. { used for inline detection }
  348. inlineparasymtable,inlinelocalsymtable
  349. );
  350. { definition contains the informations about a type }
  351. tdeftype = (abstractdef,arraydef,recorddef,pointerdef,orddef,
  352. stringdef,enumdef,procdef,objectdef,errordef,
  353. filedef,formaldef,setdef,procvardef,floatdef,
  354. classrefdef,forwarddef,variantdef);
  355. { possible types for symtable entries }
  356. tsymtyp = (abstractsym,varsym,typesym,procsym,unitsym,
  357. constsym,enumsym,typedconstsym,errorsym,syssym,
  358. labelsym,absolutesym,propertysym,funcretsym,
  359. macrosym,rttisym);
  360. { State of the variable, if it's declared, assigned or used }
  361. tvarstate=(vs_none,
  362. vs_declared,vs_declared_and_first_found,
  363. vs_set_but_first_not_passed,vs_assigned,vs_used
  364. );
  365. absolutetyp = (tovar,toasm,toaddr);
  366. tconsttyp = (constnone,
  367. constord,conststring,constreal,constbool,
  368. constint,constchar,constset,constpointer,constnil,
  369. constresourcestring,constwstring,constwchar
  370. );
  371. { RTTI information to store }
  372. trttitype = (
  373. fullrtti,initrtti
  374. );
  375. {$ifdef GDB}
  376. type
  377. tdefstabstatus = (
  378. not_written,
  379. being_written,
  380. written);
  381. const
  382. tagtypes : Set of tdeftype =
  383. [recorddef,enumdef,
  384. {$IfNDef GDBKnowsStrings}
  385. stringdef,
  386. {$EndIf not GDBKnowsStrings}
  387. {$IfNDef GDBKnowsFiles}
  388. filedef,
  389. {$EndIf not GDBKnowsFiles}
  390. objectdef];
  391. {$endif GDB}
  392. const
  393. { relevant options for assigning a proc or a procvar to a procvar }
  394. po_compatibility_options = [
  395. po_classmethod,
  396. po_staticmethod,
  397. po_methodpointer,
  398. po_containsself,
  399. po_interrupt,
  400. po_iocheck,
  401. po_varargs,
  402. po_exports
  403. ];
  404. const
  405. SymTypeName : array[tsymtyp] of string[12] =
  406. ('abstractsym','variable','type','proc','unit',
  407. 'const','enum','typed const','errorsym','system sym',
  408. 'label','absolute','property','funcret',
  409. 'macrosym','rttisym');
  410. implementation
  411. end.
  412. {
  413. $Log$
  414. Revision 1.23 2001-08-30 20:13:54 peter
  415. * rtti/init table updates
  416. * rttisym for reusable global rtti/init info
  417. * support published for interfaces
  418. Revision 1.22 2001/08/19 21:11:21 florian
  419. * some bugs fix:
  420. - overload; with external procedures fixed
  421. - better selection of routine to do an overloaded
  422. type case
  423. - ... some more
  424. Revision 1.21 2001/08/01 15:07:29 jonas
  425. + "compilerproc" directive support, which turns both the public and mangled
  426. name to lowercase(declaration_name). This prevents a normal user from
  427. accessing the routine, but they can still be easily looked up within
  428. the compiler. This is used for helper procedures and should facilitate
  429. the writing of more processor independent code in the code generator
  430. itself (mostly written by Peter)
  431. + new "createintern" constructor for tcal nodes to create a call to
  432. helper exported using the "compilerproc" directive
  433. + support for high(dynamic_array) using the the above new things
  434. + definition of 'HASCOMPILERPROC' symbol (to be able to check in the
  435. compiler and rtl whether the "compilerproc" directive is supported)
  436. Revision 1.20 2001/06/04 18:14:54 peter
  437. * varargs added for proc to procvar comparison
  438. Revision 1.19 2001/06/04 11:53:13 peter
  439. + varargs directive
  440. Revision 1.18 2001/06/03 21:57:38 peter
  441. + hint directive parsing support
  442. Revision 1.17 2001/05/08 21:06:31 florian
  443. * some more support for widechars commited especially
  444. regarding type casting and constants
  445. Revision 1.16 2001/04/13 01:22:15 peter
  446. * symtable change to classes
  447. * range check generation and errors fixed, make cycle DEBUG=1 works
  448. * memory leaks fixed
  449. Revision 1.15 2001/04/02 21:20:34 peter
  450. * resulttype rewrite
  451. Revision 1.14 2001/03/22 00:10:58 florian
  452. + basic variant type support in the compiler
  453. Revision 1.13 2001/02/26 19:44:55 peter
  454. * merged generic m68k updates from fixes branch
  455. Revision 1.12 2000/11/04 14:25:21 florian
  456. + merged Attila's changes for interfaces, not tested yet
  457. Revision 1.11 2000/10/31 22:02:51 peter
  458. * symtable splitted, no real code changes
  459. Revision 1.9 2000/10/15 07:47:52 peter
  460. * unit names and procedure names are stored mixed case
  461. Revision 1.8 2000/10/14 10:14:52 peter
  462. * moehrendorf oct 2000 rewrite
  463. Revision 1.7 2000/09/24 15:06:28 peter
  464. * use defines.inc
  465. Revision 1.6 2000/08/21 11:27:44 pierre
  466. * fix the stabs problems
  467. Revision 1.5 2000/08/06 19:39:28 peter
  468. * default parameters working !
  469. Revision 1.4 2000/08/05 13:25:06 peter
  470. * packenum 1 fixes (merged)
  471. Revision 1.3 2000/07/13 12:08:27 michael
  472. + patched to 1.1.0 with former 1.09patch from peter
  473. Revision 1.2 2000/07/13 11:32:49 michael
  474. + removed logs
  475. }