@Override
public List<Type> throwTypes(TypeSystem ts) {
	// First, obtain the list of possible throw types from the superclass.
	List<Type> l = new ArrayList<>(super.throwTypes(ts));

	if (op == ASSIGN && left.type().isReference()) {
		// thrown when the run-time array type is incompatible with the
		// type of the element being assigned to the array
		l.add(ts.ArrayStoreException());
	}

	// thrown when the array to be assigned is null
	l.add(ts.NullPointerException());
	// thrown when the array index is out of bounds
	l.add(ts.OutOfBoundsException());

	return l;
}
