blob: b734f73505457a3a55d102d81c6582376be0c336 (
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
|
(* TEST_BELOW*)
let print_loc loc =
print_endline loc
let print_file file =
print_endline file
let print_line line =
print_endline (Int.to_string line)
let print_module md =
print_endline md
let print_pos (file, line, col1, col2) =
Printf.printf "%s, %d, %d, %d\n" file line col1 col2
let () = print_loc __LOC__
let () = print_file __FILE__
let () = print_line __LINE__
let () = print_module __MODULE__
let () = print_pos __POS__
let loc, s1 = __LOC_OF__ "an expression"
let () = print_loc loc
let () = print_endline s1
let line, s2 = __LINE_OF__ "another expression"
let () = print_line line
let () = print_endline s2
let pos, s3 = __POS_OF__ "yet another expression"
let () = print_pos pos
let () = print_endline s3
let id x = Sys.opaque_identity x
let bang () = print_endline __FUNCTION__
let fn_multi _ _ = print_endline __FUNCTION__
let fn_function = function
| f -> print_endline __FUNCTION__
let fn_poly : 'a . 'a -> unit = fun _ ->
print_endline __FUNCTION__
module Mod1 = struct
module Nested = struct
let apply () = print_endline __FUNCTION__
end
end
let anon () =
print_endline __FUNCTION__;
let fn = print_endline __FUNCTION__; id (fun () -> print_endline __FUNCTION__) in
fn ()
let double_anon f =
print_endline __FUNCTION__;
let fn = id (fun () ->
print_endline __FUNCTION__;
let fn = id (fun () -> print_endline __FUNCTION__) in
fn ()) in
fn ()
let local () =
print_endline __FUNCTION__;
let inner () = print_endline __FUNCTION__ in
(id inner) ()
let double_local () =
print_endline __FUNCTION__;
let inner1 () =
print_endline __FUNCTION__;
let inner2 () = print_endline __FUNCTION__ in
(id inner2) () in
(id inner1) ()
let local_no_arg =
print_endline __FUNCTION__;
let inner () = print_endline __FUNCTION__ in
fun () -> print_endline __FUNCTION__; id inner ()
let curried () =
print_endline __FUNCTION__;
let inner () () = print_endline __FUNCTION__ in
id (inner ())
let local_module () =
print_endline __FUNCTION__;
let module N = struct
let foo () =
print_endline __FUNCTION__
let r = print_endline __FUNCTION__; ref ()
let () = r := id (id foo ())
end in
!N.r
module Functor (X : sig end) = struct
let fn () = print_endline __FUNCTION__
end
module Inst = Functor (struct end)
module rec Rec1 : sig
val fn : unit -> unit
end = struct
module M = Rec2 (struct end)
let fn () = print_endline __FUNCTION__; M.fn ()
end
and Rec2 : functor (X : sig end) -> sig
val fn : unit -> unit
end = functor (X : sig end) -> struct
let fn () = print_endline __FUNCTION__
end
let (+@+) _ _ = print_endline __FUNCTION__
class klass = object (self)
method meth () =
print_endline __FUNCTION__
end
let inline_object () =
let obj = object (self)
method meth =
print_endline __FUNCTION__;
self#othermeth
method othermeth =
print_endline __FUNCTION__
end in
obj#meth
let () =
fn_multi 1 1;
fn_function ();
fn_poly 42;
Mod1.Nested.apply ();
anon ();
double_anon ();
local ();
double_local ();
local_no_arg ();
curried () ();
local_module ();
Inst.fn ();
Rec1.fn ();
42 +@+ 32;
(new klass)#meth ();
inline_object ();
bang ()
(* TEST
*)
|