summaryrefslogtreecommitdiff
path: root/tests/examplefiles/modula2_test_cases.def
blob: ce86a55b840b14573454ff584dbf5bdf3c851b17 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
(* Test Cases for Modula-2 Lexer *)

(* Notes:
   (1) Without dialect option nor embedded dialect tag, the lexer operates in
       fallback mode, recognising the *combined* literals, punctuation symbols
       and operators of all supported dialects, and the *combined* reserved
       words and builtins of PIM Modula-2, ISO Modula-2 and Modula-2 R10.
   (1) If multiple embedded dialect tags are present, the lexer will use the
       first valid tag and ignore any subsequent dialect tags in the file.
   (2) An embedded dialect tag overrides any command line dialect option. *)


(* Testing command line dialect option *)

(* for PIM Modula-2 : pygmentize -O full,dialect=m2pim ...
   for ISO Modula-2 : pygmentize -O full,dialect=m2iso ...
   for Modula-2 R10 : pygmentize -O full,dialect=m2r10 ...
   for Objective Modula-2 : pygmentize -O full,dialect=objm2 ... *)

(* for Aglet extensions : pygmentize -O full,dialect=m2iso+aglet ...
   for GNU extensions : pygmentize -O full,dialect=m2pim+gm2 ...
   for p1 extensions : pygmentize -O full,dialect=m2iso+p1 ...
   for XDS extensions : pygmentize -O full,dialect=m2iso+xds ...


(* Testing embedded dialect tags *)

(* !m2pim*) (* <-- remove whitespace before ! for PIM Modula-2 *)
(* !m2iso*) (* <-- remove whitespace before ! for ISO Modula-2 *)
(* !m2r10*) (* <-- remove whitespace before ! for Modula-2 R10 *)
(* !objm2*) (* <-- remove whitespace before ! for Objective Modula-2 *)

(* !m2iso+aglet*) (* <-- remove whitespace before ! for Aglet extensions *)
(* !m2pim+gm2*)   (* <-- remove whitespace before ! for GNU extensions *)
(* !m2iso+p1*)    (* <-- remove whitespace before ! for p1 extensions *)
(* !m2iso+xds*)   (* <-- remove whitespace before ! for XDS extensions *)


(* Dialect Indicating Names *)

(* recognised names should be highlighted *)

QUALIFIED (* PIM and ISO *)

PACKEDSET (* ISO only *)

ARGLIST (* M2 R10 and ObjM2 *)

BYCOPY (* ObjM2 only *)

BITSET8 (* Aglet, GNU and M2 R10 *)

__FILE__ (* GNU only *)

BCD (* p1 and M2 R10 *)

SEQ (* XDS only *)


(* Literal Tests *)

(* recognised literals should be rendered as one unit
   unrecognised literals should be rendered as error *)

ch := 'a'; ch := "a"; (* all dialects *)
ch := 0u20; unich := 0u2038 (* M2 R10 *)

s := 'The cat said "meow!".';
s := "It is eight O'clock.";


n := 123; n = 1000000; (* all dialects *)
n := 123; n = 1'000'000; (* M2 R10 *)

n := 0b0110; n:= 0b0110'1100'0111; (* M2 R10 *)
n := 0xFF00; n:= 0xDEAD'BEEF'0F00; (* M2 R10 *)

r := 1.23; r := 1000000.000001; (* all dialects *)
r := 1.23; r := 1'000'000.000'001; (* M2 R10 *)

r := 1.234E6; r:= 1.234E-6; r := 1.234567E1000; (* PIM + ISO *)
r := 1.234e6; r:= 1.234e-6; r := 1.234'567e1'000; (* M2 R10 *)

ch := 0377C; n := 0377B; n := 07FF0H; (* ISO + PIM *)


(* Non-Alphabetic Operator Tests *)

(* supported operators should be rendered as one unit
   unsupported operators should be rendered as errors *)

a := b + c - d * e / f; (* all dialects *)

SetDiff := A \ B; (* M2 R10 *)

dotProduct := v1 *. v2; catArray := array1 +> array2; (* M2 R10 *)

bool := a = b; bool := a > b; bool := a < b;
bool := a # b; bool := a >= b; bool := a <= b;

bool := a <> b; (* PIM + ISO *)

bool := a == b; (* M2 R10 *)

(*&*) IF a & b THEN ... END; (* PIM + ISO *)

(*~*) IF ~ b THEN ... END; (* PIM + ISO *)

(*::*) int := real :: INTEGER; (* M2 R10 *)

(*++*) FOR i++ IN range DO ... END; (* M2 R10 *)
(*--*) FOR i-- IN range DO ... END; (* M2 R10 *)

(*^*) next := this^.next; (* all dialects *)
(*@*) next := this@.next; (* ISO *)

(*`*) str := `NSString alloc init; (* ObjM2 *)


(* Punctuation Tests *)

(* supported punctuation should be rendered as one unit
   unsupported punctuation should be rendered as an error *)

(*.*) Foo.Bar.Baz; (*..*) TYPE Sign = [-1..1] OF INTEGER;

(*|:*) CASE foo OF | 1 : bar | 2 : bam | 3 : boo END;
(*!:*) CASE foo OF 1 : bar ! 2 : bam ! 3 : boo END; (* ISO *)

(*[]()*) array[n] := foo();

(*{}*) CONST Bar = { 1, 2, 3 };

(*?*) TPROPERTIES = isCollection, isIndexed | isRigid?; (* M2 R10 *)

(*~*) CONST ~ isFoobar = Foo AND Bar; (* M2 R10 *)
(*->*) isFoobar -> PROCEDURE [ABS]; (* M2 R10 *)

(*<<>>*) GENLIB Foo FROM Template FOR Bar = <<ARRAY OF CHAR>> END; (* M2 R10 *)


(* Single Line Comment Test *)

(* should be rendered as comment if supported, as error if unsupported *)

// This is a single line comment (M2 R10 + ObjM2)


(* Pragma Delimiter Tests *)

(* PIM style pragma should be rendered as pragma in PIM dialects,
   as multiline comment in all other dialects. *)
   
(*$INLINE*) (* PIM *)

(* ISO style pragma should be rendered as error in PIM dialects,
   as pragma in all other dialects. *)

<*INLINE*>  (* all other dialects *)


(* Operator Substitution Test When in Algol mode *)

IF foo # bar THEN ... END; (* # should be rendered as not equal symbol *)

IF foo >= bar THEN ... END; (* >= should be rendered as not less symbol *)

IF foo <= bar THEN ... END; (* <= should be rendered as not greater symbol *)

IF foo == bar THEN ... END; (* == should be rendered as identity symbol *)

dotProduct := v1 *. v2; (* *. should be rendered as dot product symbol *)


(* Reserved Words and Builtins Test *)

(* supported reserved words and builtins should be highlighted *)

(* reserved words common to all dialects *)

AND ARRAY BEGIN BY CASE CONST DEFINITION DIV DO ELSE ELSIF END EXIT FOR FROM
IF IMPLEMENTATION IMPORT IN LOOP MOD MODULE NOT OF OR POINTER PROCEDURE
RECORD REPEAT RETURN SET THEN TO TYPE UNTIL VAR WHILE

(* builtins common to all dialects *)

ABS BOOLEAN CARDINAL CHAR CHR FALSE INTEGER LONGINT LONGREAL
MAX MIN NIL ODD ORD REAL TRUE

(* pseudo builtins common to all dialects *)

ADDRESS BYTE WORD ADR


(* additional reserved words for PIM *)

EXPORT QUALIFIED WITH

(* additional builtins for PIM *)

BITSET CAP DEC DISPOSE EXCL FLOAT HALT HIGH INC INCL NEW NIL PROC SIZE TRUNC VAL

(* additional pseudo-builtins for PIM *)

SYSTEM PROCESS TSIZE NEWPROCESS TRANSFER


(* additional reserved words for ISO 10514-1 *)

EXCEPT EXPORT FINALLY FORWARD PACKEDSET QUALIFIED REM RETRY WITH

(* additional reserved words for ISO 10514-2 & ISO 10514-3 *)

ABSTRACT AS CLASS GUARD INHERIT OVERRIDE READONLY REVEAL TRACED UNSAFEGUARDED

(* additional builtins for ISO 10514-1 *)

BITSET CAP CMPLX COMPLEX DEC DISPOSE EXCL FLOAT HALT HIGH IM INC INCL INT
INTERRUPTIBLE LENGTH LFLOAT LONGCOMPLEX NEW PROC PROTECTION RE SIZE TRUNC
UNINTERRUBTIBLE VAL

(* additional builtins for ISO 10514-2 & ISO 10514-3 *)

CREATE DESTROY EMPTY ISMEMBER SELF


(* additional pseudo-builtins for ISO *)

(* SYSTEM *)
SYSTEM BITSPERLOC LOCSPERBYTE LOCSPERWORD LOC ADDADR SUBADR DIFADR MAKEADR
ADR ROTATE SHIFT CAST TSIZE

(* COROUTINES *)
COROUTINES ATTACH COROUTINE CURRENT DETACH HANDLER INTERRUPTSOURCE IOTRANSFER
IsATTACHED LISTEN NEWCOROUTINE PROT TRANSFER
 
(* EXCEPTIONS *)
EXCEPTIONS AllocateSource CurrentNumber ExceptionNumber ExceptionSource
GetMessage IsCurrentSource IsExceptionalExecution RAISE

(* TERMINATION *)
TERMINATION IsTerminating HasHalted

(* M2EXCEPTION *)
M2EXCEPTION M2Exceptions M2Exception IsM2Exception indexException rangeException
caseSelectException invalidLocation functionException wholeValueException
wholeDivException realValueException realDivException complexValueException
complexDivException protException sysException coException exException


(* additional reserved words for M2 R10 *)

ALIAS ARGLIST BLUEPRINT COPY GENLIB INDETERMINATE NEW NONE OPAQUE REFERENTIAL
RELEASE RETAIN

(* with symbolic assembler language extension *)
ASM REG

(* additional builtins for M2 R10 *)

CARDINAL COUNT EMPTY EXISTS INSERT LENGTH LONGCARD OCTET PTR PRED READ READNEW
REMOVE RETRIEVE SORT STORE SUBSET SUCC TLIMIT TMAX TMIN TRUE TSIZE UNICHAR
WRITE WRITEF

(* additional pseudo-builtins for M2 R10 *)

(* TPROPERTIES *)
TPROPERTIES PROPERTY LITERAL TPROPERTY TLITERAL TBUILTIN TDYN TREFC TNIL
TBASE TPRECISION TMAXEXP TMINEXP 

(* CONVERSION *)
CONVERSION TSXFSIZE SXF VAL

(* UNSAFE *)
UNSAFE CAST INTRINSIC AVAIL ADD SUB ADDC SUBC FETCHADD FETCHSUB SHL SHR ASHR
ROTL ROTR ROTLC ROTRC BWNOT BWAND BWOR BWXOR BWNAND BWNOR SETBIT TESTBIT
LSBIT MSBIT CSBITS BAIL HALT TODO FFI ADDR VARGLIST VARGC

(* ATOMIC *)
ATOMIC INTRINSIC AVAIL SWAP CAS INC DEC BWAND BWNAND BWOR BWXOR

(* COMPILER *)
COMPILER DEBUG MODNAME PROCNAME LINENUM DEFAULT HASH

(* ASSEMBLER *)
ASSEMBLER REGISTER SETREG GETREG CODE


(* standard library ADT identifiers for M2 R10 *)

(* rendered as builtins when dialect is set to Modula-2 R10,
   this can be turned off by option treat_stdlib_adts_as_builtins=off *)
BCD LONGBCD BITSET SHORTBITSET LONGBITSET LONGLONGBITSET COMPLEX LONGCOMPLEX
SHORTCARD LONGLONGCARD SHORTINT LONGLONGINT POSINT SHORTPOSINT LONGPOSINT
LONGLONGPOSINT BITSET8 BITSET16 BITSET32 BITSET64 BITSET128 BS8 BS16 BS32
BS64 BS128 CARDINAL8 CARDINAL16 CARDINAL32 CARDINAL64 CARDINAL128 CARD8
CARD16 CARD32 CARD64 CARD128 INTEGER8 INTEGER16 INTEGER32 INTEGER64
INTEGER128 INT8 INT16 INT32 INT64 INT128 STRING UNISTRING


(* additional reserved words for ObjM2 *)

(* Note: ObjM2 is a superset of M2 R10 *)

BYCOPY BYREF CLASS CONTINUE CRITICAL INOUT METHOD ON OPTIONAL OUT PRIVATE
PROTECTED PROTOCOL PUBLIC SUPER TRY

(* additional builtins for ObjM2 *)

OBJECT NO YES


(* additional builtins for Aglet Extensions to ISO *)

BITSET8 BITSET16 BITSET32 CARDINAL8 CARDINAL16 CARDINAL32 INTEGER8 INTEGER16
INTEGER32


(* additional reserved words for GNU Extensions to PIM *)

ASM __ATTRIBUTE__ __BUILTIN__ __COLUMN__ __DATE__ __FILE__ __FUNCTION__
__LINE__ __MODULE__ VOLATILE

(* additional builtins for GNU Extensions to PIM *)

BITSET8 BITSET16 BITSET32 CARDINAL8 CARDINAL16 CARDINAL32 CARDINAL64 COMPLEX32
COMPLEX64 COMPLEX96 COMPLEX128 INTEGER8 INTEGER16 INTEGER32 INTEGER64 REAL8
REAL16 REAL32 REAL96 REAL128 THROW


(* additional pseudo-builtins for p1 Extensions to ISO *)

BCD


(* additional reserved words for XDS Extensions to ISO *)

SEQ

(* additional builtins for XDS Extensions to ISO *)

ASH ASSERT DIFFADR_TYPE ENTIER INDEX LEN LONGCARD SHORTCARD SHORTINT

(* additional pseudo-builtins for XDS Extensions to ISO *)

(* SYSTEM *)
PROCESS NEWPROCESS BOOL8 BOOL16 BOOL32 CARD8 CARD16 CARD32 INT8 INT16 INT32
REF MOVE FILL GET PUT CC int unsigned size_t void

(* COMPILER *)
COMPILER OPTION EQUATION


(* end of file *)