#version 310 es
#define X 1
#define Y clamp
#define Z X

#define F 1, 2

#define make_function \
  float fn ( float x ) \
  {\
    return x + 4.0; \
  }

make_function

int main() {
  gl_Position = vec4(X);
  gl_Position = Y(1, 2, 3);
  gl_Position = vec4(Z);
  gl_Position = vec4(F);
  gl_Position = vec4(fn(3));
  [] . ++ --
  + - * % / - ! ~
  << >> < > <= >=
  == !=
  & ^ | && ^^ || ? :
  += -= *= /= %= <<= >>= &= |= ^=
  1.2 2E10 5u -5lf
}

struct S {
    int member1;
    float member2;
    vec4 member3;
};

#define xyz xxyz
#define yzy() yyz

#define FUN_MAC() \
	vec3 a = vec3(0); \
	vec3 b = a.zxyz;  \
	vec3 b = a.xyz;   \
	vec3 b = a.yzy();   \
	vec3 b = a.xyz();   \
	vec3 b = a.yzy;   \
	vec3 b = a.z;

void bar(int x) {}

void foo()
{
    S s;
    s.member2 + s.member1;
    s.member3.zyx;
    s.member2.xyz;
    s.member2.yzy();
    s.member2.xyz();
    s.member2.yzy;
    for(int i = 0;i < 100; i = i + 1) {
      bar (i)
    }
    FUN_MAC()
    yzy

    ();
    yzy


}
