- type_t *type = array_ref->datatype;
- if(type != NULL) {
- if(type->type == TYPE_POINTER) {
- pointer_type_t *pointer = (pointer_type_t*) type;
+ type_t *type_left = skip_typeref(array_ref->datatype);
+ type_t *type_right = skip_typeref(index->datatype);
+
+ if(type_left != NULL && type_right != NULL) {
+ if(type_left->type == TYPE_POINTER) {
+ pointer_type_t *pointer = (pointer_type_t*) type_left;
+ array_access->expression.datatype = pointer->points_to;
+ } else if(type_left->type == TYPE_ARRAY) {
+ array_type_t *array_type = (array_type_t*) type_left;
+ array_access->expression.datatype = array_type->element_type;
+ } else if(type_right->type == TYPE_POINTER) {
+ pointer_type_t *pointer = (pointer_type_t*) type_right;