diff --git a/examples/example_hl.f90 b/examples/example_hl.f90 index 3f347e3efbd5787b934ed024dfc6c5c758887316..62d46f0e2579d617fd8199c5072bb0900e668915 100644 --- a/examples/example_hl.f90 +++ b/examples/example_hl.f90 @@ -77,4 +77,7 @@ PROGRAM example dqts = td1%divideInSecondsBy(td) WRITE (0,*) td1%to_string(), " / ", td%to_string(), " = ", dqts%quotient, " plus stuff" + ! produce error + dt = t_datetime("1970--01-01T00:00:00") + END PROGRAM example diff --git a/src/libmtime.f90 b/src/libmtime.f90 index be34111f81f066ed25e27ef6025a47c6a492907e..c777d023ff794b65c6b9aec9d9d974004d52eeca 100644 --- a/src/libmtime.f90 +++ b/src/libmtime.f90 @@ -3473,7 +3473,12 @@ contains SUBROUTINE finish_mtime_plain(leading_text, message_text) character(len=*), intent(in) :: leading_text character(len=*), intent(in) :: message_text - CALL finish_message(TRIM(leading_text), TRIM(message_text)) + IF (ASSOCIATED(finish_message)) THEN + CALL finish_message(TRIM(leading_text), TRIM(message_text)) + ELSE + WRITE (0,*) TRIM(leading_text), TRIM(message_text) + STOP + END IF END SUBROUTINE finish_mtime_plain !> !! @brief Print a datetime with associated text information by the provided callback function and finish program. diff --git a/src/libmtime_hl.f90 b/src/libmtime_hl.f90 index 475ed9233558e02a641332e91bf32a1e9bd14766..6a0d466d26d9ea35d9a470ce7d41cebd3fd65c53 100644 --- a/src/libmtime_hl.f90 +++ b/src/libmtime_hl.f90 @@ -150,12 +150,14 @@ contains !___________________________________________________________________________ ! auxiliary routine: handle error code. - SUBROUTINE handle_errno(errno, routine_str) + SUBROUTINE handle_errno(errno, routine_str, lineno) INTEGER, INTENT(IN) :: errno + INTEGER, INTENT(IN) :: lineno CHARACTER(LEN=*), INTENT(IN) :: routine_str CHARACTER(len=max_mtime_error_str_len) :: error_str IF (errno /= no_error) THEN CALL mtime_strerror(errno, error_str) + WRITE (error_str,'(a,a,i0)') TRIM(error_str), " :: line ", lineno CALL finish_mtime(routine_str, error_str) END IF END SUBROUTINE handle_errno @@ -172,7 +174,7 @@ contains type(datetime), pointer :: dt_tmp INTEGER :: errno dt_tmp => newdatetime(from%dt, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) to%dt = dt_tmp call deallocatedatetime(dt_tmp) end subroutine assign_t_datetime @@ -184,7 +186,7 @@ contains type(datetime), pointer :: dt_tmp INTEGER :: errno dt_tmp => newdatetime(dt_string, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) t_datetime_assign_string%dt = dt_tmp call deallocatedatetime(dt_tmp) end function t_datetime_assign_string @@ -205,9 +207,9 @@ contains type(datetime), pointer :: dt_tmp integer :: errno dt_tmp => newdatetime(this%dt, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) CALL datetimetostring(dt_tmp, t_datetime_to_string, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) CALL deallocatedatetime(dt_tmp) end function t_datetime_to_string @@ -220,9 +222,9 @@ contains type(datetime), pointer :: dt_tmp integer :: errno dt_tmp => newdatetime(this%dt, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) CALL datetimetoposixstring(dt_tmp, t_datetime_to_posix_string, format_string, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) CALL deallocatedatetime(dt_tmp) end function t_datetime_to_posix_string @@ -236,9 +238,9 @@ contains type(timedelta), pointer :: td_tmp INTEGER :: errno dt_tmp => newDatetime(this%dt, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) td_tmp => newTimedelta(td%td, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) dt_tmp = dt_tmp + td_tmp dt_td_sum%dt = dt_tmp call deallocateDatetime(dt_tmp) @@ -255,9 +257,9 @@ contains type(timedelta), pointer :: td_tmp INTEGER :: errno dt_tmp => newDatetime(this%dt, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) td_tmp => newTimedelta(td%td, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) if (td_tmp%sign == "+") then td_tmp%sign = "-" else @@ -327,7 +329,7 @@ contains type(timedelta), pointer :: td_tmp INTEGER :: errno td_tmp => newTimedelta(from%td, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) to%td = td_tmp to%td%sign = td_tmp%sign call deallocateTimedelta(td_tmp) @@ -340,7 +342,7 @@ contains type(timedelta), pointer :: td_tmp INTEGER :: errno td_tmp => newtimedelta(td_string, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) t_timedelta_assign_string%td = td_tmp t_timedelta_assign_string%td%sign = td_tmp%sign call deallocatetimedelta(td_tmp) @@ -354,9 +356,9 @@ contains character(len=max_timedelta_str_len) :: td_string INTEGER :: errno CALL getptstringfromms(INT(td_ms,i8), td_string, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) td_tmp => newtimedelta(td_string, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) t_timedelta_assign_ms%td = td_tmp t_timedelta_assign_ms%td%sign = td_tmp%sign call deallocatetimedelta(td_tmp) @@ -415,7 +417,7 @@ contains TYPE(timedelta), POINTER :: td_tmp, td_tmp2 INTEGER :: errno td_tmp => newtimedelta(this%td, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) td_tmp2 = td_tmp * lambda scaled_td%td = td_tmp2 scaled_td%td%sign = td_tmp2%sign @@ -430,7 +432,7 @@ contains TYPE(timedelta), POINTER :: td_tmp, td_tmp2 INTEGER :: errno td_tmp => newtimedelta(this%td, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) td_tmp2 = td_tmp * lambda scaled_td%td = td_tmp2 scaled_td%td%sign = td_tmp2%sign @@ -445,7 +447,7 @@ contains TYPE(timedelta), POINTER :: td_tmp, td_tmp2 INTEGER :: errno td_tmp => newtimedelta(this%td, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) td_tmp2 = td_tmp * lambda scaled_td%td = td_tmp2 scaled_td%td%sign = td_tmp2%sign @@ -460,7 +462,7 @@ contains TYPE(timedelta), POINTER :: td_tmp, td_tmp2 INTEGER :: errno td_tmp => newtimedelta(this%td, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) td_tmp2 = td_tmp * lambda scaled_td%td = td_tmp2 scaled_td%td%sign = td_tmp2%sign @@ -475,7 +477,7 @@ contains TYPE(timedelta), POINTER :: td_tmp, td_tmp2 INTEGER :: errno td_tmp => newtimedelta(this%td, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) td_tmp2 = td_tmp * lambda scaled_td%td = td_tmp2 scaled_td%td%sign = td_tmp2%sign @@ -490,7 +492,7 @@ contains TYPE(timedelta), POINTER :: td_tmp, td_tmp2 INTEGER :: errno td_tmp => newtimedelta(this%td, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) td_tmp2 = td_tmp * lambda scaled_td%td = td_tmp2 scaled_td%td%sign = td_tmp2%sign @@ -508,9 +510,9 @@ contains type(timedelta), pointer :: td_tmp INTEGER :: errno td_tmp => newtimedelta(this%td, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) CALL timedeltatostring(td_tmp, t_timedelta_to_string, errno) - CALL handle_errno(errno, __FILE__//"__LINE__") + CALL handle_errno(errno, __FILE__, __LINE__) call deallocatetimedelta(td_tmp) end function t_timedelta_to_string