tokens.pas 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565
  1. {
  2. $Id$
  3. Copyright (c) 1998-2000 by Florian Klaempfl, Pierre Muller
  4. Tokens used by the compiler
  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 tokens;
  19. {$i defines.inc}
  20. interface
  21. uses
  22. globtype;
  23. type
  24. ttoken=(NOTOKEN,
  25. { operators, which can also be overloaded }
  26. _PLUS,
  27. _MINUS,
  28. _STAR,
  29. _SLASH,
  30. _EQUAL,
  31. _GT,
  32. _LT,
  33. _GTE,
  34. _LTE,
  35. _SYMDIF,
  36. _STARSTAR,
  37. _OP_AS,
  38. _OP_IN,
  39. _OP_IS,
  40. _OP_OR,
  41. _OP_AND,
  42. _OP_DIV,
  43. _OP_MOD,
  44. _OP_NOT,
  45. _OP_SHL,
  46. _OP_SHR,
  47. _OP_XOR,
  48. _ASSIGNMENT,
  49. { special chars }
  50. _CARET,
  51. _UNEQUAL,
  52. _LECKKLAMMER,
  53. _RECKKLAMMER,
  54. _POINT,
  55. _COMMA,
  56. _LKLAMMER,
  57. _RKLAMMER,
  58. _COLON,
  59. _SEMICOLON,
  60. _KLAMMERAFFE,
  61. _POINTPOINT,
  62. _DOUBLEADDR,
  63. _EOF,
  64. _ID,
  65. _NOID,
  66. _REALNUMBER,
  67. _INTCONST,
  68. _CSTRING,
  69. _CCHAR,
  70. _CWSTRING,
  71. _CWCHAR,
  72. { C like operators }
  73. _PLUSASN,
  74. _MINUSASN,
  75. _ANDASN,
  76. _ORASN,
  77. _STARASN,
  78. _SLASHASN,
  79. _MODASN,
  80. _DIVASN,
  81. _NOTASN,
  82. _XORASN,
  83. { Normal words }
  84. _AS,
  85. _AT,
  86. _DO,
  87. _IF,
  88. _IN,
  89. _IS,
  90. _OF,
  91. _ON,
  92. _OR,
  93. _TO,
  94. _AND,
  95. _ASM,
  96. _DIV,
  97. _END,
  98. _FAR,
  99. _FOR,
  100. _MOD,
  101. _NIL,
  102. _NOT,
  103. _OUT,
  104. _SET,
  105. _SHL,
  106. _SHR,
  107. _TRY,
  108. _VAR,
  109. _XOR,
  110. _CASE,
  111. _CVAR,
  112. _ELSE,
  113. _EXIT,
  114. _FAIL,
  115. _FILE,
  116. _GOTO,
  117. _NAME,
  118. _NEAR,
  119. _READ,
  120. _SELF,
  121. _THEN,
  122. _TRUE,
  123. _TYPE,
  124. _UNIT,
  125. _USES,
  126. _WITH,
  127. _ALIAS,
  128. _ARRAY,
  129. _BEGIN,
  130. _BREAK,
  131. _CDECL,
  132. _CLASS,
  133. _CONST,
  134. _FALSE,
  135. _FAR16,
  136. _INDEX,
  137. _LABEL,
  138. _RAISE,
  139. _UNTIL,
  140. _WHILE,
  141. _WRITE,
  142. _DISPID,
  143. _DOWNTO,
  144. _EXCEPT,
  145. _EXPORT,
  146. _INLINE,
  147. _OBJECT,
  148. _PACKED,
  149. _PASCAL,
  150. _PUBLIC,
  151. _RECORD,
  152. _REPEAT,
  153. _RESULT,
  154. _STATIC,
  155. _STORED,
  156. _STRING,
  157. _SYSTEM,
  158. _ASMNAME,
  159. _CPPDECL,
  160. _DEFAULT,
  161. _DYNAMIC,
  162. _EXPORTS,
  163. _FINALLY,
  164. _FORWARD,
  165. _FPCCALL,
  166. _IOCHECK,
  167. _LIBRARY,
  168. _MESSAGE,
  169. _PRIVATE,
  170. _PROGRAM,
  171. _STDCALL,
  172. _SYSCALL,
  173. _VARARGS,
  174. _VIRTUAL,
  175. _ABSOLUTE,
  176. _ABSTRACT,
  177. _CONTINUE,
  178. _CPPCLASS,
  179. _EXTERNAL,
  180. _FUNCTION,
  181. _OPERATOR,
  182. _OVERLOAD,
  183. _OVERRIDE,
  184. _PLATFORM,
  185. _POPSTACK,
  186. _PROPERTY,
  187. _REGISTER,
  188. _RESIDENT,
  189. _SAFECALL,
  190. _ASSEMBLER,
  191. _INHERITED,
  192. _INTERFACE,
  193. _INTERRUPT,
  194. _NODEFAULT,
  195. _OTHERWISE,
  196. _PROCEDURE,
  197. _PROTECTED,
  198. _PUBLISHED,
  199. _THREADVAR,
  200. _DEPRECATED,
  201. _DESTRUCTOR,
  202. _IMPLEMENTS,
  203. _INTERNPROC,
  204. _OPENSTRING,
  205. _CONSTRUCTOR,
  206. _INTERNCONST,
  207. _REINTRODUCE,
  208. _SHORTSTRING,
  209. _COMPILERPROC,
  210. _FINALIZATION,
  211. _DISPINTERFACE,
  212. _SAVEREGISTERS,
  213. _IMPLEMENTATION,
  214. _INITIALIZATION,
  215. _RESOURCESTRING
  216. );
  217. const
  218. tokenlenmin = 2;
  219. tokenlenmax = 14;
  220. { last operator which can be overloaded, the first_overloaded should
  221. be declared directly after NOTOKEN }
  222. first_overloaded = succ(NOTOKEN);
  223. last_overloaded = _ASSIGNMENT;
  224. type
  225. tokenrec=record
  226. str : string[tokenlenmax];
  227. special : boolean;
  228. keyword : tmodeswitch;
  229. op : ttoken;
  230. end;
  231. ttokenarray=array[ttoken] of tokenrec;
  232. ptokenarray=^ttokenarray;
  233. tokenidxrec=record
  234. first,last : ttoken;
  235. end;
  236. ptokenidx=^ttokenidx;
  237. ttokenidx=array[tokenlenmin..tokenlenmax,'A'..'Z'] of tokenidxrec;
  238. const
  239. arraytokeninfo : ttokenarray =(
  240. (str:'' ;special:true ;keyword:m_none;op:NOTOKEN),
  241. { Operators which can be overloaded }
  242. (str:'+' ;special:true ;keyword:m_none;op:NOTOKEN),
  243. (str:'-' ;special:true ;keyword:m_none;op:NOTOKEN),
  244. (str:'*' ;special:true ;keyword:m_none;op:NOTOKEN),
  245. (str:'/' ;special:true ;keyword:m_none;op:NOTOKEN),
  246. (str:'=' ;special:true ;keyword:m_none;op:NOTOKEN),
  247. (str:'>' ;special:true ;keyword:m_none;op:NOTOKEN),
  248. (str:'<' ;special:true ;keyword:m_none;op:NOTOKEN),
  249. (str:'>=' ;special:true ;keyword:m_none;op:NOTOKEN),
  250. (str:'<=' ;special:true ;keyword:m_none;op:NOTOKEN),
  251. (str:'><' ;special:true ;keyword:m_none;op:NOTOKEN),
  252. (str:'**' ;special:true ;keyword:m_none;op:NOTOKEN),
  253. (str:'as' ;special:true ;keyword:m_none;op:NOTOKEN),
  254. (str:'in' ;special:true ;keyword:m_none;op:NOTOKEN),
  255. (str:'is' ;special:true ;keyword:m_none;op:NOTOKEN),
  256. (str:'or' ;special:true ;keyword:m_none;op:NOTOKEN),
  257. (str:'and' ;special:true ;keyword:m_none;op:NOTOKEN),
  258. (str:'div' ;special:true ;keyword:m_none;op:NOTOKEN),
  259. (str:'mod' ;special:true ;keyword:m_none;op:NOTOKEN),
  260. (str:'not' ;special:true ;keyword:m_none;op:NOTOKEN),
  261. (str:'shl' ;special:true ;keyword:m_none;op:NOTOKEN),
  262. (str:'shr' ;special:true ;keyword:m_none;op:NOTOKEN),
  263. (str:'xor' ;special:true ;keyword:m_none;op:NOTOKEN),
  264. (str:':=' ;special:true ;keyword:m_none;op:NOTOKEN),
  265. { Special chars }
  266. (str:'^' ;special:true ;keyword:m_none;op:NOTOKEN),
  267. (str:'<>' ;special:true ;keyword:m_none;op:NOTOKEN),
  268. (str:'[' ;special:true ;keyword:m_none;op:NOTOKEN),
  269. (str:']' ;special:true ;keyword:m_none;op:NOTOKEN),
  270. (str:'.' ;special:true ;keyword:m_none;op:NOTOKEN),
  271. (str:',' ;special:true ;keyword:m_none;op:NOTOKEN),
  272. (str:'(' ;special:true ;keyword:m_none;op:NOTOKEN),
  273. (str:')' ;special:true ;keyword:m_none;op:NOTOKEN),
  274. (str:':' ;special:true ;keyword:m_none;op:NOTOKEN),
  275. (str:';' ;special:true ;keyword:m_none;op:NOTOKEN),
  276. (str:'@' ;special:true ;keyword:m_none;op:NOTOKEN),
  277. (str:'..' ;special:true ;keyword:m_none;op:NOTOKEN),
  278. (str:'@@' ;special:true ;keyword:m_none;op:NOTOKEN),
  279. (str:'end of file' ;special:true ;keyword:m_none;op:NOTOKEN),
  280. (str:'identifier' ;special:true ;keyword:m_none;op:NOTOKEN),
  281. (str:'non identifier';special:true ;keyword:m_none;op:NOTOKEN),
  282. (str:'const real' ;special:true ;keyword:m_none;op:NOTOKEN),
  283. (str:'ordinal const' ;special:true ;keyword:m_none;op:NOTOKEN),
  284. (str:'const string' ;special:true ;keyword:m_none;op:NOTOKEN),
  285. (str:'const char' ;special:true ;keyword:m_none;op:NOTOKEN),
  286. (str:'const wstring' ;special:true ;keyword:m_none;op:NOTOKEN),
  287. (str:'const wchar' ;special:true ;keyword:m_none;op:NOTOKEN),
  288. { C like operators }
  289. (str:'+=' ;special:true ;keyword:m_none;op:NOTOKEN),
  290. (str:'-=' ;special:true ;keyword:m_none;op:NOTOKEN),
  291. (str:'&=' ;special:true ;keyword:m_none;op:NOTOKEN),
  292. (str:'|=' ;special:true ;keyword:m_none;op:NOTOKEN),
  293. (str:'*=' ;special:true ;keyword:m_none;op:NOTOKEN),
  294. (str:'/=' ;special:true ;keyword:m_none;op:NOTOKEN),
  295. (str:'' ;special:true ;keyword:m_none;op:NOTOKEN),
  296. (str:'' ;special:true ;keyword:m_none;op:NOTOKEN),
  297. (str:'' ;special:true ;keyword:m_none;op:NOTOKEN),
  298. (str:'' ;special:true ;keyword:m_none;op:NOTOKEN),
  299. { Normal words }
  300. (str:'AS' ;special:false;keyword:m_class;op:_OP_AS),
  301. (str:'AT' ;special:false;keyword:m_none;op:NOTOKEN),
  302. (str:'DO' ;special:false;keyword:m_all;op:NOTOKEN),
  303. (str:'IF' ;special:false;keyword:m_all;op:NOTOKEN),
  304. (str:'IN' ;special:false;keyword:m_all;op:_OP_IN),
  305. (str:'IS' ;special:false;keyword:m_class;op:_OP_IS),
  306. (str:'OF' ;special:false;keyword:m_all;op:NOTOKEN),
  307. (str:'ON' ;special:false;keyword:m_none;op:NOTOKEN),
  308. (str:'OR' ;special:false;keyword:m_all;op:_OP_OR),
  309. (str:'TO' ;special:false;keyword:m_all;op:NOTOKEN),
  310. (str:'AND' ;special:false;keyword:m_all;op:_OP_AND),
  311. (str:'ASM' ;special:false;keyword:m_all;op:NOTOKEN),
  312. (str:'DIV' ;special:false;keyword:m_all;op:_OP_DIV),
  313. (str:'END' ;special:false;keyword:m_all;op:NOTOKEN),
  314. (str:'FAR' ;special:false;keyword:m_none;op:NOTOKEN),
  315. (str:'FOR' ;special:false;keyword:m_all;op:NOTOKEN),
  316. (str:'MOD' ;special:false;keyword:m_all;op:_OP_MOD),
  317. (str:'NIL' ;special:false;keyword:m_all;op:NOTOKEN),
  318. (str:'NOT' ;special:false;keyword:m_all;op:_OP_NOT),
  319. (str:'OUT' ;special:false;keyword:m_none;op:NOTOKEN),
  320. (str:'SET' ;special:false;keyword:m_all;op:NOTOKEN),
  321. (str:'SHL' ;special:false;keyword:m_all;op:_OP_SHL),
  322. (str:'SHR' ;special:false;keyword:m_all;op:_OP_SHR),
  323. (str:'TRY' ;special:false;keyword:m_class;op:NOTOKEN),
  324. (str:'VAR' ;special:false;keyword:m_all;op:NOTOKEN),
  325. (str:'XOR' ;special:false;keyword:m_all;op:_OP_XOR),
  326. (str:'CASE' ;special:false;keyword:m_all;op:NOTOKEN),
  327. (str:'CVAR' ;special:false;keyword:m_none;op:NOTOKEN),
  328. (str:'ELSE' ;special:false;keyword:m_all;op:NOTOKEN),
  329. (str:'EXIT' ;special:false;keyword:m_all;op:NOTOKEN),
  330. (str:'FAIL' ;special:false;keyword:m_none;op:NOTOKEN), { only set within constructors PM }
  331. (str:'FILE' ;special:false;keyword:m_all;op:NOTOKEN),
  332. (str:'GOTO' ;special:false;keyword:m_all;op:NOTOKEN),
  333. (str:'NAME' ;special:false;keyword:m_none;op:NOTOKEN),
  334. (str:'NEAR' ;special:false;keyword:m_none;op:NOTOKEN),
  335. (str:'READ' ;special:false;keyword:m_none;op:NOTOKEN),
  336. (str:'SELF' ;special:false;keyword:m_none;op:NOTOKEN), {set inside methods only PM }
  337. (str:'THEN' ;special:false;keyword:m_all;op:NOTOKEN),
  338. (str:'TRUE' ;special:false;keyword:m_all;op:NOTOKEN),
  339. (str:'TYPE' ;special:false;keyword:m_all;op:NOTOKEN),
  340. (str:'UNIT' ;special:false;keyword:m_all;op:NOTOKEN),
  341. (str:'USES' ;special:false;keyword:m_all;op:NOTOKEN),
  342. (str:'WITH' ;special:false;keyword:m_all;op:NOTOKEN),
  343. (str:'ALIAS' ;special:false;keyword:m_none;op:NOTOKEN),
  344. (str:'ARRAY' ;special:false;keyword:m_all;op:NOTOKEN),
  345. (str:'BEGIN' ;special:false;keyword:m_all;op:NOTOKEN),
  346. (str:'BREAK' ;special:false;keyword:m_none;op:NOTOKEN),
  347. (str:'CDECL' ;special:false;keyword:m_none;op:NOTOKEN),
  348. (str:'CLASS' ;special:false;keyword:m_class;op:NOTOKEN),
  349. (str:'CONST' ;special:false;keyword:m_all;op:NOTOKEN),
  350. (str:'FALSE' ;special:false;keyword:m_all;op:NOTOKEN),
  351. (str:'FAR16' ;special:false;keyword:m_none;op:NOTOKEN),
  352. (str:'INDEX' ;special:false;keyword:m_none;op:NOTOKEN),
  353. (str:'LABEL' ;special:false;keyword:m_all;op:NOTOKEN),
  354. (str:'RAISE' ;special:false;keyword:m_class;op:NOTOKEN),
  355. (str:'UNTIL' ;special:false;keyword:m_all;op:NOTOKEN),
  356. (str:'WHILE' ;special:false;keyword:m_all;op:NOTOKEN),
  357. (str:'WRITE' ;special:false;keyword:m_none;op:NOTOKEN),
  358. (str:'DISPID' ;special:false;keyword:m_none;op:NOTOKEN),
  359. (str:'DOWNTO' ;special:false;keyword:m_all;op:NOTOKEN),
  360. (str:'EXCEPT' ;special:false;keyword:m_class;op:NOTOKEN),
  361. (str:'EXPORT' ;special:false;keyword:m_none;op:NOTOKEN),
  362. (str:'INLINE' ;special:false;keyword:m_none;op:NOTOKEN),
  363. (str:'OBJECT' ;special:false;keyword:m_all;op:NOTOKEN),
  364. (str:'PACKED' ;special:false;keyword:m_all;op:NOTOKEN),
  365. (str:'PASCAL' ;special:false;keyword:m_none;op:NOTOKEN),
  366. (str:'PUBLIC' ;special:false;keyword:m_none;op:NOTOKEN),
  367. (str:'RECORD' ;special:false;keyword:m_all;op:NOTOKEN),
  368. (str:'REPEAT' ;special:false;keyword:m_all;op:NOTOKEN),
  369. (str:'RESULT' ;special:false;keyword:m_none;op:NOTOKEN),
  370. (str:'STATIC' ;special:false;keyword:m_none;op:NOTOKEN),
  371. (str:'STORED' ;special:false;keyword:m_none;op:NOTOKEN),
  372. (str:'STRING' ;special:false;keyword:m_all;op:NOTOKEN),
  373. (str:'SYSTEM' ;special:false;keyword:m_none;op:NOTOKEN),
  374. (str:'ASMNAME' ;special:false;keyword:m_none;op:NOTOKEN),
  375. (str:'CPPDECL' ;special:false;keyword:m_none;op:NOTOKEN),
  376. (str:'DEFAULT' ;special:false;keyword:m_none;op:NOTOKEN),
  377. (str:'DYNAMIC' ;special:false;keyword:m_none;op:NOTOKEN),
  378. (str:'EXPORTS' ;special:false;keyword:m_all;op:NOTOKEN),
  379. (str:'FINALLY' ;special:false;keyword:m_class;op:NOTOKEN),
  380. (str:'FORWARD' ;special:false;keyword:m_none;op:NOTOKEN),
  381. (str:'FPCCALL' ;special:false;keyword:m_none;op:NOTOKEN),
  382. (str:'IOCHECK' ;special:false;keyword:m_none;op:NOTOKEN),
  383. (str:'LIBRARY' ;special:false;keyword:m_all;op:NOTOKEN),
  384. (str:'MESSAGE' ;special:false;keyword:m_none;op:NOTOKEN),
  385. (str:'PRIVATE' ;special:false;keyword:m_none;op:NOTOKEN),
  386. (str:'PROGRAM' ;special:false;keyword:m_all;op:NOTOKEN),
  387. (str:'STDCALL' ;special:false;keyword:m_none;op:NOTOKEN),
  388. (str:'SYSCALL' ;special:false;keyword:m_none;op:NOTOKEN),
  389. (str:'VARARGS' ;special:false;keyword:m_none;op:NOTOKEN),
  390. (str:'VIRTUAL' ;special:false;keyword:m_none;op:NOTOKEN),
  391. (str:'ABSOLUTE' ;special:false;keyword:m_none;op:NOTOKEN),
  392. (str:'ABSTRACT' ;special:false;keyword:m_none;op:NOTOKEN),
  393. (str:'CONTINUE' ;special:false;keyword:m_none;op:NOTOKEN),
  394. (str:'CPPCLASS' ;special:false;keyword:m_fpc;op:NOTOKEN),
  395. (str:'EXTERNAL' ;special:false;keyword:m_none;op:NOTOKEN),
  396. (str:'FUNCTION' ;special:false;keyword:m_all;op:NOTOKEN),
  397. (str:'OPERATOR' ;special:false;keyword:m_fpc;op:NOTOKEN),
  398. (str:'OVERLOAD' ;special:false;keyword:m_none;op:NOTOKEN),
  399. (str:'OVERRIDE' ;special:false;keyword:m_none;op:NOTOKEN),
  400. (str:'PLATFORM' ;special:false;keyword:m_none;op:NOTOKEN),
  401. (str:'POPSTACK' ;special:false;keyword:m_none;op:NOTOKEN),
  402. (str:'PROPERTY' ;special:false;keyword:m_class;op:NOTOKEN),
  403. (str:'REGISTER' ;special:false;keyword:m_none;op:NOTOKEN),
  404. (str:'RESIDENT' ;special:false;keyword:m_none;op:NOTOKEN),
  405. (str:'SAFECALL' ;special:false;keyword:m_none;op:NOTOKEN),
  406. (str:'ASSEMBLER' ;special:false;keyword:m_none;op:NOTOKEN),
  407. (str:'INHERITED' ;special:false;keyword:m_all;op:NOTOKEN),
  408. (str:'INTERFACE' ;special:false;keyword:m_all;op:NOTOKEN),
  409. (str:'INTERRUPT' ;special:false;keyword:m_none;op:NOTOKEN),
  410. (str:'NODEFAULT' ;special:false;keyword:m_none;op:NOTOKEN),
  411. (str:'OTHERWISE' ;special:false;keyword:m_all;op:NOTOKEN),
  412. (str:'PROCEDURE' ;special:false;keyword:m_all;op:NOTOKEN),
  413. (str:'PROTECTED' ;special:false;keyword:m_none;op:NOTOKEN),
  414. (str:'PUBLISHED' ;special:false;keyword:m_none;op:NOTOKEN),
  415. (str:'THREADVAR' ;special:false;keyword:m_class;op:NOTOKEN),
  416. (str:'DEPRECATED' ;special:false;keyword:m_all;op:NOTOKEN),
  417. (str:'DESTRUCTOR' ;special:false;keyword:m_all;op:NOTOKEN),
  418. (str:'IMPLEMENTS' ;special:false;keyword:m_none;op:NOTOKEN),
  419. (str:'INTERNPROC' ;special:false;keyword:m_none;op:NOTOKEN),
  420. (str:'OPENSTRING' ;special:false;keyword:m_none;op:NOTOKEN),
  421. (str:'CONSTRUCTOR' ;special:false;keyword:m_all;op:NOTOKEN),
  422. (str:'INTERNCONST' ;special:false;keyword:m_none;op:NOTOKEN),
  423. (str:'REINTRODUCE' ;special:false;keyword:m_none;op:NOTOKEN),
  424. (str:'SHORTSTRING' ;special:false;keyword:m_none;op:NOTOKEN),
  425. (str:'COMPILERPROC' ;special:false;keyword:m_none;op:NOTOKEN),
  426. (str:'FINALIZATION' ;special:false;keyword:m_initfinal;op:NOTOKEN),
  427. (str:'DISPINTERFACE' ;special:false;keyword:m_class;op:NOTOKEN),
  428. (str:'SAVEREGISTERS' ;special:false;keyword:m_none;op:NOTOKEN),
  429. (str:'IMPLEMENTATION';special:false;keyword:m_all;op:NOTOKEN),
  430. (str:'INITIALIZATION';special:false;keyword:m_initfinal;op:NOTOKEN),
  431. (str:'RESOURCESTRING';special:false;keyword:m_class;op:NOTOKEN)
  432. );
  433. var
  434. tokeninfo:ptokenarray;
  435. tokenidx:ptokenidx;
  436. procedure inittokens;
  437. procedure donetokens;
  438. procedure create_tokenidx;
  439. implementation
  440. procedure create_tokenidx;
  441. { create an index with the first and last token for every possible token
  442. length, so a search only will be done in that small part }
  443. var
  444. t : ttoken;
  445. i : longint;
  446. c : char;
  447. begin
  448. fillchar(tokenidx^,sizeof(tokenidx^),0);
  449. for t:=low(ttoken) to high(ttoken) do
  450. begin
  451. if not arraytokeninfo[t].special then
  452. begin
  453. i:=length(arraytokeninfo[t].str);
  454. c:=arraytokeninfo[t].str[1];
  455. if ord(tokenidx^[i,c].first)=0 then
  456. tokenidx^[i,c].first:=t;
  457. tokenidx^[i,c].last:=t;
  458. end;
  459. end;
  460. end;
  461. procedure inittokens;
  462. begin
  463. tokeninfo:=@arraytokeninfo;
  464. new(tokenidx);
  465. create_tokenidx;
  466. end;
  467. procedure donetokens;
  468. begin
  469. tokeninfo:=nil;
  470. dispose(tokenidx);
  471. end;
  472. end.
  473. {
  474. $Log$
  475. Revision 1.15 2001-10-24 11:51:39 marco
  476. * Make new/dispose system functions instead of keywords
  477. Revision 1.14 2001/10/23 21:49:43 peter
  478. * $calling directive and -Cc commandline patch added
  479. from Pavel Ozerski
  480. Revision 1.13 2001/08/01 15:07:29 jonas
  481. + "compilerproc" directive support, which turns both the public and mangled
  482. name to lowercase(declaration_name). This prevents a normal user from
  483. accessing the routine, but they can still be easily looked up within
  484. the compiler. This is used for helper procedures and should facilitate
  485. the writing of more processor independent code in the code generator
  486. itself (mostly written by Peter)
  487. + new "createintern" constructor for tcal nodes to create a call to
  488. helper exported using the "compilerproc" directive
  489. + support for high(dynamic_array) using the the above new things
  490. + definition of 'HASCOMPILERPROC' symbol (to be able to check in the
  491. compiler and rtl whether the "compilerproc" directive is supported)
  492. Revision 1.12 2001/07/30 20:59:28 peter
  493. * m68k updates from v10 merged
  494. Revision 1.11 2001/06/03 21:57:38 peter
  495. + hint directive parsing support
  496. Revision 1.10 2001/05/06 17:12:43 jonas
  497. - commented out an unused field in tokenrec
  498. Revision 1.9 2001/05/04 15:52:04 florian
  499. * some Delphi incompatibilities fixed:
  500. - out, dispose and new can be used as idenfiers now
  501. - const p = apointerype(nil); is supported now
  502. + support for const p = apointertype(pointer(1234)); added
  503. Revision 1.8 2001/03/22 22:35:43 florian
  504. + support for type a = (a=1); in Delphi mode added
  505. + procedure p(); in Delphi mode supported
  506. + on isn't keyword anymore, it can be used as
  507. id etc. now
  508. Revision 1.7 2000/11/29 00:30:42 florian
  509. * unused units removed from uses clause
  510. * some changes for widestrings
  511. Revision 1.6 2000/11/09 17:46:56 florian
  512. * System.TypeInfo fixed
  513. + System.Finalize implemented
  514. + some new keywords for interface support added
  515. Revision 1.5 2000/10/14 10:14:56 peter
  516. * moehrendorf oct 2000 rewrite
  517. Revision 1.4 2000/09/24 15:06:32 peter
  518. * use defines.inc
  519. Revision 1.3 2000/07/13 12:08:28 michael
  520. + patched to 1.1.0 with former 1.09patch from peter
  521. Revision 1.2 2000/07/13 11:32:52 michael
  522. + removed logs
  523. }