anchor.diff:  
   version_string2tuple("2.7") -> {2,7};
   version_string2tuple("2.8") -> {2,8};
  +version_string2tuple("2.9") -> {2,9};
   version_string2tuple(_) -> unsupported.
   
   check_version(unsupported) ->
  
positive.code: 
  
  
      case Version of
          {2,8} -> [
              {"c_int", "enif_has_pending_exception", "env: *mut ErlNifEnv, reason: *mut ERL_NIF_TERM"},
              {"ERL_NIF_TERM", "enif_raise_exception", "env: *mut ErlNifEnv, reason: ERL_NIF_TERM"}
          ];
          _ -> []
      end ++
  
      case HasDirtySchedulers of
          true -> [{"c_int", "enif_is_on_dirty_scheduler", "env: *mut ErlNifEnv"}  ];
  
negative.code: %% the Windows callback struct keeps proper integrity.  Such functions
  %% must begin with "dummy."
  %%
  api_list(Version, Wordsize, HasDirtySchedulers)
    when Version =:= {2,7};
         Version =:= {2,8};
         Version =:= {2,9} -> [
  
      {"*mut c_void", "enif_priv_data", "arg1: *mut ErlNifEnv"},
      {"*mut c_void", "enif_alloc", "size: size_t"},
  