import std.stdio;

void foo()
{
    float  f = x % y;
    double d = x % y;
    real   r = x % y;

    result = (x < y);    // false if x or y is nan
    assert(e == 0);
    int array[ 17 ];

    array[] = value;
    int array[ 17 ];

    for (i = 0; i < array.length; i++)
        func(array[ i ]);
    int array[ 17 ];

    foreach (int value; array)
        func(value);
    int[] array;

    array.length              = array.length + 1;
    array[ array.length - 1 ] = x;
    char[] s1;
    char[] s2;
    char[] s;

    s = s1 ~ s2;
    s ~= "hello";


    writefln("Calling all cars %s times!", ntimes);
 Louter:
    for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 10; j++)
        {
            if (j == 3)
                break Louter;
            if (j == 4)
                continue Louter;
        }
    }
    // break Louter goes here
    typedef bit    bHandle;
    typedef int    iHandle = -1;
    typedef void   *Handle = cast(void *)(-1);
    Handle h;

    h = func();
    if (h != Handle.init)
        ;
    char[] string = "hello";

    if (string < "betty")
        ;
    int *p = address;

    volatile { i = *p; }

    char[] ml = "This text spans
multiple
lines
";
}

void dostring(char[] s)
{
    switch (s)
    {
    case "hello":;

    case "goodbye":;

    case "maybe":;

    default:;
    }
}

struct ABC
{
    int           z;    // z is aligned to the default

    align (1) int x;    // x is byte aligned
    align (4)
    {
        ...             // declarations in {} are dword aligned
    }
    align (2) :         // switch to word alignment from here on

    int y;              // y is word aligned
}

struct Foo
{
    int i;
    union
    {
        struct { int x; long y; }
        char *p;
    }
}

struct Foo { int x; int y; }    // note there is no terminating ;
Foo foo;


struct Foo { int x; int y; }

off = Foo.y.offsetof;

union U { int a; long b; }
U x = { a:5 };

struct S { int a; int b; }
S x = { b:3, a:5 };

int[ 3 ] a = [ 3, 2, 0 ];
int[ 3 ] a = [ 3, 2 ];            // unsupplied initializers are 0, just like in C
int[ 3 ] a = [ 2:0, 0:3, 1:2 ];
int[ 3 ] a = [ 2:0, 0:3, 2 ];     // if not supplied, the index is the
                                  // previous one plus one.

enum color { black, red, green }
int[ 3 ] c = [ black:3, green:2, red:5 ];

char[]  file        = `c:\root\file.c`;
char[]  quoteString = \"  r"[^\\]*(\\.[^\\]*)*"  \";

char[]  hello     = "hello world" \n;
char[]  foo_ascii = "hello";       // string is taken to be ascii
wchar[] foo_wchar = "hello";       // string is taken to be wchar

enum COLORS { red, blue, green };

char[][ COLORS.max + 1 ] cstring =
[
    COLORS.red:"red",
    COLORS.blue:"blue",
    COLORS.green:"green",
];

const ushort table1[ 16 ] =
[
    0x00A7, 0x0322, 0x07AD, 0x0428,
    0x0536, 0x06B3, 0x023C, 0x01B9
];

const ushort table2[ 16 ] =
[
    0x0000, 0x0385, 0x070A, 0x048F,
    0x0536, 0x06B3, 0x023C, 0x01B9
];

