Permalink
Fetching contributors…
Cannot retrieve contributors at this time
145 lines (112 sloc) 2.09 KB
(* comment *)
#define pi 3.14
f(1)
#define f(x) x+pi
f(2)
#undef pi
f(3)
#ifdef g
"g" is defined
#else
"g" is not defined
#endif
#define a(x) b()
#define b(x) a()
a()
debug("a")
debug("b")
#define z 123
#define y z
#define x y
#if x lsl 1 = 2*123
#if 1 = 2
#error "test"
#endif
success
#else
failure
#endif
#define test_multiline \
"abc\
def" \
(* 123 \
456 *)
test_multiline
#define test_args(x, y) x y
test_args("a","b")
#define test_argc(x) x y
test_argc(aa\,bb)
#define test_esc(x) x
test_esc(\,\)\()
blah #define xyz
#ifdef xyz
#error "xyz should not have been defined"
#endif
#define sticky1(x) _
#define sticky2(x) sticky1()_ (* the 2 underscores should be space-separated *)
sticky2()
#define empty1
#define empty2 +empty1+ (* there should be some space between the pluses *)
empty2
(* (* nested comment with single single quote: ' *) "*)" *)
#define arg
obj
\# define arg
' (* lone single quote *)
#define one 1
one is not 1
#undef x
#define x #
x is #
#undef one
#define one 1
#if (one+one = 100 + \
64 lsr 3 / 4 - lnot lnot 100) && \
1 + 3 * 5 = 16 && \
22 mod 7 = 1 && \
lnot 0 = 0xffffffffffffffff && \
-1 asr 100 = -1 && \
-1 land (1 lsl 1 lsr 1) = 1 && \
-1 lor 1 = -1 && \
-2 lxor 1 = -1 && \
lnot -1 = 0 && \
true && not false && defined one && \
(true || true && false)
good maths
#else
#error "math error"
#endif
#undef f
#undef g
#undef x
#undef y
#define trace(f) \
let f x = \
printf "call %s\n%!" STRINGIFY(f); \
let y = f x in \
printf "return %s\n%!" STRINGIFY(f); \
y \
;;
trace(g)
#define field(name,type) \
val mutable name : type option \
method CONCAT(get_, name) = name \
method CONCAT(set_, name) x = name <- Some x
class foo () =
object
field(field_1, int)
field(field_2, string)
end
#define DEBUG(x) \
(if !debug then \
eprintf "[debug] %s %i: " __FILE__ __LINE__; \
eprintf x; \
eprintf "\n")
DEBUG("test1 %i %i" x y)
DEBUG("test2 %i" x)
#include "test/incl.cppo"
# 123456
#789 "test"
#include "test/incl.cppo"
#define debug(s) Printf.eprintf "%S %i: %s\n%!" __FILE__ __LINE__ s
end