# indent w/ 2 spaces
source: |
  def test_array_1(mutable array[uint[16], 4, 2] a) {}
  def test_array_2(readonly array[uint[16], 4, 2] a) {}
  def test_array_3(mutable array[uint[16], #dim=2] a) {}
  def test_array_4(readonly array[uint[16], #dim=2*n] a) {}
  def test_array_5(readonly array[int[8], #dim=1] a, mutable array[complex[float[64]], #dim=3] b, readonly array[complex[float[64]], 2, 2] c) -> int[8] {}
reference: |
  program
    statementOrScope
      statement
        defStatement
          def
          test_array_1
          (
          argumentDefinitionList
            argumentDefinition
              arrayReferenceType
                mutable
                array
                [
                scalarType
                  uint
                  designator
                    [
                    expression
                      16
                    ]
                ,
                expressionList
                  expression
                    4
                  ,
                  expression
                    2
                ]
              a
          )
          scope
            {
            }
    statementOrScope
      statement
        defStatement
          def
          test_array_2
          (
          argumentDefinitionList
            argumentDefinition
              arrayReferenceType
                readonly
                array
                [
                scalarType
                  uint
                  designator
                    [
                    expression
                      16
                    ]
                ,
                expressionList
                  expression
                    4
                  ,
                  expression
                    2
                ]
              a
          )
          scope
            {
            }
    statementOrScope
      statement
        defStatement
          def
          test_array_3
          (
          argumentDefinitionList
            argumentDefinition
              arrayReferenceType
                mutable
                array
                [
                scalarType
                  uint
                  designator
                    [
                    expression
                      16
                    ]
                ,
                #dim
                =
                expression
                  2
                ]
              a
          )
          scope
            {
            }
    statementOrScope
      statement
        defStatement
          def
          test_array_4
          (
          argumentDefinitionList
            argumentDefinition
              arrayReferenceType
                readonly
                array
                [
                scalarType
                  uint
                  designator
                    [
                    expression
                      16
                    ]
                ,
                #dim
                =
                expression
                  expression
                    2
                  *
                  expression
                    n
                ]
              a
          )
          scope
            {
            }
    statementOrScope
      statement
        defStatement
          def
          test_array_5
          (
          argumentDefinitionList
            argumentDefinition
              arrayReferenceType
                readonly
                array
                [
                scalarType
                  int
                  designator
                    [
                    expression
                      8
                    ]
                ,
                #dim
                =
                expression
                  1
                ]
              a
            ,
            argumentDefinition
              arrayReferenceType
                mutable
                array
                [
                scalarType
                  complex
                  [
                  scalarType
                    float
                    designator
                      [
                      expression
                        64
                      ]
                  ]
                ,
                #dim
                =
                expression
                  3
                ]
              b
            ,
            argumentDefinition
              arrayReferenceType
                readonly
                array
                [
                scalarType
                  complex
                  [
                  scalarType
                    float
                    designator
                      [
                      expression
                        64
                      ]
                  ]
                ,
                expressionList
                  expression
                    2
                  ,
                  expression
                    2
                ]
              c
          )
          returnSignature
            ->
            scalarType
              int
              designator
                [
                expression
                  8
                ]
          scope
            {
            }
    <EOF>
