1
0
forked from aniani/vim

patch 8.1.1076: file for Insert mode is much too big

Problem:    File for Insert mode is much too big.
Solution:   Split off the code for Insert completion. (Yegappan Lakshmanan,
            closes #4044)
This commit is contained in:
Bram Moolenaar 2019-03-30 13:53:47 +01:00
parent de5b380042
commit 7591bb39d5
24 changed files with 4177 additions and 4024 deletions

View File

@ -48,6 +48,7 @@ SRC_ALL = \
src/hardcopy.c \
src/hashtab.c \
src/indent.c \
src/insexpand.c \
src/json.c \
src/json_test.c \
src/kword_test.c \
@ -175,6 +176,7 @@ SRC_ALL = \
src/proto/hardcopy.pro \
src/proto/hashtab.pro \
src/proto/indent.pro \
src/proto/insexpand.pro \
src/proto/json.pro \
src/proto/list.pro \
src/proto/main.pro \

View File

@ -534,6 +534,7 @@ vimobj = \
$(OBJDIR)\hardcopy.obj \
$(OBJDIR)\hashtab.obj \
$(OBJDIR)\indent.obj \
$(OBJDIR)\insexpand.obj \
$(OBJDIR)\json.obj \
$(OBJDIR)\list.obj \
$(OBJDIR)\main.obj \

View File

@ -721,6 +721,7 @@ OBJ = \
$(OUTDIR)/hardcopy.o \
$(OUTDIR)/hashtab.o \
$(OUTDIR)/indent.o \
$(OUTDIR)/insexpand.o \
$(OUTDIR)/json.o \
$(OUTDIR)/list.o \
$(OUTDIR)/main.o \

View File

@ -51,6 +51,7 @@ SRC = \
hardcopy.c \
hashtab.c \
indent.c \
insexpand.c \
json.c \
list.c \
main.c \
@ -110,6 +111,7 @@ OBJ = o/arabic.o \
o/hardcopy.o \
o/hashtab.o \
o/indent.o \
o/insexpand.o \
o/json.o \
o/list.o \
o/main.o \
@ -213,6 +215,8 @@ o/hashtab.o: hashtab.c $(SYMS)
o/indent.o: indent.c $(SYMS)
o/insexpand.o: insexpand.c $(SYMS)
o/json.o: json.c $(SYMS)
o/list.o: list.c $(SYMS)

View File

@ -235,6 +235,7 @@ LINK32_OBJS= \
"$(INTDIR)/hardcopy.obj" \
"$(INTDIR)/hashtab.obj" \
"$(INTDIR)/indent.obj" \
"$(INTDIR)/insexpand.obj" \
"$(INTDIR)/json.obj" \
"$(INTDIR)/list.obj" \
"$(INTDIR)/main.obj" \
@ -439,6 +440,10 @@ SOURCE=.\hashtab.c
SOURCE=.\indent.c
# End Source File
# Begin Source File
#
SOURCE=.\insexpand.c
# End Source File
# Begin Source File
SOURCE=.\gui.c

View File

@ -61,6 +61,7 @@ SRC = arabic.c \
hardcopy.c \
hashtab.c \
indent.c \
insexpand.c \
json.c \
list.c \
main.c \
@ -122,6 +123,7 @@ OBJ = obj/arabic.o \
obj/hardcopy.o \
obj/hashtab.o \
obj/indent.o \
obj/insexpand.o \
obj/json.o \
obj/list.o \
obj/main.o \
@ -181,6 +183,7 @@ PRO = proto/arabic.pro \
proto/hardcopy.pro \
proto/hashtab.pro \
proto/indent.pro \
proto/insexpand.pro \
proto/json.pro \
proto/list.pro \
proto/main.pro \
@ -335,6 +338,9 @@ obj/hashtab.o: hashtab.c
obj/indent.o: indent.c
$(CCSYM) $@ indent.c
obj/insexpand.o: insexpand.c
$(CCSYM) $@ insexpand.c
obj/json.o: json.c
$(CCSYM) $@ json.c

View File

@ -49,6 +49,7 @@ SRC = arabic.c \
hardcopy.c \
hashtab.c \
indent.c \
insexpand.c \
json.c \
list.c \
main.c \

View File

@ -725,6 +725,7 @@ OBJ = \
$(OUTDIR)\hardcopy.obj \
$(OUTDIR)\hashtab.obj \
$(OUTDIR)\indent.obj \
$(OUTDIR)\insexpand.obj \
$(OUTDIR)\json.obj \
$(OUTDIR)\list.obj \
$(OUTDIR)\main.obj \
@ -1416,6 +1417,8 @@ $(OUTDIR)/hashtab.obj: $(OUTDIR) hashtab.c $(INCL)
$(OUTDIR)/indent.obj: $(OUTDIR) indent.c $(INCL)
$(OUTDIR)/insexpand.obj: $(OUTDIR) insexpand.c $(INCL)
$(OUTDIR)/gui.obj: $(OUTDIR) gui.c $(INCL) $(GUI_INCL)
$(OUTDIR)/gui_beval.obj: $(OUTDIR) gui_beval.c $(INCL) $(GUI_INCL)
@ -1648,6 +1651,7 @@ proto.h: \
proto/hardcopy.pro \
proto/hashtab.pro \
proto/indent.pro \
proto/insexpand.pro \
proto/json.pro \
proto/list.pro \
proto/main.pro \

View File

@ -114,6 +114,7 @@ SRC = \
hardcopy.c \
hashtab.c \
indent.c \
insexpand.c \
json.c \
list.c \
main.c \
@ -174,6 +175,7 @@ OBJ = \
hardcopy.o \
hashtab.o \
indent.o \
insexpand.o \
json.o \
list.o \
main.o \
@ -234,6 +236,7 @@ PRO = \
proto/hardcopy.pro \
proto/hashtab.pro \
proto/indent.pro \
proto/insexpand.pro \
proto/json.pro \
proto/list.pro \
proto/main.pro \
@ -373,6 +376,8 @@ hashtab.o: hashtab.c
proto/hashtab.pro: hashtab.c
indent.o: indent.c
proto/indent.pro: indent.c
insexpand.o: insexpand.c
proto/insexpand.pro: insexpand.c
json.o: json.c
proto/json.pro: json.c
list.o: list.c

View File

@ -311,9 +311,9 @@ SRC = arabic.c autocmd.c beval.c blob.c blowfish.c buffer.c charset.c \
crypt.c crypt_zip.c dict.c diff.c digraph.c edit.c eval.c evalfunc.c \
ex_cmds.c ex_cmds2.c ex_docmd.c ex_eval.c ex_getln.c if_cscope.c \
if_xcmdsrv.c fileio.c findfile.c fold.c getchar.c hardcopy.c \
hashtab.c indent.c json.c list.c main.c mark.c menu.c mbyte.c \
memfile.c memline.c message.c misc1.c misc2.c move.c normal.c ops.c \
option.c popupmnu.c quickfix.c regexp.c search.c sha256.c sign.c \
hashtab.c indent.c insexpand.c json.c list.c main.c mark.c menu.c \
mbyte.c memfile.c memline.c message.c misc1.c misc2.c move.c normal.c \
ops.c option.c popupmnu.c quickfix.c regexp.c search.c sha256.c sign.c \
spell.c spellfile.c syntax.c tag.c term.c termlib.c textprop.c ui.c \
undo.c userfunc.c version.c screen.c window.c os_unix.c os_vms.c \
pathdef.c
@ -325,13 +325,13 @@ OBJ = arabic.obj autocmd.obj beval.obj blob.obj blowfish.obj buffer.obj \
edit.obj eval.obj evalfunc.obj ex_cmds.obj ex_cmds2.obj ex_docmd.obj \
ex_eval.obj ex_getln.obj if_cscope.obj if_xcmdsrv.obj \
fileio.obj findfile.obj fold.obj getchar.obj hardcopy.obj hashtab.obj \
indent.obj json.obj list.obj main.obj mark.obj menu.obj memfile.obj \
memline.obj message.obj misc1.obj misc2.obj move.obj mbyte.obj \
normal.obj ops.obj option.obj popupmnu.obj quickfix.obj regexp.obj \
search.obj sha256.obj sign.obj spell.obj spellfile.obj syntax.obj \
tag.obj term.obj termlib.obj textprop.obj ui.obj undo.obj \
userfunc.obj screen.obj version.obj window.obj os_unix.obj os_vms.obj \
pathdef.obj if_mzsch.obj \
indent.obj insexpand.obj json.obj list.obj main.obj mark.obj \
menu.obj memfile.obj memline.obj message.obj misc1.obj misc2.obj \
move.obj mbyte.obj normal.obj ops.obj option.obj popupmnu.obj \
quickfix.obj regexp.obj search.obj sha256.obj sign.obj spell.obj \
spellfile.obj syntax.obj tag.obj term.obj termlib.obj textprop.obj \
ui.obj undo.obj userfunc.obj screen.obj version.obj window.obj \
os_unix.obj os_vms.obj pathdef.obj if_mzsch.obj \
$(GUI_OBJ) $(PERL_OBJ) $(PYTHON_OBJ) $(TCL_OBJ) \
$(RUBY_OBJ) $(HANGULIN_OBJ) $(MZSCH_OBJ) $(XDIFF_OBJ)
@ -603,6 +603,7 @@ if_mzsch.obj : if_mzsch.c vim.h [.auto]config.h feature.h os_unix.h \
regexp.h gui.h beval.h [.proto]gui_beval.pro ex_cmds.h proto.h \
globals.h if_mzsch.h
indent.obj : indent.c vim.h [.auto]config.h feature.h os_unix.h
insexpand.obj : insexpand.c vim.h [.auto]config.h feature.h os_unix.h
json.obj : json.c vim.h [.auto]config.h feature.h os_unix.h \
ascii.h keymap.h term.h macros.h structs.h regexp.h gui.h beval.h \
[.proto]gui_beval.pro option.h ex_cmds.h proto.h globals.h \

View File

@ -1599,6 +1599,7 @@ BASIC_SRC = \
if_cscope.c \
if_xcmdsrv.c \
indent.c \
insexpand.c \
json.c \
list.c \
main.c \
@ -1713,6 +1714,7 @@ OBJ_COMMON = \
objects/if_cscope.o \
objects/if_xcmdsrv.o \
objects/indent.o \
objects/insexpand.o \
objects/list.o \
objects/mark.o \
objects/memline.o \
@ -1844,6 +1846,7 @@ PRO_AUTO = \
if_ruby.pro \
if_xcmdsrv.pro \
indent.pro \
insexpand.pro \
json.pro \
list.pro \
main.pro \
@ -3098,6 +3101,9 @@ objects/if_tcl.o: if_tcl.c
objects/indent.o: indent.c
$(CCC) -o $@ indent.c
objects/insexpand.o: insexpand.c
$(CCC) -o $@ insexpand.c
objects/json.o: json.c
$(CCC) -o $@ json.c
@ -3500,6 +3506,10 @@ objects/indent.o: indent.c vim.h protodef.h auto/config.h feature.h os_unix.h \
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
proto.h globals.h
objects/insexpand.o: insexpand.c vim.h protodef.h auto/config.h feature.h \
os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
proto.h globals.h
objects/json.o: json.c vim.h protodef.h auto/config.h feature.h os_unix.h \
auto/osdef.h ascii.h keymap.h term.h macros.h option.h beval.h \
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \

4020
src/edit.c

File diff suppressed because it is too large Load Diff

View File

@ -2603,7 +2603,7 @@ f_complete_check(typval_T *argvars UNUSED, typval_T *rettv)
RedrawingDisabled = 0;
ins_compl_check_keys(0, TRUE);
rettv->vval.v_number = compl_interrupted;
rettv->vval.v_number = ins_compl_interrupted();
RedrawingDisabled = saved;
}

View File

@ -119,10 +119,6 @@ EXTERN colnr_T dollar_vcol INIT(= -1);
* by the match.) */
EXTERN int compl_length INIT(= 0);
/* Set when character typed while looking for matches and it means we should
* stop looking for matches. */
EXTERN int compl_interrupted INIT(= FALSE);
/* List of flags for method of completion. */
EXTERN int compl_cont_status INIT(= 0);
# define CONT_ADDING 1 /* "normal" or "adding" expansion */

3992
src/insexpand.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1130,6 +1130,7 @@ free_all_mem(void)
free_search_patterns();
free_old_sub();
free_last_insert();
free_insexpand_stuff();
free_prev_shellcmd();
free_regexp_stuff();
free_tag_stuff();

View File

@ -89,6 +89,9 @@ extern int _stricoll(char *a, char *b);
# include "hardcopy.pro"
# include "hashtab.pro"
# include "indent.pro"
# ifdef FEAT_INS_EXPAND
# include "insexpand.pro"
# endif
# include "json.pro"
# include "list.pro"
# include "blob.pro"

View File

@ -1,5 +1,7 @@
/* edit.c */
int edit(int cmdchar, int startln, long count);
int ins_need_undo_get(void);
void ins_redraw(int ready);
void edit_putchar(int c, int highlight);
char_u *prompt_text(void);
int prompt_curpos_editable(void);
@ -8,23 +10,11 @@ void display_dollar(colnr_T col);
void change_indent(int type, int amount, int round, int replaced, int call_changed_bytes);
void truncate_spaces(char_u *line);
void backspace_until_column(int col);
int ctrl_x_mode_not_default(void);
int ctrl_x_mode_not_defined_yet(void);
int vim_is_ctrl_x_key(int c);
int ins_compl_add_infercase(char_u *str, int len, int icase, char_u *fname, int dir, int flags);
void completeopt_was_set(void);
void set_completion(colnr_T startcol, list_T *list);
void ins_compl_show_pum(void);
char_u *find_word_start(char_u *ptr);
char_u *find_word_end(char_u *ptr);
int ins_compl_active(void);
void get_complete_info(list_T *what_list, dict_T *retdict);
int ins_compl_add_tv(typval_T *tv, int dir);
void ins_compl_check_keys(int frequency, int in_compl_func);
int get_literal(void);
void insertchar(int c, int flags, int second_indent);
void auto_format(int trailblank, int prev_line);
int comp_textwidth(int ff);
void start_arrow(pos_T *end_insert_pos);
int stop_arrow(void);
void set_last_insert(int c);
void free_last_insert(void);
@ -43,6 +33,9 @@ int hkmap(int c);
int bracketed_paste(paste_mode_T mode, int drop, garray_T *gap);
void ins_scroll(void);
void ins_horscroll(void);
int ins_eol(int c);
int ins_copychar(linenr_T lnum);
colnr_T get_nolist_virtcol(void);
int can_cindent_get(void);
int ins_apply_autocmds(event_T event);
/* vim: set ft=c : */

50
src/proto/insexpand.pro Normal file
View File

@ -0,0 +1,50 @@
/* insexpand.c */
void ins_ctrl_x(void);
int ctrl_x_mode_none(void);
int ctrl_x_mode_normal(void);
int ctrl_x_mode_scroll(void);
int ctrl_x_mode_whole_line(void);
int ctrl_x_mode_files(void);
int ctrl_x_mode_tags(void);
int ctrl_x_mode_path_patterns(void);
int ctrl_x_mode_path_defines(void);
int ctrl_x_mode_dictionary(void);
int ctrl_x_mode_thesaurus(void);
int ctrl_x_mode_cmdline(void);
int ctrl_x_mode_function(void);
int ctrl_x_mode_omni(void);
int ctrl_x_mode_spell(void);
int ctrl_x_mode_line_or_eval(void);
int ctrl_x_mode_not_default(void);
int ctrl_x_mode_not_defined_yet(void);
int has_compl_option(int dict_opt);
int vim_is_ctrl_x_key(int c);
int ins_compl_accept_char(int c);
int ins_compl_add_infercase(char_u *str, int len, int icase, char_u *fname, int dir, int flags);
int ins_compl_has_shown_match(void);
int ins_compl_long_shown_match(void);
void completeopt_was_set(void);
void set_completion(colnr_T startcol, list_T *list);
int pum_wanted(void);
void ins_compl_show_pum(void);
char_u *find_word_start(char_u *ptr);
char_u *find_word_end(char_u *ptr);
void ins_compl_clear(void);
int ins_compl_active(void);
void get_complete_info(list_T *what_list, dict_T *retdict);
int ins_compl_used_match(void);
void ins_compl_init_get_longest(void);
int ins_compl_interrupted(void);
int ins_compl_enter_selects(void);
colnr_T ins_compl_col(void);
int ins_compl_bs(void);
void ins_compl_addleader(int c);
void ins_compl_addfrommatch(void);
int ins_compl_prep(int c);
int ins_compl_add_tv(typval_T *tv, int dir);
void ins_compl_delete(void);
void ins_compl_insert(int in_compl_func);
void ins_compl_check_keys(int frequency, int in_compl_func);
int ins_complete(int c, int enable_pum);
void free_insexpand_stuff(void);
/* vim: set ft=c : */

View File

@ -5479,7 +5479,7 @@ exit_matched:
#ifdef FEAT_INS_EXPAND
if (action == ACTION_EXPAND)
ins_compl_check_keys(30, FALSE);
if (got_int || compl_interrupted)
if (got_int || ins_compl_interrupted())
#else
if (got_int)
#endif
@ -5550,7 +5550,7 @@ exit_matched:
)
{
#ifdef FEAT_INS_EXPAND
if (got_int || compl_interrupted)
if (got_int || ins_compl_interrupted())
#else
if (got_int)
#endif

View File

@ -8473,7 +8473,7 @@ spell_dump_compl(
arridx[0] = 0;
curi[0] = 1;
while (depth >= 0 && !got_int
&& (pat == NULL || !compl_interrupted))
&& (pat == NULL || !ins_compl_interrupted()))
{
if (curi[depth] > byts[arridx[depth]])
{

View File

@ -1191,36 +1191,36 @@ typedef long_u hash_T; /* Type for hi_hash */
# ifdef PROTO
typedef long varnumber_T;
typedef unsigned long uvarnumber_T;
#define VARNUM_MIN LONG_MIN
#define VARNUM_MAX LONG_MAX
#define UVARNUM_MAX ULONG_MAX
# define VARNUM_MIN LONG_MIN
# define VARNUM_MAX LONG_MAX
# define UVARNUM_MAX ULONG_MAX
# else
typedef __int64 varnumber_T;
typedef unsigned __int64 uvarnumber_T;
#define VARNUM_MIN _I64_MIN
#define VARNUM_MAX _I64_MAX
#define UVARNUM_MAX _UI64_MAX
# define VARNUM_MIN _I64_MIN
# define VARNUM_MAX _I64_MAX
# define UVARNUM_MAX _UI64_MAX
# endif
# elif defined(HAVE_STDINT_H)
typedef int64_t varnumber_T;
typedef uint64_t uvarnumber_T;
#define VARNUM_MIN INT64_MIN
#define VARNUM_MAX INT64_MAX
#define UVARNUM_MAX UINT64_MAX
# define VARNUM_MIN INT64_MIN
# define VARNUM_MAX INT64_MAX
# define UVARNUM_MAX UINT64_MAX
# else
typedef long varnumber_T;
typedef unsigned long uvarnumber_T;
#define VARNUM_MIN LONG_MIN
#define VARNUM_MAX LONG_MAX
#define UVARNUM_MAX ULONG_MAX
# define VARNUM_MIN LONG_MIN
# define VARNUM_MAX LONG_MAX
# define UVARNUM_MAX ULONG_MAX
# endif
#else
/* Use 32-bit Number. */
typedef int varnumber_T;
typedef unsigned int uvarnumber_T;
#define VARNUM_MIN INT_MIN
#define VARNUM_MAX INT_MAX
#define UVARNUM_MAX UINT_MAX
# define VARNUM_MIN INT_MIN
# define VARNUM_MAX INT_MAX
# define UVARNUM_MAX UINT_MAX
#endif
typedef double float_T;
@ -3340,16 +3340,6 @@ typedef struct
void *tn_search_ctx;
} tagname_T;
/*
* Array indexes used for cptext argument of ins_compl_add().
*/
#define CPT_ABBR 0 /* "abbr" */
#define CPT_MENU 1 /* "menu" */
#define CPT_KIND 2 /* "kind" */
#define CPT_INFO 3 /* "info" */
#define CPT_USER_DATA 4 /* "user data" */
#define CPT_COUNT 5 /* Number of entries */
typedef struct {
UINT32_T total[2];
UINT32_T state[8];

View File

@ -1591,7 +1591,7 @@ find_tags(
#ifdef FEAT_INS_EXPAND
if ((flags & TAG_INS_COMP)) /* Double brackets for gcc */
ins_compl_check_keys(30, FALSE);
if (got_int || compl_interrupted)
if (got_int || ins_compl_interrupted())
#else
if (got_int)
#endif

View File

@ -775,6 +775,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1076,
/**/
1075,
/**/