updated for version 7.0067
This commit is contained in:
@ -370,6 +370,8 @@ CClink = $(CC)
|
||||
|
||||
# PYTHON
|
||||
# Uncomment this when you want to include the Python interface.
|
||||
# NOTE: This may cause threading to be enabled, which has side effects (such
|
||||
# as using different libraries and debugging becomes more difficult).
|
||||
#CONF_OPT_PYTHON = --enable-pythoninterp
|
||||
|
||||
# TCL
|
||||
@ -1810,7 +1812,11 @@ installtutor: $(DEST_VIM) $(DEST_RT) $(DEST_TUTOR)
|
||||
|
||||
# Install the spell files, if they exist.
|
||||
installspell: $(DEST_VIM) $(DEST_RT) $(DEST_SPELL)
|
||||
if test -f $(SPELLSOURCE)/en.spl; then \
|
||||
if test -f $(SPELLSOURCE)/en.latin1.spl; then \
|
||||
$(INSTALL_DATA) $(SPELLSOURCE)/*.spl $(DEST_SPELL); \
|
||||
chmod $(HELPMOD) $(DEST_SPELL)/*.spl; \
|
||||
fi
|
||||
if test -f $(SPELLSOURCE)/en.utf-8.spl; then \
|
||||
$(INSTALL_DATA) $(SPELLSOURCE)/*.spl $(DEST_SPELL); \
|
||||
chmod $(HELPMOD) $(DEST_SPELL)/*.spl; \
|
||||
fi
|
||||
|
||||
@ -1297,7 +1297,7 @@ EXTERN char_u e_invexpr2[] INIT(=N_("E15: Invalid expression: %s"));
|
||||
#endif
|
||||
EXTERN char_u e_invrange[] INIT(=N_("E16: Invalid range"));
|
||||
EXTERN char_u e_invcmd[] INIT(=N_("E476: Invalid command"));
|
||||
#ifdef UNIX
|
||||
#if defined(UNIX) || (defined(FEAT_SYN_HL) && defined(FEAT_MBYTE))
|
||||
EXTERN char_u e_isadir2[] INIT(=N_("E17: \"%s\" is a directory"));
|
||||
#endif
|
||||
#ifdef FEAT_LIBCALL
|
||||
|
||||
@ -32,7 +32,10 @@
|
||||
#if defined(FEAT_EVAL) || defined(FEAT_SYN_HL) || defined(PROTO)
|
||||
|
||||
#if 0
|
||||
# define HT_DEBUG /* extra checks for table consistency */
|
||||
# define HT_DEBUG /* extra checks for table consistency and statistics */
|
||||
|
||||
static long hash_count_lookup = 0; /* count number of hashtab lookups */
|
||||
static long hash_count_perturb = 0; /* count number of "misses" */
|
||||
#endif
|
||||
|
||||
/* Magic value for algorithm that walks through the array. */
|
||||
@ -40,7 +43,7 @@
|
||||
|
||||
static int hash_may_resize __ARGS((hashtab_T *ht, int minitems));
|
||||
|
||||
#if defined(FEAT_SYN_HL) || defined(PROTO)
|
||||
#if 0 /* currently not used */
|
||||
/*
|
||||
* Create an empty hash table.
|
||||
* Returns NULL when out of memory.
|
||||
@ -112,6 +115,10 @@ hash_lookup(ht, key, hash)
|
||||
hashitem_T *hi;
|
||||
int idx;
|
||||
|
||||
#ifdef HT_DEBUG
|
||||
++hash_count_lookup;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Quickly handle the most common situations:
|
||||
* - return if there is no item at all
|
||||
@ -141,6 +148,9 @@ hash_lookup(ht, key, hash)
|
||||
*/
|
||||
for (perturb = hash; ; perturb >>= PERTURB_SHIFT)
|
||||
{
|
||||
#ifdef HT_DEBUG
|
||||
++hash_count_perturb; /* count a "miss" for hashtab lookup */
|
||||
#endif
|
||||
idx = (idx << 2) + idx + perturb + 1;
|
||||
hi = &ht->ht_array[idx & ht->ht_mask];
|
||||
if (hi->hi_key == NULL)
|
||||
@ -154,6 +164,23 @@ hash_lookup(ht, key, hash)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Print the efficiency of hashtable lookups.
|
||||
* Useful when trying different hash algorithms.
|
||||
* Called when exiting.
|
||||
*/
|
||||
void
|
||||
hash_debug_results()
|
||||
{
|
||||
#ifdef HT_DEBUG
|
||||
fprintf(stderr, "\r\n\r\n\r\n\r\n");
|
||||
fprintf(stderr, "Number of hashtable lookups: %ld\r\n", hash_count_lookup);
|
||||
fprintf(stderr, "Number of perturb loops: %ld\r\n", hash_count_perturb);
|
||||
fprintf(stderr, "Percentage of perturb loops: %ld%%\r\n",
|
||||
hash_count_perturb * 100 / hash_count_lookup);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Add item with key "key" to hashtable "ht".
|
||||
* Returns FAIL when out of memory or the key is already present.
|
||||
@ -332,7 +359,7 @@ hash_may_resize(ht, minitems)
|
||||
else
|
||||
{
|
||||
/* Use specified size. */
|
||||
if (minitems < ht->ht_used) /* just in case... */
|
||||
if ((long_u)minitems < ht->ht_used) /* just in case... */
|
||||
minitems = ht->ht_used;
|
||||
minsize = minitems * 3 / 2; /* array is up to 2/3 full */
|
||||
}
|
||||
@ -420,16 +447,28 @@ hash_may_resize(ht, minitems)
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the hash number for a key. Uses the ElfHash algorithm, which is
|
||||
* supposed to have an even distribution (suggested by Charles Campbell).
|
||||
* Get the hash number for a key.
|
||||
* If you think you know a better hash function: Compile with HT_DEBUG set and
|
||||
* run a script that uses hashtables a lot. Vim will then print statistics
|
||||
* when exiting. Try that with the current hash algorithm and yours. The
|
||||
* lower the percentage the better.
|
||||
*/
|
||||
hash_T
|
||||
hash_hash(key)
|
||||
char_u *key;
|
||||
{
|
||||
hash_T hash = 0;
|
||||
hash_T hash;
|
||||
char_u *p;
|
||||
|
||||
if ((hash = *key) == 0)
|
||||
return (hash_T)0; /* Empty keys are not allowed, but we don't
|
||||
want to crash if we get one. */
|
||||
p = key + 1;
|
||||
|
||||
#if 0
|
||||
/* ElfHash algorithm, which is supposed to have an even distribution.
|
||||
* Suggested by Charles Campbell. */
|
||||
hash_T g;
|
||||
char_u *p = key;
|
||||
|
||||
while (*p != NUL)
|
||||
{
|
||||
@ -438,6 +477,13 @@ hash_hash(key)
|
||||
if (g != 0)
|
||||
hash ^= g >> 24; /* xor g's high 4 bits into hash */
|
||||
}
|
||||
#else
|
||||
|
||||
/* A simplistic algorithm that appears to do very well.
|
||||
* Suggested by George Reilly. */
|
||||
while (*p != NUL)
|
||||
hash = hash * 101 + *p++;
|
||||
#endif
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
@ -115,6 +115,8 @@ struct PyMethodDef { int a; };
|
||||
# define Py_FindMethod dll_Py_FindMethod
|
||||
# define Py_InitModule4 dll_Py_InitModule4
|
||||
# define Py_Initialize dll_Py_Initialize
|
||||
# define Py_Finalize dll_Py_Finalize
|
||||
# define Py_IsInitialized dll_Py_IsInitialized
|
||||
# define _PyObject_New dll__PyObject_New
|
||||
# define _Py_NoneStruct (*dll__Py_NoneStruct)
|
||||
# define PyObject_Init dll__PyObject_Init
|
||||
@ -169,6 +171,8 @@ static PyObject*(*dll_Py_BuildValue)(char *, ...);
|
||||
static PyObject*(*dll_Py_FindMethod)(struct PyMethodDef[], PyObject *, char *);
|
||||
static PyObject*(*dll_Py_InitModule4)(char *, struct PyMethodDef *, char *, PyObject *, int);
|
||||
static void(*dll_Py_Initialize)(void);
|
||||
static void(*dll_Py_Finalize)(void);
|
||||
static int(*dll_Py_IsInitialized)(void);
|
||||
static PyObject*(*dll__PyObject_New)(PyTypeObject *, PyObject *);
|
||||
static PyObject*(*dll__PyObject_Init)(PyObject *, PyTypeObject *);
|
||||
static PyObject* dll__Py_NoneStruct;
|
||||
@ -245,6 +249,8 @@ static struct
|
||||
{"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod},
|
||||
{"Py_InitModule4", (PYTHON_PROC*)&dll_Py_InitModule4},
|
||||
{"Py_Initialize", (PYTHON_PROC*)&dll_Py_Initialize},
|
||||
{"Py_Finalize", (PYTHON_PROC*)&dll_Py_Finalize},
|
||||
{"Py_IsInitialized", (PYTHON_PROC*)&dll_Py_IsInitialized},
|
||||
{"_PyObject_New", (PYTHON_PROC*)&dll__PyObject_New},
|
||||
{"PyObject_Init", (PYTHON_PROC*)&dll__PyObject_Init},
|
||||
{"_Py_NoneStruct", (PYTHON_PROC*)&dll__Py_NoneStruct},
|
||||
@ -423,7 +429,12 @@ static void Python_Release_Vim(void)
|
||||
python_end()
|
||||
{
|
||||
#ifdef DYNAMIC_PYTHON
|
||||
if (hinstPython && Py_IsInitialized())
|
||||
Py_Finalize();
|
||||
end_dynamic_python();
|
||||
#else
|
||||
if (Py_IsInitialized())
|
||||
Py_Finalize();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
#include "vim.h"
|
||||
|
||||
#ifdef SPAWNO
|
||||
# include <spawno.h> /* special MSDOS swapping library */
|
||||
# include <spawno.h> /* special MS-DOS swapping library */
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_FCNTL_H
|
||||
@ -2312,6 +2312,11 @@ getout(exitval)
|
||||
#endif
|
||||
windgoto((int)Rows - 1, 0);
|
||||
|
||||
#if defined(FEAT_EVAL) || defined(FEAT_SYN_HL)
|
||||
/* Optionally print hashtable efficiency. */
|
||||
hash_debug_results();
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_GUI
|
||||
msg_didany = FALSE;
|
||||
#endif
|
||||
|
||||
@ -4,6 +4,7 @@ void hash_init __ARGS((hashtab_T *ht));
|
||||
void hash_clear __ARGS((hashtab_T *ht));
|
||||
hashitem_T *hash_find __ARGS((hashtab_T *ht, char_u *key));
|
||||
hashitem_T *hash_lookup __ARGS((hashtab_T *ht, char_u *key, hash_T hash));
|
||||
void hash_debug_results __ARGS((void));
|
||||
int hash_add __ARGS((hashtab_T *ht, char_u *key));
|
||||
int hash_add_item __ARGS((hashtab_T *ht, hashitem_T *hi, char_u *key, hash_T hash));
|
||||
void hash_remove __ARGS((hashtab_T *ht, hashitem_T *hi));
|
||||
|
||||
@ -36,5 +36,5 @@
|
||||
#define VIM_VERSION_NODOT "vim70aa"
|
||||
#define VIM_VERSION_SHORT "7.0aa"
|
||||
#define VIM_VERSION_MEDIUM "7.0aa ALPHA"
|
||||
#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0aa ALPHA (2005 Apr 15)"
|
||||
#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0aa ALPHA (2005 Apr 15, compiled "
|
||||
#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0aa ALPHA (2005 Apr 17)"
|
||||
#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0aa ALPHA (2005 Apr 17, compiled "
|
||||
|
||||
Reference in New Issue
Block a user