blob: 0872d5dfb91cc11060dd763f4fa0dfce8f141bf1 [file] [log] [blame]
Doug Kearns68a89472024-01-05 17:59:04 +01001(* Modula-2 R10 Test File for Vim Syntax Colouring *)
2
3(* --------------------------------------------------
4 * THIS FILE IS LICENSED UNDER THE VIM LICENSE
5 * see https://github.com/vim/vim/blob/master/LICENSE
6 * -------------------------------------------------- *)
7
8DEFINITION MODULE Foobar; (*!m2r10*)
9
10IMPORT UNSAFE ALIAS BYTE, WORD, ADDRESS;
11
12CONST MaxFoo = 1.0;
13
14TYPE Foo = ALIAS OF Bar;
15
16(* predefined constants *)
17NIL FALSE TRUE
18
19(* predefined types *)
20BOOLEAN CHAR UNICHAR OCTET CARDINAL LONGCARD INTEGER LONGINT REAL LONGREAL
21
22(* predefined procedures *)
23APPEND INSERT REMOVE SORT SORTNEW
24
25(* predefined functions *)
26CHR ORD ODD ABS SGN MIN MAX LOG2 POW2 ENTIER PRED SUCC PTR CAPACITY COUNT LENGTH
27
28(* predefined macros *)
29NOP TMIN TMAX TSIZE TLIMIT
30
31(* unsafe builtins *)
32UNSAFE
33
34(* unsafe builtin types *)
35BYTE WORD LONGWORD ADDRESS OCTETSEQ
36
37(* unsafe builtin procedures *)
38ADD SUB DEC INC SETBIT HALT
39
40(* unsafe builtin functions *)
41ADR CAST BIT SHL SHR BWNOT BWAND BWOR
42
43(* non-portable language extensions *)
44ASSEMBLER ASM REG
45
46(* user defined identifiers *)
47foobar Foobar FooBar foo_bar foo0
48
49
50(* string literals *)
51str := "foo 'bar' baz";
52str := 'foo "bar" baz';
53
54(* numeric literals *)
550b0110'0011'0110'0000, 0u0A, 0x0123, 0xCAFE'D00D
561'000'000.00, 1.23, 1.23e+10, 1.234'567'890e-1'000
57
58
59(* language defined pragmas *)
60<*MSG=INFO:"foobar"*> <*ENCODING="UTF8"*> <*INLINE*> <*NOINLINE*> <*FFI="C"*>
61
62(* implementation defined pragmas *)
63<*GM2.Foobar|W=Bazbam*>
64
65
66(* single line comment *)
67! foo bar baz bam boo
68
69(* block comments with emphasis *)
70(* copyright (c) 2016 Modula-2 Foundation.
71 authors B.Kowarsch and R.Sutcliffe
72 license see LICENSE *)
73
74(* pre-conditions: foo bar baz bam boo doodle wah.
75 post-conditions: foodle babble bozo bim bam dang.
76 error-conditions: dada jingle jungle boggle dee boo. *)
77
78(* (* *) *)
79
80(* bindings *)
81PROCEDURE [+] sum ( a, b : BCD ) : BCD;
82
83PROCEDURE [MOD] modulus ( n, m : INT64 ) : INT64;
84
85PROCEDURE [RETAIN] Retain ( foo : Foo );
86
87PROCEDURE [LENGTH] length ( str : String ) : LONGCARD;
88
89
90(* procedures *)
91PROCEDURE NewFooWithBar ( VAR foo: Foo; bar : INTEGER );
92BEGIN
93 NEW(foo);
94 foo^.bar := bar;
95 RETURN
96END NewFooWithBar;
97
98END END;
99
100(* functions *)
101PROCEDURE bar ( foo : Foo ) : INTEGER;
102BEGIN
103 IF foo = NIL THEN
104 UNSAFE.HALT
105 ELSE
106 RETURN foo^.bar
107 END (* IF *)
108END bar;
109
110
111(* technical debt *)
112TO DO ( 1234, Weight.Major ) (* foo *)
113 "redesign foo", 2d;
114 "replace foo", 2d;
115 "test new foo", 1d
116END (* TO DO *);
117
118PROCEDURE SetBaba <*DEPRECATED*> ( n : CARDINAL );
119
120
121(* disabled code *)
122?<
123WHILE foo = bar DO
124 baz(bam, boo)
125END (* WHILE *);
126>?
127
128
129(* illegal characters *)
130` ~ $ % ? _
131
132(* illegal identifiers *)
133
134_bar _bar_baz _bar_baz__bam _bar_baz__bam_boo
135
136bar_ bar_baz_ bar_baz__bam_ bar_baz__bam_boo_
137
138__bar __bar_baz __bar_baz__bam __bar_baz__bam_boo
139
140bar__ bar_baz__ bar_baz__bam__ bar_baz__bam_boo__
141
142bar__baz __bar_baz__ __bar__baz__ __
143
144
145(* module end *)
146END Foobar.