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
|
(* Modula-2 R10 Test File for Vim Syntax Colouring *)
(* --------------------------------------------------
* THIS FILE IS LICENSED UNDER THE VIM LICENSE
* see https://github.com/vim/vim/blob/master/LICENSE
* -------------------------------------------------- *)
DEFINITION MODULE Foobar; (*!m2r10*)
IMPORT UNSAFE ALIAS BYTE, WORD, ADDRESS;
CONST MaxFoo = 1.0;
TYPE Foo = ALIAS OF Bar;
(* predefined constants *)
NIL FALSE TRUE
(* predefined types *)
BOOLEAN CHAR UNICHAR OCTET CARDINAL LONGCARD INTEGER LONGINT REAL LONGREAL
(* predefined procedures *)
APPEND INSERT REMOVE SORT SORTNEW
(* predefined functions *)
CHR ORD ODD ABS SGN MIN MAX LOG2 POW2 ENTIER PRED SUCC PTR CAPACITY COUNT LENGTH
(* predefined macros *)
NOP TMIN TMAX TSIZE TLIMIT
(* unsafe builtins *)
UNSAFE
(* unsafe builtin types *)
BYTE WORD LONGWORD ADDRESS OCTETSEQ
(* unsafe builtin procedures *)
ADD SUB DEC INC SETBIT HALT
(* unsafe builtin functions *)
ADR CAST BIT SHL SHR BWNOT BWAND BWOR
(* non-portable language extensions *)
ASSEMBLER ASM REG
(* user defined identifiers *)
foobar Foobar FooBar foo_bar foo0
(* string literals *)
str := "foo 'bar' baz";
str := 'foo "bar" baz';
(* numeric literals *)
0b0110'0011'0110'0000, 0u0A, 0x0123, 0xCAFE'D00D
1'000'000.00, 1.23, 1.23e+10, 1.234'567'890e-1'000
(* language defined pragmas *)
<*MSG=INFO:"foobar"*> <*ENCODING="UTF8"*> <*INLINE*> <*NOINLINE*> <*FFI="C"*>
(* implementation defined pragmas *)
<*GM2.Foobar|W=Bazbam*>
(* single line comment *)
! foo bar baz bam boo
(* block comments with emphasis *)
(* copyright (c) 2016 Modula-2 Foundation.
authors B.Kowarsch and R.Sutcliffe
license see LICENSE *)
(* pre-conditions: foo bar baz bam boo doodle wah.
post-conditions: foodle babble bozo bim bam dang.
error-conditions: dada jingle jungle boggle dee boo. *)
(* (* *) *)
(* bindings *)
PROCEDURE [+] sum ( a, b : BCD ) : BCD;
PROCEDURE [MOD] modulus ( n, m : INT64 ) : INT64;
PROCEDURE [RETAIN] Retain ( foo : Foo );
PROCEDURE [LENGTH] length ( str : String ) : LONGCARD;
(* procedures *)
PROCEDURE NewFooWithBar ( VAR foo: Foo; bar : INTEGER );
BEGIN
NEW(foo);
foo^.bar := bar;
RETURN
END NewFooWithBar;
END END;
(* functions *)
PROCEDURE bar ( foo : Foo ) : INTEGER;
BEGIN
IF foo = NIL THEN
UNSAFE.HALT
ELSE
RETURN foo^.bar
END (* IF *)
END bar;
(* technical debt *)
TO DO ( 1234, Weight.Major ) (* foo *)
"redesign foo", 2d;
"replace foo", 2d;
"test new foo", 1d
END (* TO DO *);
PROCEDURE SetBaba <*DEPRECATED*> ( n : CARDINAL );
(* disabled code *)
?<
WHILE foo = bar DO
baz(bam, boo)
END (* WHILE *);
>?
(* illegal characters *)
` ~ $ % ? _
(* illegal identifiers *)
_bar _bar_baz _bar_baz__bam _bar_baz__bam_boo
bar_ bar_baz_ bar_baz__bam_ bar_baz__bam_boo_
__bar __bar_baz __bar_baz__bam __bar_baz__bam_boo
bar__ bar_baz__ bar_baz__bam__ bar_baz__bam_boo__
bar__baz __bar_baz__ __bar__baz__ __
(* module end *)
END Foobar.
|