code: def _array_handler(self, _cursor_type):
          
          # The element type has been previously declared
          # we need to get the canonical typedef, in some cases
          _type = _cursor_type.get_canonical()
          size = _type.get_array_size()
          if size == -1 and _type.kind == TypeKind.INCOMPLETEARRAY:
              size = 0
              # FIXME: Incomplete Array handling at end of record.
              # https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
              # FIXME VARIABLEARRAY DEPENDENTSIZEDARRAY
          _array_type = _type.get_array_element_type()  # .get_canonical()
          if self.is_fundamental_type(_array_type):
              _subtype = self.parse_cursor_type(_array_type)
          elif self.is_pointer_type(_array_type):
              # code.interact(local=locals())
              # pointers to POD have no declaration ??
              # FIXME test_struct_with_pointer x_n_t g[1]
              _subtype = self.parse_cursor_type(_array_type)
          elif self.is_array_type(_array_type):
              _subtype = self.parse_cursor_type(_array_type)
          else:
              _subtype_decl = _array_type.get_declaration()
              _subtype = self.parse_cursor(_subtype_decl)
              # if _subtype_decl.kind == CursorKind.NO_DECL_FOUND:
              #    pass
              #_subtype_name = self.get_unique_name(_subtype_decl)
              #_subtype = self.get_registered(_subtype_name)
          obj = typedesc.ArrayType(_subtype, size)
          obj.location = _subtype.location
          return obj
docs: Handles all array types.
          Resolves it's element type and makes a Array typedesc.