tokens.pas 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571
  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 fpcdefs.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.17 2002-05-16 19:46:46 carl
  476. + defines.inc -> fpcdefs.inc to avoid conflicts if compiling by hand
  477. + try to fix temp allocation (still in ifdef)
  478. + generic constructor calls
  479. + start of tassembler / tmodulebase class cleanup
  480. Revision 1.15 2001/10/24 11:51:39 marco
  481. * Make new/dispose system functions instead of keywords
  482. Revision 1.14 2001/10/23 21:49:43 peter
  483. * $calling directive and -Cc commandline patch added
  484. from Pavel Ozerski
  485. Revision 1.13 2001/08/01 15:07:29 jonas
  486. + "compilerproc" directive support, which turns both the public and mangled
  487. name to lowercase(declaration_name). This prevents a normal user from
  488. accessing the routine, but they can still be easily looked up within
  489. the compiler. This is used for helper procedures and should facilitate
  490. the writing of more processor independent code in the code generator
  491. itself (mostly written by Peter)
  492. + new "createintern" constructor for tcal nodes to create a call to
  493. helper exported using the "compilerproc" directive
  494. + support for high(dynamic_array) using the the above new things
  495. + definition of 'HASCOMPILERPROC' symbol (to be able to check in the
  496. compiler and rtl whether the "compilerproc" directive is supported)
  497. Revision 1.12 2001/07/30 20:59:28 peter
  498. * m68k updates from v10 merged
  499. Revision 1.11 2001/06/03 21:57:38 peter
  500. + hint directive parsing support
  501. Revision 1.10 2001/05/06 17:12:43 jonas
  502. - commented out an unused field in tokenrec
  503. Revision 1.9 2001/05/04 15:52:04 florian
  504. * some Delphi incompatibilities fixed:
  505. - out, dispose and new can be used as idenfiers now
  506. - const p = apointerype(nil); is supported now
  507. + support for const p = apointertype(pointer(1234)); added
  508. Revision 1.8 2001/03/22 22:35:43 florian
  509. + support for type a = (a=1); in Delphi mode added
  510. + procedure p(); in Delphi mode supported
  511. + on isn't keyword anymore, it can be used as
  512. id etc. now
  513. Revision 1.7 2000/11/29 00:30:42 florian
  514. * unused units removed from uses clause
  515. * some changes for widestrings
  516. Revision 1.6 2000/11/09 17:46:56 florian
  517. * System.TypeInfo fixed
  518. + System.Finalize implemented
  519. + some new keywords for interface support added
  520. Revision 1.5 2000/10/14 10:14:56 peter
  521. * moehrendorf oct 2000 rewrite
  522. Revision 1.4 2000/09/24 15:06:32 peter
  523. * use defines.inc
  524. Revision 1.3 2000/07/13 12:08:28 michael
  525. + patched to 1.1.0 with former 1.09patch from peter
  526. Revision 1.2 2000/07/13 11:32:52 michael
  527. + removed logs
  528. }