add_err Subroutine

private subroutine add_err(errors, n_err, msg)

Append a message to a growable error list.

Arguments

Type IntentOptional Attributes Name
character(len=:), intent(inout), allocatable :: errors(:)
integer, intent(inout) :: n_err
character(len=*), intent(in) :: msg

Called by

proc~~add_err~~CalledByGraph proc~add_err add_err proc~apply_one_pair apply_one_pair proc~apply_one_pair->proc~add_err proc~check_unsupported check_unsupported proc~check_unsupported->proc~add_err proc~collect_tokens collect_tokens proc~collect_tokens->proc~add_err proc~collect_tokens->proc~check_unsupported proc~dispatch_group dispatch_group proc~dispatch_group->proc~add_err proc~parse_group_body parse_group_body proc~dispatch_group->proc~parse_group_body proc~parse_file parse_file proc~parse_file->proc~add_err proc~parse_from_lines parse_from_lines proc~parse_file->proc~parse_from_lines proc~parse_from_lines->proc~add_err proc~parse_from_lines->proc~dispatch_group proc~post_parse_validate post_parse_validate proc~post_parse_validate->proc~add_err proc~parse_group_body->proc~apply_one_pair proc~parse_group_body->proc~collect_tokens proc~schema_parse nml_schema_t%schema_parse proc~schema_parse->proc~parse_file proc~schema_parse->proc~post_parse_validate proc~schema_parse_lines nml_schema_t%schema_parse_lines proc~schema_parse_lines->proc~parse_from_lines proc~schema_parse_lines->proc~post_parse_validate proc~read_config_from_string_impl read_config_from_string_impl proc~read_config_from_string_impl->proc~schema_parse_lines proc~read_config_impl read_config_impl proc~read_config_impl->proc~schema_parse proc~read_config read_config proc~read_config->proc~read_config_impl proc~read_config_from_string read_config_from_string proc~read_config_from_string->proc~read_config_from_string_impl proc~build_pending_handle build_pending_handle proc~build_pending_handle->proc~read_config_from_string

Variables

Type Visibility Attributes Name Initial
integer, private :: cap
integer, private :: i
integer, private :: newlen
character(len=:), private, allocatable :: tmp(:)

Source Code

   subroutine add_err(errors, n_err, msg)
      !! Append a message to a growable error list.
      character(len=:), allocatable, intent(inout) :: errors(:)
      integer, intent(inout) :: n_err
      character(len=*), intent(in) :: msg
      character(len=:), allocatable :: tmp(:)
      integer :: cap, newlen, i

      if (.not. allocated(errors)) allocate (character(len=256) :: errors(8))
      cap = size(errors)
      if (n_err >= cap .or. len(msg) > len(errors)) then
         newlen = max(len(errors), len(msg))
         allocate (character(len=newlen) :: tmp(max(2*cap, n_err + 1)))
         do i = 1, n_err
            tmp(i) = errors(i)
         end do
         call move_alloc(tmp, errors)
      end if
      n_err = n_err + 1
      errors(n_err) = msg
   end subroutine add_err