66 |
66 |
67 FREE_PASCAL_KEYWORDS = ( |
67 FREE_PASCAL_KEYWORDS = ( |
68 'dispose', 'exit', 'false', 'new', 'true' |
68 'dispose', 'exit', 'false', 'new', 'true' |
69 ) |
69 ) |
70 |
70 |
71 BLOCK_KEYWORDS = set(( |
71 BLOCK_KEYWORDS = { |
72 'begin', 'class', 'const', 'constructor', 'destructor', 'end', |
72 'begin', 'class', 'const', 'constructor', 'destructor', 'end', |
73 'finalization', 'function', 'implementation', 'initialization', |
73 'finalization', 'function', 'implementation', 'initialization', |
74 'label', 'library', 'operator', 'procedure', 'program', 'property', |
74 'label', 'library', 'operator', 'procedure', 'program', 'property', |
75 'record', 'threadvar', 'type', 'unit', 'uses', 'var' |
75 'record', 'threadvar', 'type', 'unit', 'uses', 'var' |
76 )) |
76 } |
77 |
77 |
78 FUNCTION_MODIFIERS = set(( |
78 FUNCTION_MODIFIERS = { |
79 'alias', 'cdecl', 'export', 'inline', 'interrupt', 'nostackframe', |
79 'alias', 'cdecl', 'export', 'inline', 'interrupt', 'nostackframe', |
80 'pascal', 'register', 'safecall', 'softfloat', 'stdcall', |
80 'pascal', 'register', 'safecall', 'softfloat', 'stdcall', |
81 'varargs', 'name', 'dynamic', 'near', 'virtual', 'external', |
81 'varargs', 'name', 'dynamic', 'near', 'virtual', 'external', |
82 'override', 'assembler' |
82 'override', 'assembler' |
83 )) |
83 } |
84 |
84 |
85 # XXX: those aren't global. but currently we know no way for defining |
85 # XXX: those aren't global. but currently we know no way for defining |
86 # them just for the type context. |
86 # them just for the type context. |
87 DIRECTIVES = set(( |
87 DIRECTIVES = { |
88 'absolute', 'abstract', 'assembler', 'cppdecl', 'default', 'far', |
88 'absolute', 'abstract', 'assembler', 'cppdecl', 'default', 'far', |
89 'far16', 'forward', 'index', 'oldfpccall', 'private', 'protected', |
89 'far16', 'forward', 'index', 'oldfpccall', 'private', 'protected', |
90 'published', 'public' |
90 'published', 'public' |
91 )) |
91 } |
92 |
92 |
93 BUILTIN_TYPES = set(( |
93 BUILTIN_TYPES = { |
94 'ansichar', 'ansistring', 'bool', 'boolean', 'byte', 'bytebool', |
94 'ansichar', 'ansistring', 'bool', 'boolean', 'byte', 'bytebool', |
95 'cardinal', 'char', 'comp', 'currency', 'double', 'dword', |
95 'cardinal', 'char', 'comp', 'currency', 'double', 'dword', |
96 'extended', 'int64', 'integer', 'iunknown', 'longbool', 'longint', |
96 'extended', 'int64', 'integer', 'iunknown', 'longbool', 'longint', |
97 'longword', 'pansichar', 'pansistring', 'pbool', 'pboolean', |
97 'longword', 'pansichar', 'pansistring', 'pbool', 'pboolean', |
98 'pbyte', 'pbytearray', 'pcardinal', 'pchar', 'pcomp', 'pcurrency', |
98 'pbyte', 'pbytearray', 'pcardinal', 'pchar', 'pcomp', 'pcurrency', |
102 'pstring', 'pvariant', 'pwidechar', 'pwidestring', 'pword', |
102 'pstring', 'pvariant', 'pwidechar', 'pwidestring', 'pword', |
103 'pwordarray', 'pwordbool', 'real', 'real48', 'shortint', |
103 'pwordarray', 'pwordbool', 'real', 'real48', 'shortint', |
104 'shortstring', 'single', 'smallint', 'string', 'tclass', 'tdate', |
104 'shortstring', 'single', 'smallint', 'string', 'tclass', 'tdate', |
105 'tdatetime', 'textfile', 'thandle', 'tobject', 'ttime', 'variant', |
105 'tdatetime', 'textfile', 'thandle', 'tobject', 'ttime', 'variant', |
106 'widechar', 'widestring', 'word', 'wordbool' |
106 'widechar', 'widestring', 'word', 'wordbool' |
107 )) |
107 } |
108 |
108 |
109 BUILTIN_UNITS = { |
109 BUILTIN_UNITS = { |
110 'System': ( |
110 'System': ( |
111 'abs', 'acquireexceptionobject', 'addr', 'ansitoutf8', |
111 'abs', 'acquireexceptionobject', 'addr', 'ansitoutf8', |
112 'append', 'arctan', 'assert', 'assigned', 'assignfile', |
112 'append', 'arctan', 'assert', 'assigned', 'assignfile', |
244 'sum', 'sumint', 'sumofsquares', 'sumsandsquares', 'syddepreciation', |
244 'sum', 'sumint', 'sumofsquares', 'sumsandsquares', 'syddepreciation', |
245 'tan', 'tanh', 'totalvariance', 'variance' |
245 'tan', 'tanh', 'totalvariance', 'variance' |
246 ) |
246 ) |
247 } |
247 } |
248 |
248 |
249 ASM_REGISTERS = set(( |
249 ASM_REGISTERS = { |
250 'ah', 'al', 'ax', 'bh', 'bl', 'bp', 'bx', 'ch', 'cl', 'cr0', |
250 'ah', 'al', 'ax', 'bh', 'bl', 'bp', 'bx', 'ch', 'cl', 'cr0', |
251 'cr1', 'cr2', 'cr3', 'cr4', 'cs', 'cx', 'dh', 'di', 'dl', 'dr0', |
251 'cr1', 'cr2', 'cr3', 'cr4', 'cs', 'cx', 'dh', 'di', 'dl', 'dr0', |
252 'dr1', 'dr2', 'dr3', 'dr4', 'dr5', 'dr6', 'dr7', 'ds', 'dx', |
252 'dr1', 'dr2', 'dr3', 'dr4', 'dr5', 'dr6', 'dr7', 'ds', 'dx', |
253 'eax', 'ebp', 'ebx', 'ecx', 'edi', 'edx', 'es', 'esi', 'esp', |
253 'eax', 'ebp', 'ebx', 'ecx', 'edi', 'edx', 'es', 'esi', 'esp', |
254 'fs', 'gs', 'mm0', 'mm1', 'mm2', 'mm3', 'mm4', 'mm5', 'mm6', |
254 'fs', 'gs', 'mm0', 'mm1', 'mm2', 'mm3', 'mm4', 'mm5', 'mm6', |
255 'mm7', 'si', 'sp', 'ss', 'st0', 'st1', 'st2', 'st3', 'st4', 'st5', |
255 'mm7', 'si', 'sp', 'ss', 'st0', 'st1', 'st2', 'st3', 'st4', 'st5', |
256 'st6', 'st7', 'xmm0', 'xmm1', 'xmm2', 'xmm3', 'xmm4', 'xmm5', |
256 'st6', 'st7', 'xmm0', 'xmm1', 'xmm2', 'xmm3', 'xmm4', 'xmm5', |
257 'xmm6', 'xmm7' |
257 'xmm6', 'xmm7' |
258 )) |
258 } |
259 |
259 |
260 ASM_INSTRUCTIONS = set(( |
260 ASM_INSTRUCTIONS = { |
261 'aaa', 'aad', 'aam', 'aas', 'adc', 'add', 'and', 'arpl', 'bound', |
261 'aaa', 'aad', 'aam', 'aas', 'adc', 'add', 'and', 'arpl', 'bound', |
262 'bsf', 'bsr', 'bswap', 'bt', 'btc', 'btr', 'bts', 'call', 'cbw', |
262 'bsf', 'bsr', 'bswap', 'bt', 'btc', 'btr', 'bts', 'call', 'cbw', |
263 'cdq', 'clc', 'cld', 'cli', 'clts', 'cmc', 'cmova', 'cmovae', |
263 'cdq', 'clc', 'cld', 'cli', 'clts', 'cmc', 'cmova', 'cmovae', |
264 'cmovb', 'cmovbe', 'cmovc', 'cmovcxz', 'cmove', 'cmovg', |
264 'cmovb', 'cmovbe', 'cmovc', 'cmovcxz', 'cmove', 'cmovg', |
265 'cmovge', 'cmovl', 'cmovle', 'cmovna', 'cmovnae', 'cmovnb', |
265 'cmovge', 'cmovl', 'cmovle', 'cmovna', 'cmovnae', 'cmovnb', |
294 'smsw', 'stc', 'std', 'sti', 'stosb', 'stosd', 'stosw', 'str', |
294 'smsw', 'stc', 'std', 'sti', 'stosb', 'stosd', 'stosw', 'str', |
295 'sub', 'svdc', 'svldt', 'svts', 'syscall', 'sysenter', 'sysexit', |
295 'sub', 'svdc', 'svldt', 'svts', 'syscall', 'sysenter', 'sysexit', |
296 'sysret', 'test', 'ud1', 'ud2', 'umov', 'verr', 'verw', 'wait', |
296 'sysret', 'test', 'ud1', 'ud2', 'umov', 'verr', 'verw', 'wait', |
297 'wbinvd', 'wrmsr', 'wrshr', 'xadd', 'xbts', 'xchg', 'xlat', |
297 'wbinvd', 'wrmsr', 'wrshr', 'xadd', 'xbts', 'xchg', 'xlat', |
298 'xlatb', 'xor' |
298 'xlatb', 'xor' |
299 )) |
299 } |
300 |
300 |
301 def __init__(self, **options): |
301 def __init__(self, **options): |
302 Lexer.__init__(self, **options) |
302 Lexer.__init__(self, **options) |
303 self.keywords = set() |
303 self.keywords = set() |
304 if get_bool_opt(options, 'turbopascal', True): |
304 if get_bool_opt(options, 'turbopascal', True): |