===========
declaration
===========

int number;
float pointnumber;
char character;
bool boolean;
float vec[3];
bool active[MAXPLAYERS + 1];
Action action;
Action
 action1;
Action
 g_action1;
Action
 action1,
 action2;
Action
 action[10];

---

(source_file
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      (fixed_dimension
        (int_literal)
      )
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      (fixed_dimension
        (binary_expression
          left: (identifier)
          right: (int_literal)
        )
      )
    )
  )
  (global_variable_declaration
    type: (type
      (identifier)
    )
    (variable_declaration
      name: (identifier)
    )
  )
  (global_variable_declaration
    type: (type
      (identifier)
    )
    (variable_declaration
      name: (identifier)
    )
  )
  (global_variable_declaration
    type: (type
      (identifier)
    )
    (variable_declaration
      name: (identifier)
    )
  )
  (global_variable_declaration
    type: (type
      (identifier)
    )
    (variable_declaration
      name: (identifier)
    )
    (variable_declaration
      name: (identifier)
    )
  )
  (global_variable_declaration
    type: (type
      (identifier)
    )
    (variable_declaration
      name: (identifier)
      (fixed_dimension
        (int_literal)
      )
    )
  )
)


==============
initialization
==============

int money = 5400;
int money = 5400
+1;
int money = 5400
+1
float percent = 67.3;
char key = 'A';
bool enabled = false;
Handle handle = null;
/*----------  MaxSpeed Variables  ----------*/
bool g_bInMaxSpeed[MAXPLAYERS + 1];
/*----------  VIP Variables  ----------*/
ConVar g_hAutoVipFlag = null;

---

(source_file
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      initialValue: (int_literal)
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      initialValue: (binary_expression
        left: (int_literal)
        right: (int_literal)
      )
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      initialValue: (binary_expression
        left: (int_literal)
        right: (int_literal)
      )
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      initialValue: (float_literal)
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      initialValue: (char_literal
        (character)
      )
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      initialValue: (bool_literal)
    )
  )
  (global_variable_declaration
    type: (type
      (identifier)
    )
    (variable_declaration
      name: (identifier)
      initialValue: (null)
    )
  )
  (comment)
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      (fixed_dimension
        (binary_expression
          left: (identifier)
          right: (int_literal)
        )
      )
    )
  )
  (comment)
  (global_variable_declaration
    type: (type
      (identifier)
    )
    (variable_declaration
      name: (identifier)
      initialValue: (null)
    )
  )
)


==========================
initialization - methodmap
==========================

void foo() {
  ArrayList arr1 = new ArrayList();
  ArrayList arr2 = new ArrayList(1, 5);
}

---

(source_file
  (function_definition
    returnType: (type
      (builtin_type)
    )
    name: (identifier)
    parameters: (parameter_declarations)
    body: (block
      (variable_declaration_statement
        type: (type
          (identifier)
        )
        (variable_declaration
          name: (identifier)
          initialValue: (new_expression
            class: (identifier)
            arguments: (call_arguments)
          )
        )
      )
      (variable_declaration_statement
        type: (type
          (identifier)
        )
        (variable_declaration
          name: (identifier)
          initialValue: (new_expression
            class: (identifier)
            arguments: (call_arguments
              (int_literal)
              (int_literal)
            )
          )
        )
      )
    )
  )
)


====================
array initialization
====================

int numbers[] = { -1, 2, 3 };
float vec[3] = { -0.0, 14.2, 13.22 };
Action action[MAXPLAYERS] = { true, ... };
int arr[] =
{
 (1 << 0),
 (1 << 1)
};

---

(source_file
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      (dimension)
      initialValue: (array_literal
        (preproc_unary_expression
          argument: (int_literal)
        )
        (int_literal)
        (int_literal)
      )
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      (fixed_dimension
        (int_literal)
      )
      initialValue: (array_literal
        (preproc_unary_expression
          argument: (float_literal)
        )
        (float_literal)
        (float_literal)
      )
    )
  )
  (global_variable_declaration
    type: (type
      (identifier)
    )
    (variable_declaration
      name: (identifier)
      (fixed_dimension
        (identifier)
      )
      initialValue: (array_literal
        (bool_literal)
        (rest_operator)
      )
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      (dimension)
      initialValue: (array_literal
        (preproc_parenthesized_expression
          (preproc_binary_expression
            left: (int_literal)
            right: (int_literal)
          )
        )
        (preproc_parenthesized_expression
          (preproc_binary_expression
            left: (int_literal)
            right: (int_literal)
          )
        )
      )
    )
  )
)


==========================
enum struct initialization
==========================

MyStruct s = {1, "test", 2.31, true, {1.0, 2.0, 3.0}, Plugin_Handled};

---

(source_file
  (global_variable_declaration
    type: (type
      (identifier)
    )
    (variable_declaration
      name: (identifier)
      initialValue: (array_literal
        (int_literal)
        (string_literal)
        (float_literal)
        (bool_literal)
        (array_literal
          (float_literal)
          (float_literal)
          (float_literal)
        )
        (identifier)
      )
    )
  )
)


=============
storage class
=============

const int a = 1;
static float b;
static bool c = false;
static const char d[] = "lorem";
public const int e;
stock const int e;

---

(source_file
  (global_variable_declaration
    storage_class: (variable_storage_class)
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      initialValue: (int_literal)
    )
  )
  (global_variable_declaration
    visibility: (visibility)
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
    )
  )
  (global_variable_declaration
    visibility: (visibility)
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      initialValue: (bool_literal)
    )
  )
  (global_variable_declaration
    visibility: (visibility)
    storage_class: (variable_storage_class)
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      (dimension)
      initialValue: (string_literal)
    )
  )
  (global_variable_declaration
    visibility: (visibility)
    storage_class: (variable_storage_class)
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
    )
  )
  (global_variable_declaration
    visibility: (visibility)
    storage_class: (variable_storage_class)
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
    )
  )
)


=======================
multidimensional arrays
=======================

float vec[MAXPLAYERS][10];
float vec [MAXPLAYERS] [10];
int bla[][] = { {1,2,3}, {4,5,6}, {7,8,9} };

---

(source_file
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      (fixed_dimension
        (identifier)
      )
      (fixed_dimension
        (int_literal)
      )
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      (fixed_dimension
        (identifier)
      )
      (fixed_dimension
        (int_literal)
      )
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      (dimension)
      (dimension)
      initialValue: (array_literal
        (array_literal
          (int_literal)
          (int_literal)
          (int_literal)
        )
        (array_literal
          (int_literal)
          (int_literal)
          (int_literal)
        )
        (array_literal
          (int_literal)
          (int_literal)
          (int_literal)
        )
      )
    )
  )
)


==================
optional semicolon
==================

int i
bool b
float f = 2.3

---

(source_file
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      initialValue: (float_literal)
    )
  )
)


===============================
multiple variables of same type
===============================

int a, b;
bool c, d = true;
float e = 12.92, f = 1.2, g = 82.00;
char h = 'c', i;
char j[10] = "whatever!", k[256];

---

(source_file
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
    )
    (variable_declaration
      name: (identifier)
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
    )
    (variable_declaration
      name: (identifier)
      initialValue: (bool_literal)
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      initialValue: (float_literal)
    )
    (variable_declaration
      name: (identifier)
      initialValue: (float_literal)
    )
    (variable_declaration
      name: (identifier)
      initialValue: (float_literal)
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      initialValue: (char_literal
        (character)
      )
    )
    (variable_declaration
      name: (identifier)
    )
  )
  (global_variable_declaration
    type: (type
      (builtin_type)
    )
    (variable_declaration
      name: (identifier)
      (fixed_dimension
        (int_literal)
      )
      initialValue: (string_literal)
    )
    (variable_declaration
      name: (identifier)
      (fixed_dimension
        (int_literal)
      )
    )
  )
)
