tokens.pas 20 KB

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