symconst.pas 13 KB

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