220 lines
3.8 KiB
D
220 lines
3.8 KiB
D
/********
|
|
* Highlight testing module.
|
|
*
|
|
* Do not attempt to run this!
|
|
***********/
|
|
module highlighttest;
|
|
import X = null;
|
|
|
|
/++ Pragma directives. DDoc + DDoc embedded items. Special Tokens.
|
|
+
|
|
+ ---
|
|
+ // comment
|
|
+ #line 12 "hightlighttest.d" /* block comment */
|
|
+ #line __LINE__ __FILE__ /++ embedded block comment +/
|
|
+
|
|
+ pragma /* */ (msg, "what?");
|
|
+ pragma(/++ +/ lib, "insane.a");
|
|
+ pragma(inline);
|
|
+ pragma(linkerDirective);
|
|
+ pragma(mangle);
|
|
+ pragma(startaddress);
|
|
+ pragma(D_Custom_Extension, "custom data");
|
|
+ pragma(foo 0);
|
|
+ ---
|
|
+/
|
|
|
|
/// version condition
|
|
version = X;
|
|
version = 1_2_3;
|
|
version (X) ;
|
|
version(linux) {}
|
|
|
|
/// linkage
|
|
extern
|
|
(C) {}
|
|
extern :
|
|
;
|
|
extern (C++) {}
|
|
extern (C++, foo.bar.baz) {}
|
|
extern (D) {}
|
|
extern (Windows) {}
|
|
extern (Pascal) {}
|
|
extern (System) {}
|
|
extern (unknown) {}
|
|
extern (C,) {}
|
|
extern (C++, foo, bar) {}
|
|
|
|
/// alias & typedef
|
|
alias int.min minint;
|
|
typedef int myint;
|
|
|
|
int main(char[][] args) {
|
|
/// statements
|
|
if (1) {}
|
|
else {}
|
|
with (N) {x = B}
|
|
|
|
/// attributes
|
|
auto x = 1;
|
|
static if (true) {}
|
|
void (in X, out Y) {} // NOTE: using in like this is rare, more common to use as an expression and no way to tell apart?
|
|
|
|
/// deprecated
|
|
deprecated void fct ();
|
|
|
|
/// types
|
|
void a;
|
|
ushort u;
|
|
int[uint] AA;
|
|
class C;
|
|
enum N : int { A = 5, B }
|
|
typeof(u) u2;
|
|
|
|
/// expressions
|
|
x = cast(int) 55;
|
|
void* p = null;
|
|
p = cast(void*) new int;
|
|
x = 1 in AA; // NOTE: a THIRD use of in. How to detect??
|
|
assert (true);
|
|
|
|
/// libsymbols
|
|
string s = "";
|
|
throw new Exception;
|
|
TypeInfo ti = typeid(int);
|
|
|
|
/// tests
|
|
debug {}
|
|
debug (2) {}
|
|
debug (DSymb) {}
|
|
unittest {}
|
|
|
|
/// scope (as attribute and as statement)
|
|
scope struct S;
|
|
scope (exit) {}
|
|
scope
|
|
(success) {} // NOTE: rules cannot match across new-lines
|
|
scope (failure) {}
|
|
|
|
/// Properties
|
|
x = int.min;
|
|
s = (5-3).stringof;
|
|
|
|
/// strings
|
|
s = r"raw string";
|
|
s = x"00FF";
|
|
s = \n \a;
|
|
s = \u1234;
|
|
s = \U12345678;
|
|
s = \& ;
|
|
char c = 'a';
|
|
s = "abc 012 \" \n \x12 \u1234 \U12345678";
|
|
s = `BQString '"`;
|
|
s = q{foo "bar" 123};
|
|
s = q"FOO
|
|
foo
|
|
FOO";
|
|
s = q"[foo [bar] q"[baz]"]";
|
|
s = q"(foo (bar) q"(baz)")";
|
|
s = q"<foo <bar> q"<baz>">";
|
|
s = q"{foo {bar} q"{baz}"}";
|
|
s = q"/foo/";
|
|
s = q"!foo!";
|
|
|
|
/// region markers
|
|
//BEGIN x
|
|
//END x
|
|
|
|
/// DDoc
|
|
/*******
|
|
* DDoc
|
|
*
|
|
* Section:
|
|
* New section.
|
|
* $(I italic)
|
|
*******/
|
|
/+++++++
|
|
+ DDoc
|
|
+ /+
|
|
+ +/
|
|
+++++++/
|
|
|
|
// comments
|
|
// FIXME NOTE
|
|
/* comment */
|
|
/+ comment /+ nested comment +/ +/
|
|
|
|
/// brace folding
|
|
{
|
|
}
|
|
|
|
/** normal text
|
|
* ---
|
|
* .x;
|
|
* ..
|
|
* ...
|
|
* ....
|
|
* .....
|
|
* _._
|
|
* _e1
|
|
* ---
|
|
*/
|
|
|
|
/// float and int literals
|
|
int i;
|
|
real r;
|
|
ireal ir;
|
|
r = .0;
|
|
r = 0f;
|
|
ir = 0e0i;
|
|
ir = 0.fi;
|
|
r = 0.0e0;
|
|
r = 0xF.Fp0;
|
|
r = 0x_._p0_;
|
|
i = 5;
|
|
i = -1;
|
|
i = 0b10;
|
|
i = 0070;
|
|
i = 00;
|
|
i = 0xF0;
|
|
|
|
/// ranges
|
|
int[] A;
|
|
i = A[1];
|
|
A = A[0..$];
|
|
A = A[0..0];
|
|
A = A[0..length];
|
|
|
|
/// labels
|
|
label:
|
|
goto label;
|
|
|
|
/// function, delegate
|
|
creal function () fp = function creal() { return 0f+0fi; };
|
|
void delegate (in int i, lazy int b) dg = delegate void (int, int) {}
|
|
|
|
/// in, out, body
|
|
// NOTE: highlighting in & out as statements here could be difficult
|
|
float F ()
|
|
in {}
|
|
out (result) {}
|
|
body {}
|
|
|
|
/// try, catch, finally
|
|
try {
|
|
throw new Exception("oh no... ");
|
|
} catch (Exception e) {
|
|
} finally {
|
|
}
|
|
|
|
/// mixin
|
|
mixin("return false;").stringof;
|
|
|
|
/// templates
|
|
macro; // what does this do?
|
|
template Tp (T) {
|
|
Tp t;
|
|
}
|
|
Tp!(int) y;
|
|
}
|