mirror of
https://github.com/macvim-dev/macvim.git
synced 2026-06-11 15:37:29 +02:00
Merge remote-tracking branch 'vim/master'
This commit is contained in:
@@ -23,6 +23,7 @@ SRC_ALL = \
|
||||
src/digraph.c \
|
||||
src/edit.c \
|
||||
src/eval.c \
|
||||
src/evalfunc.c \
|
||||
src/ex_cmds.c \
|
||||
src/ex_cmds.h \
|
||||
src/ex_cmds2.c \
|
||||
@@ -84,6 +85,7 @@ SRC_ALL = \
|
||||
src/termlib.c \
|
||||
src/ui.c \
|
||||
src/undo.c \
|
||||
src/userfunc.c \
|
||||
src/version.c \
|
||||
src/version.h \
|
||||
src/vim.h \
|
||||
@@ -133,6 +135,7 @@ SRC_ALL = \
|
||||
src/proto/digraph.pro \
|
||||
src/proto/edit.pro \
|
||||
src/proto/eval.pro \
|
||||
src/proto/evalfunc.pro \
|
||||
src/proto/ex_cmds.pro \
|
||||
src/proto/ex_cmds2.pro \
|
||||
src/proto/ex_docmd.pro \
|
||||
@@ -175,6 +178,7 @@ SRC_ALL = \
|
||||
src/proto/termlib.pro \
|
||||
src/proto/ui.pro \
|
||||
src/proto/undo.pro \
|
||||
src/proto/userfunc.pro \
|
||||
src/proto/version.pro \
|
||||
src/proto/winclip.pro \
|
||||
src/proto/window.pro \
|
||||
|
||||
@@ -543,10 +543,12 @@ vimobj = \
|
||||
$(OBJDIR)\charset.obj \
|
||||
$(OBJDIR)\crypt.obj \
|
||||
$(OBJDIR)\crypt_zip.obj \
|
||||
$(OBJDIR)\dict.obj \
|
||||
$(OBJDIR)\diff.obj \
|
||||
$(OBJDIR)\digraph.obj \
|
||||
$(OBJDIR)\edit.obj \
|
||||
$(OBJDIR)\eval.obj \
|
||||
$(OBJDIR)\evalfunc.obj \
|
||||
$(OBJDIR)\ex_cmds.obj \
|
||||
$(OBJDIR)\ex_cmds2.obj \
|
||||
$(OBJDIR)\ex_docmd.obj \
|
||||
@@ -559,6 +561,7 @@ vimobj = \
|
||||
$(OBJDIR)\hardcopy.obj \
|
||||
$(OBJDIR)\hashtab.obj \
|
||||
$(OBJDIR)\json.obj \
|
||||
$(OBJDIR)\list.obj \
|
||||
$(OBJDIR)\main.obj \
|
||||
$(OBJDIR)\mark.obj \
|
||||
$(OBJDIR)\memfile.obj \
|
||||
@@ -584,6 +587,7 @@ vimobj = \
|
||||
$(OBJDIR)\term.obj \
|
||||
$(OBJDIR)\ui.obj \
|
||||
$(OBJDIR)\undo.obj \
|
||||
$(OBJDIR)\userfunc.obj \
|
||||
$(OBJDIR)\version.obj \
|
||||
$(OBJDIR)\window.obj \
|
||||
$(OBJDIR)\pathdef.obj
|
||||
|
||||
@@ -610,10 +610,12 @@ OBJ = \
|
||||
$(OUTDIR)/charset.o \
|
||||
$(OUTDIR)/crypt.o \
|
||||
$(OUTDIR)/crypt_zip.o \
|
||||
$(OUTDIR)/dict.o \
|
||||
$(OUTDIR)/diff.o \
|
||||
$(OUTDIR)/digraph.o \
|
||||
$(OUTDIR)/edit.o \
|
||||
$(OUTDIR)/eval.o \
|
||||
$(OUTDIR)/evalfunc.o \
|
||||
$(OUTDIR)/ex_cmds.o \
|
||||
$(OUTDIR)/ex_cmds2.o \
|
||||
$(OUTDIR)/ex_docmd.o \
|
||||
@@ -626,6 +628,7 @@ OBJ = \
|
||||
$(OUTDIR)/hardcopy.o \
|
||||
$(OUTDIR)/hashtab.o \
|
||||
$(OUTDIR)/json.o \
|
||||
$(OUTDIR)/list.o \
|
||||
$(OUTDIR)/main.o \
|
||||
$(OUTDIR)/mark.o \
|
||||
$(OUTDIR)/memfile.o \
|
||||
@@ -655,6 +658,7 @@ OBJ = \
|
||||
$(OUTDIR)/term.o \
|
||||
$(OUTDIR)/ui.o \
|
||||
$(OUTDIR)/undo.o \
|
||||
$(OUTDIR)/userfunc.o \
|
||||
$(OUTDIR)/version.o \
|
||||
$(OUTDIR)/vimrc.o \
|
||||
$(OUTDIR)/window.o
|
||||
|
||||
+19
-3
@@ -32,10 +32,12 @@ SRC = \
|
||||
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 \
|
||||
@@ -48,6 +50,7 @@ SRC = \
|
||||
hardcopy.c \
|
||||
hashtab.c \
|
||||
json.c \
|
||||
list.c \
|
||||
main.c \
|
||||
mark.c \
|
||||
memfile.c \
|
||||
@@ -74,6 +77,7 @@ SRC = \
|
||||
term.c \
|
||||
ui.c \
|
||||
undo.c \
|
||||
userfunc.c \
|
||||
window.c \
|
||||
version.c
|
||||
|
||||
@@ -83,10 +87,12 @@ OBJ = o/arabic.o \
|
||||
o/charset.o \
|
||||
o/crypt.o \
|
||||
o/crypt_zip.o \
|
||||
o/dict.o \
|
||||
o/diff.o \
|
||||
o/digraph.o \
|
||||
o/edit.o \
|
||||
o/eval.o \
|
||||
o/evalfunc.o \
|
||||
o/ex_cmds.o \
|
||||
o/ex_cmds2.o \
|
||||
o/ex_docmd.o \
|
||||
@@ -99,6 +105,7 @@ OBJ = o/arabic.o \
|
||||
o/hardcopy.o \
|
||||
o/hashtab.o \
|
||||
o/json.o \
|
||||
o/list.o \
|
||||
o/main.o \
|
||||
o/mark.o \
|
||||
o/memfile.o \
|
||||
@@ -125,6 +132,7 @@ OBJ = o/arabic.o \
|
||||
o/term.o \
|
||||
o/ui.o \
|
||||
o/undo.o \
|
||||
o/userfunc.o \
|
||||
o/window.o \
|
||||
$(TERMLIB)
|
||||
|
||||
@@ -159,6 +167,8 @@ o/crypt.o: crypt.c $(SYMS)
|
||||
|
||||
o/crypt_zip.o: crypt_zip.c $(SYMS)
|
||||
|
||||
o/dict.o: dict.c $(SYMS)
|
||||
|
||||
o/diff.o: diff.c $(SYMS)
|
||||
|
||||
o/digraph.o: digraph.c $(SYMS)
|
||||
@@ -167,6 +177,8 @@ o/edit.o: edit.c $(SYMS)
|
||||
|
||||
o/eval.o: eval.c $(SYMS)
|
||||
|
||||
o/evalfunc.o: evalfunc.c $(SYMS)
|
||||
|
||||
o/ex_cmds.o: ex_cmds.c $(SYMS)
|
||||
|
||||
o/ex_cmds2.o: ex_cmds2.c $(SYMS)
|
||||
@@ -191,6 +203,8 @@ o/hashtab.o: hashtab.c $(SYMS)
|
||||
|
||||
o/json.o: json.c $(SYMS)
|
||||
|
||||
o/list.o: list.c $(SYMS)
|
||||
|
||||
o/main.o: main.c $(SYMS)
|
||||
|
||||
o/mark.o: mark.c $(SYMS)
|
||||
@@ -246,8 +260,10 @@ o/term.o: term.c $(SYMS) term.h
|
||||
|
||||
o/termlib.o: termlib.c $(SYMS)
|
||||
|
||||
o/ui.o: ui.c $(SYMS)
|
||||
o/ui.o: ui.c $(SYMS)
|
||||
|
||||
o/undo.o: undo.c $(SYMS)
|
||||
o/undo.o: undo.c $(SYMS)
|
||||
|
||||
o/window.o: window.c $(SYMS)
|
||||
o/userfunc.o: userfunc.c $(SYMS)
|
||||
|
||||
o/window.o: window.c $(SYMS)
|
||||
|
||||
@@ -216,10 +216,12 @@ LINK32_OBJS= \
|
||||
"$(INTDIR)/charset.obj" \
|
||||
"$(INTDIR)/crypt.obj" \
|
||||
"$(INTDIR)/crypt_zip.obj" \
|
||||
"$(INTDIR)/dict.obj" \
|
||||
"$(INTDIR)/diff.obj" \
|
||||
"$(INTDIR)/digraph.obj" \
|
||||
"$(INTDIR)/edit.obj" \
|
||||
"$(INTDIR)/eval.obj" \
|
||||
"$(INTDIR)/evalfunc.obj" \
|
||||
"$(INTDIR)/ex_cmds.obj" \
|
||||
"$(INTDIR)/ex_cmds2.obj" \
|
||||
"$(INTDIR)/ex_docmd.obj" \
|
||||
@@ -232,6 +234,7 @@ LINK32_OBJS= \
|
||||
"$(INTDIR)/hardcopy.obj" \
|
||||
"$(INTDIR)/hashtab.obj" \
|
||||
"$(INTDIR)/json.obj" \
|
||||
"$(INTDIR)/list.obj" \
|
||||
"$(INTDIR)/main.obj" \
|
||||
"$(INTDIR)/mark.obj" \
|
||||
"$(INTDIR)/mbyte.obj" \
|
||||
@@ -260,6 +263,7 @@ LINK32_OBJS= \
|
||||
"$(INTDIR)/term.obj" \
|
||||
"$(INTDIR)/ui.obj" \
|
||||
"$(INTDIR)/undo.obj" \
|
||||
"$(INTDIR)/userfunc.obj" \
|
||||
"$(INTDIR)/version.obj" \
|
||||
"$(INTDIR)/window.obj"
|
||||
|
||||
@@ -356,6 +360,10 @@ SOURCE=.\crypt_zip.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\dict.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\diff.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -372,6 +380,10 @@ SOURCE=.\eval.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\evalfunc.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ex_cmds.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -570,6 +582,10 @@ SOURCE=.\json.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\list.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\main.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -682,6 +698,10 @@ SOURCE=.\undo.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\userfunc.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\version.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
@@ -42,10 +42,12 @@ SRC = arabic.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 \
|
||||
@@ -58,6 +60,7 @@ SRC = arabic.c \
|
||||
hardcopy.c \
|
||||
hashtab.c \
|
||||
json.c \
|
||||
list.c \
|
||||
main.c \
|
||||
mark.c \
|
||||
memfile.c \
|
||||
@@ -84,6 +87,7 @@ SRC = arabic.c \
|
||||
term.c \
|
||||
ui.c \
|
||||
undo.c \
|
||||
userfunc.c \
|
||||
window.c \
|
||||
version.c
|
||||
|
||||
@@ -95,10 +99,12 @@ OBJ = obj/arabic.o \
|
||||
obj/charset.o \
|
||||
obj/crypt.o \
|
||||
obj/crypt_zip.o \
|
||||
obj/dict.o \
|
||||
obj/diff.o \
|
||||
obj/digraph.o \
|
||||
obj/edit.o \
|
||||
obj/eval.o \
|
||||
obj/evalfunc.o \
|
||||
obj/ex_cmds.o \
|
||||
obj/ex_cmds2.o \
|
||||
obj/ex_docmd.o \
|
||||
@@ -111,6 +117,7 @@ OBJ = obj/arabic.o \
|
||||
obj/hardcopy.o \
|
||||
obj/hashtab.o \
|
||||
obj/json.o \
|
||||
obj/list.o \
|
||||
obj/main.o \
|
||||
obj/mark.o \
|
||||
obj/memfile.o \
|
||||
@@ -137,6 +144,7 @@ OBJ = obj/arabic.o \
|
||||
obj/term.o \
|
||||
obj/ui.o \
|
||||
obj/undo.o \
|
||||
obj/userfunc.o \
|
||||
obj/window.o \
|
||||
$(TERMLIB)
|
||||
|
||||
@@ -146,10 +154,12 @@ PRO = proto/arabic.pro \
|
||||
proto/charset.pro \
|
||||
proto/crypt.pro \
|
||||
proto/crypt_zip.pro \
|
||||
proto/dict.pro \
|
||||
proto/diff.pro \
|
||||
proto/digraph.pro \
|
||||
proto/edit.pro \
|
||||
proto/eval.pro \
|
||||
proto/evalfunc.pro \
|
||||
proto/ex_cmds.pro \
|
||||
proto/ex_cmds2.pro \
|
||||
proto/ex_docmd.pro \
|
||||
@@ -162,6 +172,7 @@ PRO = proto/arabic.pro \
|
||||
proto/hardcopy.pro \
|
||||
proto/hashtab.pro \
|
||||
proto/json.pro \
|
||||
proto/list.pro \
|
||||
proto/main.pro \
|
||||
proto/mark.pro \
|
||||
proto/memfile.pro \
|
||||
@@ -189,6 +200,7 @@ PRO = proto/arabic.pro \
|
||||
proto/termlib.pro \
|
||||
proto/ui.pro \
|
||||
proto/undo.pro \
|
||||
proto/userfunc.pro \
|
||||
proto/window.pro
|
||||
|
||||
all: Vim xxd/Xxd
|
||||
@@ -253,6 +265,9 @@ obj/crypt.o: crypt.c
|
||||
obj/crypt_zip.o: crypt_zip.c
|
||||
$(CCSYM) $@ crypt_zip.c
|
||||
|
||||
obj/dict.o: dict.c
|
||||
$(CCSYM) $@ dict.c
|
||||
|
||||
obj/diff.o: diff.c
|
||||
$(CCSYM) $@ diff.c
|
||||
|
||||
@@ -265,6 +280,9 @@ obj/edit.o: edit.c
|
||||
obj/eval.o: eval.c
|
||||
$(CCSYM) $@ eval.c
|
||||
|
||||
obj/evalfunc.o: evalfunc.c
|
||||
$(CCSYM) $@ evalfunc.c
|
||||
|
||||
obj/ex_cmds.o: ex_cmds.c
|
||||
$(CCSYM) $@ ex_cmds.c
|
||||
|
||||
@@ -302,6 +320,9 @@ obj/hashtab.o: hashtab.c
|
||||
obj/json.o: json.c
|
||||
$(CCSYM) $@ json.c
|
||||
|
||||
obj/list.o: list.c
|
||||
$(CCSYM) $@ list.c
|
||||
|
||||
# Don't use $(SYMS) here, because main.c defines EXTERN
|
||||
obj/main.o: main.c option.h globals.h
|
||||
$(CCNOSYM) $@ main.c
|
||||
@@ -386,5 +407,8 @@ obj/ui.o: ui.c
|
||||
obj/undo.o: undo.c
|
||||
$(CCSYM) $@ undo.c
|
||||
|
||||
obj/userfunc.o: userfunc.c
|
||||
$(CCSYM) $@ userfunc.c
|
||||
|
||||
obj/window.o: window.c
|
||||
$(CCSYM) $@ window.c
|
||||
|
||||
@@ -30,10 +30,12 @@ SRC = arabic.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 \
|
||||
@@ -46,6 +48,7 @@ SRC = arabic.c \
|
||||
hardcopy.c \
|
||||
hashtab.c \
|
||||
json.c \
|
||||
list.c \
|
||||
main.c \
|
||||
mark.c \
|
||||
mbyte.c \
|
||||
@@ -72,6 +75,7 @@ SRC = arabic.c \
|
||||
term.c \
|
||||
ui.c \
|
||||
undo.c \
|
||||
userfunc.c \
|
||||
version.c \
|
||||
window.c \
|
||||
|
||||
|
||||
@@ -554,10 +554,12 @@ OBJ = \
|
||||
$(OUTDIR)\charset.obj \
|
||||
$(OUTDIR)\crypt.obj \
|
||||
$(OUTDIR)\crypt_zip.obj \
|
||||
$(OUTDIR)\dict.obj \
|
||||
$(OUTDIR)\diff.obj \
|
||||
$(OUTDIR)\digraph.obj \
|
||||
$(OUTDIR)\edit.obj \
|
||||
$(OUTDIR)\eval.obj \
|
||||
$(OUTDIR)\evalfunc.obj \
|
||||
$(OUTDIR)\ex_cmds.obj \
|
||||
$(OUTDIR)\ex_cmds2.obj \
|
||||
$(OUTDIR)\ex_docmd.obj \
|
||||
@@ -570,6 +572,7 @@ OBJ = \
|
||||
$(OUTDIR)\hardcopy.obj \
|
||||
$(OUTDIR)\hashtab.obj \
|
||||
$(OUTDIR)\json.obj \
|
||||
$(OUTDIR)\list.obj \
|
||||
$(OUTDIR)\main.obj \
|
||||
$(OUTDIR)\mark.obj \
|
||||
$(OUTDIR)\mbyte.obj \
|
||||
@@ -599,6 +602,7 @@ OBJ = \
|
||||
$(OUTDIR)\term.obj \
|
||||
$(OUTDIR)\ui.obj \
|
||||
$(OUTDIR)\undo.obj \
|
||||
$(OUTDIR)\userfunc.obj \
|
||||
$(OUTDIR)\window.obj \
|
||||
$(OUTDIR)\vim.res
|
||||
|
||||
@@ -1162,6 +1166,8 @@ $(OUTDIR)/crypt.obj: $(OUTDIR) crypt.c $(INCL)
|
||||
|
||||
$(OUTDIR)/crypt_zip.obj: $(OUTDIR) crypt_zip.c $(INCL)
|
||||
|
||||
$(OUTDIR)/dict.obj: $(OUTDIR) dict.c $(INCL)
|
||||
|
||||
$(OUTDIR)/diff.obj: $(OUTDIR) diff.c $(INCL)
|
||||
|
||||
$(OUTDIR)/digraph.obj: $(OUTDIR) digraph.c $(INCL)
|
||||
@@ -1170,6 +1176,8 @@ $(OUTDIR)/edit.obj: $(OUTDIR) edit.c $(INCL)
|
||||
|
||||
$(OUTDIR)/eval.obj: $(OUTDIR) eval.c $(INCL)
|
||||
|
||||
$(OUTDIR)/evalfunc.obj: $(OUTDIR) evalfunc.c $(INCL)
|
||||
|
||||
$(OUTDIR)/ex_cmds.obj: $(OUTDIR) ex_cmds.c $(INCL)
|
||||
|
||||
$(OUTDIR)/ex_cmds2.obj: $(OUTDIR) ex_cmds2.c $(INCL)
|
||||
@@ -1241,6 +1249,8 @@ $(OUTDIR)/iscygpty.obj: $(OUTDIR) iscygpty.c $(CUI_INCL)
|
||||
|
||||
$(OUTDIR)/json.obj: $(OUTDIR) json.c $(INCL)
|
||||
|
||||
$(OUTDIR)/list.obj: $(OUTDIR) list.c $(INCL)
|
||||
|
||||
$(OUTDIR)/main.obj: $(OUTDIR) main.c $(INCL) $(CUI_INCL)
|
||||
|
||||
$(OUTDIR)/mark.obj: $(OUTDIR) mark.c $(INCL)
|
||||
@@ -1306,6 +1316,8 @@ $(OUTDIR)/ui.obj: $(OUTDIR) ui.c $(INCL)
|
||||
|
||||
$(OUTDIR)/undo.obj: $(OUTDIR) undo.c $(INCL)
|
||||
|
||||
$(OUTDIR)/userfunc.obj: $(OUTDIR) userfunc.c $(INCL)
|
||||
|
||||
$(OUTDIR)/window.obj: $(OUTDIR) window.c $(INCL)
|
||||
|
||||
$(OUTDIR)/xpm_w32.obj: $(OUTDIR) xpm_w32.c
|
||||
@@ -1358,10 +1370,12 @@ proto.h: \
|
||||
proto/charset.pro \
|
||||
proto/crypt.pro \
|
||||
proto/crypt_zip.pro \
|
||||
proto/dict.pro \
|
||||
proto/diff.pro \
|
||||
proto/digraph.pro \
|
||||
proto/edit.pro \
|
||||
proto/eval.pro \
|
||||
proto/evalfunc.pro \
|
||||
proto/ex_cmds.pro \
|
||||
proto/ex_cmds2.pro \
|
||||
proto/ex_docmd.pro \
|
||||
@@ -1373,6 +1387,7 @@ proto.h: \
|
||||
proto/hardcopy.pro \
|
||||
proto/hashtab.pro \
|
||||
proto/json.pro \
|
||||
proto/list.pro \
|
||||
proto/main.pro \
|
||||
proto/mark.pro \
|
||||
proto/memfile.pro \
|
||||
@@ -1401,6 +1416,7 @@ proto.h: \
|
||||
proto/term.pro \
|
||||
proto/ui.pro \
|
||||
proto/undo.pro \
|
||||
proto/userfunc.pro \
|
||||
proto/window.pro \
|
||||
$(NETBEANS_PRO) \
|
||||
$(CHANNEL_PRO)
|
||||
|
||||
@@ -95,10 +95,12 @@ SRC = \
|
||||
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 \
|
||||
@@ -111,6 +113,7 @@ SRC = \
|
||||
hardcopy.c \
|
||||
hashtab.c \
|
||||
json.c \
|
||||
list.c \
|
||||
main.c \
|
||||
mark.c \
|
||||
memfile.c \
|
||||
@@ -137,6 +140,7 @@ SRC = \
|
||||
term.c \
|
||||
ui.c \
|
||||
undo.c \
|
||||
userfunc.c \
|
||||
window.c \
|
||||
version.c
|
||||
|
||||
@@ -147,10 +151,12 @@ OBJ = \
|
||||
charset.o \
|
||||
crypt.o \
|
||||
crypt_zip.o \
|
||||
dict.o \
|
||||
diff.o \
|
||||
digraph.o \
|
||||
edit.o \
|
||||
eval.o \
|
||||
evalfunc.o \
|
||||
ex_cmds.o \
|
||||
ex_cmds2.o \
|
||||
ex_docmd.o \
|
||||
@@ -163,6 +169,7 @@ OBJ = \
|
||||
hardcopy.o \
|
||||
hashtab.o \
|
||||
json.o \
|
||||
list.o \
|
||||
main.o \
|
||||
mark.o \
|
||||
memfile.o \
|
||||
@@ -189,6 +196,7 @@ OBJ = \
|
||||
term.o \
|
||||
ui.o \
|
||||
undo.o \
|
||||
userfunc.o \
|
||||
window.o \
|
||||
$(TERMLIB)
|
||||
|
||||
@@ -199,10 +207,12 @@ PRO = \
|
||||
proto/charset.pro \
|
||||
proto/crypt.pro \
|
||||
proto/crypt_zip.pro \
|
||||
proto/dict.pro \
|
||||
proto/diff.pro \
|
||||
proto/digraph.pro \
|
||||
proto/edit.pro \
|
||||
proto/eval.pro \
|
||||
proto/evalfunc.pro \
|
||||
proto/ex_cmds.pro \
|
||||
proto/ex_cmds2.pro \
|
||||
proto/ex_docmd.pro \
|
||||
@@ -215,6 +225,7 @@ PRO = \
|
||||
proto/hardcopy.pro \
|
||||
proto/hashtab.pro \
|
||||
proto/json.pro \
|
||||
proto/list.pro \
|
||||
proto/main.pro \
|
||||
proto/mark.pro \
|
||||
proto/memfile.pro \
|
||||
@@ -242,6 +253,7 @@ PRO = \
|
||||
proto/termlib.pro \
|
||||
proto/ui.pro \
|
||||
proto/undo.pro \
|
||||
proto/userfunc.pro \
|
||||
proto/window.pro
|
||||
|
||||
all: proto Vim
|
||||
@@ -311,6 +323,8 @@ crypt.o: crypt.c
|
||||
proto/crypt.pro: crypt.c
|
||||
crypt_zip.o: crypt_zip.c
|
||||
proto/crypt_zip.pro: crypt_zip.c
|
||||
dict.o: dict.c
|
||||
proto/dict.pro: dict.c
|
||||
diff.o: diff.c
|
||||
proto/diff.pro: diff.c
|
||||
digraph.o: digraph.c
|
||||
@@ -319,6 +333,8 @@ edit.o: edit.c
|
||||
proto/edit.pro: edit.c
|
||||
eval.o: eval.c
|
||||
proto/eval.pro: eval.c
|
||||
evalfunc.o: evalfunc.c
|
||||
proto/evalfunc.pro: evalfunc.c
|
||||
ex_cmds.o: ex_cmds.c
|
||||
proto/ex_cmds.pro: ex_cmds.c
|
||||
ex_cmds2.o: ex_cmds2.c
|
||||
@@ -343,6 +359,8 @@ hashtab.o: hashtab.c
|
||||
proto/hashtab.pro: hashtab.c
|
||||
json.o: json.c
|
||||
proto/json.pro: json.c
|
||||
list.o: list.c
|
||||
proto/list.pro: list.c
|
||||
main.o: main.c
|
||||
proto/main.pro: main.c
|
||||
mark.o: mark.c
|
||||
@@ -397,4 +415,6 @@ ui.o: ui.c
|
||||
proto/ui.pro: ui.c
|
||||
undo.o: undo.c
|
||||
proto/undo.pro: undo.c
|
||||
userfunc.o: userfunc.c
|
||||
proto/userfunc.pro: userfunc.c
|
||||
window.o: window.c
|
||||
|
||||
@@ -1506,6 +1506,7 @@ BASIC_SRC = \
|
||||
digraph.c \
|
||||
edit.c \
|
||||
eval.c \
|
||||
evalfunc.c \
|
||||
ex_cmds.c \
|
||||
ex_cmds2.c \
|
||||
ex_docmd.c \
|
||||
@@ -1548,6 +1549,7 @@ BASIC_SRC = \
|
||||
term.c \
|
||||
ui.c \
|
||||
undo.c \
|
||||
userfunc.c \
|
||||
version.c \
|
||||
window.c \
|
||||
$(OS_EXTRA_SRC)
|
||||
@@ -1609,6 +1611,7 @@ OBJ_COMMON = \
|
||||
objects/digraph.o \
|
||||
objects/edit.o \
|
||||
objects/eval.o \
|
||||
objects/evalfunc.o \
|
||||
objects/ex_cmds.o \
|
||||
objects/ex_cmds2.o \
|
||||
objects/ex_docmd.o \
|
||||
@@ -1648,6 +1651,7 @@ OBJ_COMMON = \
|
||||
objects/term.o \
|
||||
objects/ui.o \
|
||||
objects/undo.o \
|
||||
objects/userfunc.o \
|
||||
objects/version.o \
|
||||
objects/window.o \
|
||||
$(GUI_OBJ) \
|
||||
@@ -1698,6 +1702,7 @@ PRO_AUTO = \
|
||||
digraph.pro \
|
||||
edit.pro \
|
||||
eval.pro \
|
||||
evalfunc.pro \
|
||||
ex_cmds.pro \
|
||||
ex_cmds2.pro \
|
||||
ex_docmd.pro \
|
||||
@@ -1748,6 +1753,7 @@ PRO_AUTO = \
|
||||
termlib.pro \
|
||||
ui.pro \
|
||||
undo.pro \
|
||||
userfunc.pro \
|
||||
version.pro \
|
||||
window.pro \
|
||||
gui_beval.pro \
|
||||
@@ -2850,6 +2856,9 @@ objects/edit.o: edit.c
|
||||
objects/eval.o: eval.c
|
||||
$(CCC) -o $@ eval.c
|
||||
|
||||
objects/evalfunc.o: evalfunc.c
|
||||
$(CCC) -o $@ evalfunc.c
|
||||
|
||||
objects/ex_cmds.o: ex_cmds.c
|
||||
$(CCC) -o $@ ex_cmds.c
|
||||
|
||||
@@ -3092,6 +3101,9 @@ objects/ui.o: ui.c
|
||||
objects/undo.o: undo.c
|
||||
$(CCC) -o $@ undo.c
|
||||
|
||||
objects/userfunc.o: userfunc.c
|
||||
$(CCC) -o $@ userfunc.c
|
||||
|
||||
objects/window.o: window.c
|
||||
$(CCC) -o $@ window.c
|
||||
|
||||
@@ -3273,6 +3285,10 @@ objects/eval.o: eval.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
|
||||
ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
|
||||
gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h proto.h globals.h \
|
||||
farsi.h arabic.h version.h
|
||||
objects/evalfunc.o: evalfunc.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
|
||||
ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
|
||||
gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h proto.h globals.h \
|
||||
farsi.h arabic.h version.h
|
||||
objects/ex_cmds.o: ex_cmds.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
|
||||
ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
|
||||
gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h proto.h globals.h \
|
||||
@@ -3438,6 +3454,10 @@ objects/undo.o: undo.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
|
||||
ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
|
||||
gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h proto.h globals.h \
|
||||
farsi.h arabic.h
|
||||
objects/userfunc.o: userfunc.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
|
||||
ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
|
||||
gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h proto.h globals.h \
|
||||
farsi.h arabic.h
|
||||
objects/version.o: version.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
|
||||
ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
|
||||
gui_beval.h proto/gui_beval.pro alloc.h ex_cmds.h proto.h globals.h \
|
||||
|
||||
+835
-16882
File diff suppressed because it is too large
Load Diff
+12549
File diff suppressed because it is too large
Load Diff
+4
-12
@@ -1540,6 +1540,10 @@ EXTERN char_u e_readonlysbx[] INIT(= N_("E794: Cannot set variable in the sandbo
|
||||
EXTERN char_u e_emptykey[] INIT(= N_("E713: Cannot use empty key for Dictionary"));
|
||||
EXTERN char_u e_dictreq[] INIT(= N_("E715: Dictionary required"));
|
||||
EXTERN char_u e_listidx[] INIT(= N_("E684: list index out of range: %ld"));
|
||||
EXTERN char_u e_toomanyarg[] INIT(= N_("E118: Too many arguments for function: %s"));
|
||||
EXTERN char_u e_dictkey[] INIT(= N_("E716: Key not present in Dictionary: %s"));
|
||||
EXTERN char_u e_listreq[] INIT(= N_("E714: List required"));
|
||||
EXTERN char_u e_listdictarg[] INIT(= N_("E712: Argument of %s must be a List or Dictionary"));
|
||||
#endif
|
||||
#ifdef FEAT_QUICKFIX
|
||||
EXTERN char_u e_readerrf[] INIT(= N_("E47: Error while reading errorfile"));
|
||||
@@ -1651,18 +1655,6 @@ EXTERN int did_add_timer INIT(= FALSE);
|
||||
#ifdef FEAT_EVAL
|
||||
EXTERN time_T time_for_testing INIT(= 0);
|
||||
|
||||
/*
|
||||
* In a hashtab item "hi_key" points to "di_key" in a dictitem.
|
||||
* This avoids adding a pointer to the hashtab item.
|
||||
* DI2HIKEY() converts a dictitem pointer to a hashitem key pointer.
|
||||
* HIKEY2DI() converts a hashitem key pointer to a dictitem pointer.
|
||||
* HI2DI() converts a hashitem pointer to a dictitem pointer.
|
||||
*/
|
||||
EXTERN dictitem_T dumdi;
|
||||
# define DI2HIKEY(di) ((di)->di_key)
|
||||
# define HIKEY2DI(p) ((dictitem_T *)(p - (dumdi.di_key - (char_u *)&dumdi)))
|
||||
# define HI2DI(hi) HIKEY2DI((hi)->hi_key)
|
||||
|
||||
/* Abort conversion to string after a recursion error. */
|
||||
EXTERN int did_echo_string_emsg INIT(= FALSE);
|
||||
#endif
|
||||
|
||||
+41
-1
@@ -884,4 +884,44 @@ failret:
|
||||
return OK;
|
||||
}
|
||||
|
||||
#endif /* defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) */
|
||||
/*
|
||||
* Write list of strings to file
|
||||
*/
|
||||
int
|
||||
write_list(FILE *fd, list_T *list, int binary)
|
||||
{
|
||||
listitem_T *li;
|
||||
int c;
|
||||
int ret = OK;
|
||||
char_u *s;
|
||||
|
||||
for (li = list->lv_first; li != NULL; li = li->li_next)
|
||||
{
|
||||
for (s = get_tv_string(&li->li_tv); *s != NUL; ++s)
|
||||
{
|
||||
if (*s == '\n')
|
||||
c = putc(NUL, fd);
|
||||
else
|
||||
c = putc(*s, fd);
|
||||
if (c == EOF)
|
||||
{
|
||||
ret = FAIL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!binary || li->li_next != NULL)
|
||||
if (putc('\n', fd) == EOF)
|
||||
{
|
||||
ret = FAIL;
|
||||
break;
|
||||
}
|
||||
if (ret == FAIL)
|
||||
{
|
||||
EMSG(_(e_write));
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif /* defined(FEAT_EVAL) */
|
||||
|
||||
@@ -353,3 +353,14 @@
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* In a hashtab item "hi_key" points to "di_key" in a dictitem.
|
||||
* This avoids adding a pointer to the hashtab item.
|
||||
* DI2HIKEY() converts a dictitem pointer to a hashitem key pointer.
|
||||
* HIKEY2DI() converts a hashitem key pointer to a dictitem pointer.
|
||||
* HI2DI() converts a hashitem pointer to a dictitem pointer.
|
||||
*/
|
||||
# define DI2HIKEY(di) ((di)->di_key)
|
||||
# define HIKEY2DI(p) ((dictitem_T *)(p - offsetof(dictitem_T, di_key)))
|
||||
# define HI2DI(hi) HIKEY2DI((hi)->hi_key)
|
||||
|
||||
@@ -72,6 +72,7 @@ extern int _stricoll(char *a, char *b);
|
||||
# include "digraph.pro"
|
||||
# include "edit.pro"
|
||||
# include "eval.pro"
|
||||
# include "evalfunc.pro"
|
||||
# include "ex_cmds.pro"
|
||||
# include "ex_cmds2.pro"
|
||||
# include "ex_docmd.pro"
|
||||
@@ -165,6 +166,7 @@ void qsort(void *base, size_t elm_count, size_t elm_size, int (*cmp)(const void
|
||||
# endif
|
||||
# include "ui.pro"
|
||||
# include "undo.pro"
|
||||
# include "userfunc.pro"
|
||||
# include "version.pro"
|
||||
# include "window.pro"
|
||||
|
||||
|
||||
+39
-40
@@ -1,11 +1,6 @@
|
||||
/* eval.c */
|
||||
void eval_init(void);
|
||||
void eval_clear(void);
|
||||
char_u *func_name(void *cookie);
|
||||
linenr_T *func_breakpoint(void *cookie);
|
||||
int *func_dbg_tick(void *cookie);
|
||||
int func_level(void *cookie);
|
||||
int current_func_returned(void);
|
||||
void set_internal_string_var(char_u *name, char_u *value);
|
||||
int var_redir_start(char_u *name, int append);
|
||||
void var_redir_str(char_u *value, int value_len);
|
||||
@@ -27,23 +22,24 @@ int call_vim_function(char_u *func, int argc, char_u **argv, int safe, int str_a
|
||||
varnumber_T call_func_retnr(char_u *func, int argc, char_u **argv, int safe);
|
||||
void *call_func_retstr(char_u *func, int argc, char_u **argv, int safe);
|
||||
void *call_func_retlist(char_u *func, int argc, char_u **argv, int safe);
|
||||
void *save_funccal(void);
|
||||
void restore_funccal(void *vfc);
|
||||
void prof_child_enter(proftime_T *tm);
|
||||
void prof_child_exit(proftime_T *tm);
|
||||
int eval_foldexpr(char_u *arg, int *cp);
|
||||
void ex_let(exarg_T *eap);
|
||||
void list_hashtable_vars(hashtab_T *ht, char_u *prefix, int empty, int *first);
|
||||
int check_changedtick(char_u *arg);
|
||||
char_u *get_lval(char_u *name, typval_T *rettv, lval_T *lp, int unlet, int skip, int flags, int fne_flags);
|
||||
void clear_lval(lval_T *lp);
|
||||
void *eval_for_line(char_u *arg, int *errp, char_u **nextcmdp, int skip);
|
||||
int next_for_item(void *fi_void, char_u *arg);
|
||||
void free_for_info(void *fi_void);
|
||||
void set_context_for_expression(expand_T *xp, char_u *arg, cmdidx_T cmdidx);
|
||||
void ex_call(exarg_T *eap);
|
||||
void ex_unlet(exarg_T *eap);
|
||||
void ex_lockvar(exarg_T *eap);
|
||||
int do_unlet(char_u *name, int forceit);
|
||||
void del_menutrans_vars(void);
|
||||
char_u *get_user_var_name(expand_T *xp, int idx);
|
||||
int eval0(char_u *arg, typval_T *rettv, char_u **nextcmd, int evaluate);
|
||||
int eval1(char_u **arg, typval_T *rettv, int evaluate);
|
||||
int get_option_tv(char_u **arg, typval_T *rettv, int evaluate);
|
||||
void partial_unref(partial_T *pt);
|
||||
int tv_equal(typval_T *tv1, typval_T *tv2, int ic, int recursive);
|
||||
int get_copyID(void);
|
||||
@@ -52,20 +48,17 @@ int set_ref_in_ht(hashtab_T *ht, int copyID, list_stack_T **list_stack);
|
||||
int set_ref_in_list(list_T *l, int copyID, ht_stack_T **ht_stack);
|
||||
int set_ref_in_item(typval_T *tv, int copyID, ht_stack_T **ht_stack, list_stack_T **list_stack);
|
||||
char_u *echo_string_core(typval_T *tv, char_u **tofree, char_u *numbuf, int copyID, int echo_style, int restore_copyID, int dict_val);
|
||||
char_u *echo_string(typval_T *tv, char_u **tofree, char_u *numbuf, int copyID);
|
||||
char_u *tv2string(typval_T *tv, char_u **tofree, char_u *numbuf, int copyID);
|
||||
char_u *string_quote(char_u *str, int function);
|
||||
int string2float(char_u *text, float_T *value);
|
||||
char_u *get_function_name(expand_T *xp, int idx);
|
||||
char_u *get_expr_name(expand_T *xp, int idx);
|
||||
int call_func(char_u *funcname, int len, typval_T *rettv, int argcount_in, typval_T *argvars_in, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, partial_T *partial, dict_T *selfdict_in);
|
||||
buf_T *buflist_find_by_name(char_u *name, int curtab_only);
|
||||
int func_call(char_u *name, typval_T *args, partial_T *partial, dict_T *selfdict, typval_T *rettv);
|
||||
void execute_redir_str(char_u *value, int value_len);
|
||||
void mzscheme_call_vim(char_u *name, typval_T *args, typval_T *rettv);
|
||||
float_T vim_round(float_T f);
|
||||
long do_searchpair(char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop, long time_limit);
|
||||
char_u *get_callback(typval_T *arg, partial_T **pp);
|
||||
void free_callback(char_u *callback, partial_T *partial);
|
||||
pos_T *var2fpos(typval_T *varp, int dollar_lnum, int *fnum);
|
||||
int list2fpos(typval_T *arg, pos_T *posp, int *fnump, colnr_T *curswantp);
|
||||
int get_id_len(char_u **arg);
|
||||
int get_name_len(char_u **arg, char_u **alias, int evaluate, int verbose);
|
||||
char_u *find_name_end(char_u *arg, char_u **expr_start, char_u **expr_end, int flags);
|
||||
int eval_isnamec(int c);
|
||||
int eval_isnamec1(int c);
|
||||
void set_vim_var_nr(int idx, varnumber_T val);
|
||||
varnumber_T get_vim_var_nr(int idx);
|
||||
char_u *get_vim_var_str(int idx);
|
||||
@@ -79,54 +72,60 @@ void set_reg_var(int c);
|
||||
char_u *v_exception(char_u *oldval);
|
||||
char_u *v_throwpoint(char_u *oldval);
|
||||
char_u *set_cmdarg(exarg_T *eap, char_u *oldarg);
|
||||
int get_var_tv(char_u *name, int len, typval_T *rettv, dictitem_T **dip, int verbose, int no_autoload);
|
||||
int handle_subscript(char_u **arg, typval_T *rettv, int evaluate, int verbose);
|
||||
typval_T *alloc_tv(void);
|
||||
void free_tv(typval_T *varp);
|
||||
void clear_tv(typval_T *varp);
|
||||
void init_tv(typval_T *varp);
|
||||
varnumber_T get_tv_number(typval_T *varp);
|
||||
varnumber_T get_tv_number_chk(typval_T *varp, int *denote);
|
||||
float_T get_tv_float(typval_T *varp);
|
||||
char_u *get_tv_string(typval_T *varp);
|
||||
char_u *get_tv_string_buf(typval_T *varp, char_u *buf);
|
||||
char_u *get_tv_string_chk(typval_T *varp);
|
||||
char_u *get_tv_string_buf_chk(typval_T *varp, char_u *buf);
|
||||
dictitem_T *find_var(char_u *name, hashtab_T **htp, int no_autoload);
|
||||
dictitem_T *find_var_in_ht(hashtab_T *ht, int htname, char_u *varname, int no_autoload);
|
||||
char_u *get_var_value(char_u *name);
|
||||
void new_script_vars(scid_T id);
|
||||
void init_var_dict(dict_T *dict, dictitem_T *dict_var, int scope);
|
||||
void unref_var_dict(dict_T *dict);
|
||||
void vars_clear(hashtab_T *ht);
|
||||
void vars_clear_ext(hashtab_T *ht, int free_val);
|
||||
void set_var(char_u *name, typval_T *tv, int copy);
|
||||
int var_check_ro(int flags, char_u *name, int use_gettext);
|
||||
int var_check_fixed(int flags, char_u *name, int use_gettext);
|
||||
int var_check_func_name(char_u *name, int new_var);
|
||||
int valid_varname(char_u *varname);
|
||||
int tv_check_lock(int lock, char_u *name, int use_gettext);
|
||||
void copy_tv(typval_T *from, typval_T *to);
|
||||
int item_copy(typval_T *from, typval_T *to, int deep, int copyID);
|
||||
void get_user_input(typval_T *argvars, typval_T *rettv, int inputdialog, int secret);
|
||||
void ex_echo(exarg_T *eap);
|
||||
void ex_echohl(exarg_T *eap);
|
||||
void ex_execute(exarg_T *eap);
|
||||
void ex_function(exarg_T *eap);
|
||||
void free_all_functions(void);
|
||||
int translated_function_exists(char_u *name);
|
||||
char_u *get_expanded_name(char_u *name, int check);
|
||||
void func_dump_profile(FILE *fd);
|
||||
char_u *get_user_func_name(expand_T *xp, int idx);
|
||||
void ex_delfunction(exarg_T *eap);
|
||||
void func_unref(char_u *name);
|
||||
void func_ref(char_u *name);
|
||||
void ex_return(exarg_T *eap);
|
||||
int do_return(exarg_T *eap, int reanimate, int is_cmd, void *rettv);
|
||||
void discard_pending_return(void *rettv);
|
||||
char_u *get_return_cmd(void *rettv);
|
||||
char_u *get_func_line(int c, void *cookie, int indent);
|
||||
void func_line_start(void *cookie);
|
||||
void func_line_exec(void *cookie);
|
||||
void func_line_end(void *cookie);
|
||||
int func_has_ended(void *cookie);
|
||||
int func_has_abort(void *cookie);
|
||||
win_T *find_win_by_nr(typval_T *vp, tabpage_T *tp);
|
||||
win_T *find_tabwin(typval_T *wvp, typval_T *tvp);
|
||||
void getwinvar(typval_T *argvars, typval_T *rettv, int off);
|
||||
void setwinvar(typval_T *argvars, typval_T *rettv, int off);
|
||||
char_u *autoload_name(char_u *name);
|
||||
int script_autoload(char_u *name, int reload);
|
||||
int read_viminfo_varlist(vir_T *virp, int writing);
|
||||
void write_viminfo_varlist(FILE *fp);
|
||||
int store_session_globals(FILE *fd);
|
||||
void last_set_msg(scid_T scriptID);
|
||||
void ex_oldfiles(exarg_T *eap);
|
||||
void reset_v_option_vars(void);
|
||||
void prepare_assert_error(garray_T *gap);
|
||||
void assert_error(garray_T *gap);
|
||||
void assert_equal_common(typval_T *argvars, assert_type_T atype);
|
||||
void assert_match_common(typval_T *argvars, assert_type_T atype);
|
||||
void assert_bool(typval_T *argvars, int isTrue);
|
||||
void assert_exception(typval_T *argvars);
|
||||
void assert_fails(typval_T *argvars);
|
||||
void fill_assert_error(garray_T *gap, typval_T *opt_msg_tv, char_u *exp_str, typval_T *exp_tv, typval_T *got_tv, assert_type_T atype);
|
||||
int modify_fname(char_u *src, int *usedlen, char_u **fnamep, char_u **bufp, int *fnamelen);
|
||||
char_u *do_string_sub(char_u *str, char_u *pat, char_u *sub, char_u *flags);
|
||||
void filter_map(typval_T *argvars, typval_T *rettv, int map);
|
||||
/* vim: set ft=c : */
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
/* evalfunc.c */
|
||||
char_u *get_function_name(expand_T *xp, int idx);
|
||||
char_u *get_expr_name(expand_T *xp, int idx);
|
||||
int find_internal_func(char_u *name);
|
||||
int call_internal_func(char_u *name, int argcount, typval_T *argvars, typval_T *rettv);
|
||||
buf_T *buflist_find_by_name(char_u *name, int curtab_only);
|
||||
void execute_redir_str(char_u *value, int value_len);
|
||||
void mzscheme_call_vim(char_u *name, typval_T *args, typval_T *rettv);
|
||||
float_T vim_round(float_T f);
|
||||
long do_searchpair(char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop, long time_limit);
|
||||
char_u *get_callback(typval_T *arg, partial_T **pp);
|
||||
void free_callback(char_u *callback, partial_T *partial);
|
||||
/* vim: set ft=c : */
|
||||
@@ -31,4 +31,5 @@ void vimlist_remove(list_T *l, listitem_T *item, listitem_T *item2);
|
||||
char_u *list2string(typval_T *tv, int copyID, int restore_copyID);
|
||||
int list_join(garray_T *gap, list_T *l, char_u *sep, int echo_style, int restore_copyID, int copyID);
|
||||
int get_list_tv(char_u **arg, typval_T *rettv, int evaluate);
|
||||
int write_list(FILE *fd, list_T *list, int binary);
|
||||
/* vim: set ft=c : */
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
/* userfunc.c */
|
||||
void func_init(void);
|
||||
int get_lambda_tv(char_u **arg, typval_T *rettv, int evaluate);
|
||||
char_u *deref_func_name(char_u *name, int *lenp, partial_T **partialp, int no_autoload);
|
||||
int get_func_tv(char_u *name, int len, typval_T *rettv, char_u **arg, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, partial_T *partial, dict_T *selfdict);
|
||||
void free_all_functions(void);
|
||||
int func_call(char_u *name, typval_T *args, partial_T *partial, dict_T *selfdict, typval_T *rettv);
|
||||
int call_func(char_u *funcname, int len, typval_T *rettv, int argcount_in, typval_T *argvars_in, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, partial_T *partial, dict_T *selfdict_in);
|
||||
void ex_function(exarg_T *eap);
|
||||
int eval_fname_script(char_u *p);
|
||||
int translated_function_exists(char_u *name);
|
||||
int function_exists(char_u *name);
|
||||
char_u *get_expanded_name(char_u *name, int check);
|
||||
void func_dump_profile(FILE *fd);
|
||||
void prof_child_enter(proftime_T *tm);
|
||||
void prof_child_exit(proftime_T *tm);
|
||||
char_u *get_user_func_name(expand_T *xp, int idx);
|
||||
void ex_delfunction(exarg_T *eap);
|
||||
void func_unref(char_u *name);
|
||||
void func_ref(char_u *name);
|
||||
void ex_return(exarg_T *eap);
|
||||
void ex_call(exarg_T *eap);
|
||||
int do_return(exarg_T *eap, int reanimate, int is_cmd, void *rettv);
|
||||
void discard_pending_return(void *rettv);
|
||||
char_u *get_return_cmd(void *rettv);
|
||||
char_u *get_func_line(int c, void *cookie, int indent);
|
||||
void func_line_start(void *cookie);
|
||||
void func_line_exec(void *cookie);
|
||||
void func_line_end(void *cookie);
|
||||
int func_has_ended(void *cookie);
|
||||
int func_has_abort(void *cookie);
|
||||
dict_T *make_partial(dict_T *selfdict_in, typval_T *rettv);
|
||||
char_u *func_name(void *cookie);
|
||||
linenr_T *func_breakpoint(void *cookie);
|
||||
int *func_dbg_tick(void *cookie);
|
||||
int func_level(void *cookie);
|
||||
int current_func_returned(void);
|
||||
void *save_funccal(void);
|
||||
void restore_funccal(void *vfc);
|
||||
int free_unref_funccal(int copyID, int testing);
|
||||
hashtab_T *get_funccal_local_ht(void);
|
||||
dictitem_T *get_funccal_local_var(void);
|
||||
hashtab_T *get_funccal_args_ht(void);
|
||||
dictitem_T *get_funccal_args_var(void);
|
||||
void *clear_current_funccal(void);
|
||||
void restore_current_funccal(void *f);
|
||||
void list_func_vars(int *first);
|
||||
dict_T *get_current_funccal_dict(hashtab_T *ht);
|
||||
int set_ref_in_previous_funccal(int copyID);
|
||||
int set_ref_in_call_stack(int copyID);
|
||||
int set_ref_in_func_args(int copyID);
|
||||
/* vim: set ft=c : */
|
||||
+357
-322
@@ -410,6 +410,11 @@ parse_efm_option(char_u *efm)
|
||||
if (errmsg == NULL)
|
||||
goto parse_efm_end;
|
||||
|
||||
/*
|
||||
* Each part of the format string is copied and modified from errorformat
|
||||
* to regex prog. Only a few % characters are allowed.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Get some space to modify the format string into.
|
||||
*/
|
||||
@@ -474,7 +479,8 @@ enum {
|
||||
QF_FAIL = 0,
|
||||
QF_OK = 1,
|
||||
QF_END_OF_INPUT = 2,
|
||||
QF_NOMEM = 3
|
||||
QF_NOMEM = 3,
|
||||
QF_IGNORE_LINE = 4
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
@@ -764,6 +770,326 @@ qf_get_nextline(qfstate_T *state)
|
||||
return QF_OK;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
char_u *namebuf;
|
||||
char_u *errmsg;
|
||||
int errmsglen;
|
||||
long lnum;
|
||||
int col;
|
||||
char_u use_viscol;
|
||||
char_u *pattern;
|
||||
int enr;
|
||||
int type;
|
||||
int valid;
|
||||
} qffields_T;
|
||||
|
||||
/*
|
||||
* Parse a line and get the quickfix fields.
|
||||
* Return the QF_ status.
|
||||
*/
|
||||
static int
|
||||
qf_parse_line(
|
||||
qf_info_T *qi,
|
||||
char_u *linebuf,
|
||||
int linelen,
|
||||
efm_T *fmt_first,
|
||||
qffields_T *fields)
|
||||
{
|
||||
efm_T *fmt_ptr;
|
||||
static efm_T *fmt_start = NULL; /* cached across calls */
|
||||
char_u *ptr;
|
||||
int len;
|
||||
int i;
|
||||
int idx = 0;
|
||||
char_u *tail = NULL;
|
||||
regmatch_T regmatch;
|
||||
|
||||
/* Always ignore case when looking for a matching error. */
|
||||
regmatch.rm_ic = TRUE;
|
||||
|
||||
/* If there was no %> item start at the first pattern */
|
||||
if (fmt_start == NULL)
|
||||
fmt_ptr = fmt_first;
|
||||
else
|
||||
{
|
||||
fmt_ptr = fmt_start;
|
||||
fmt_start = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Try to match each part of 'errorformat' until we find a complete
|
||||
* match or no match.
|
||||
*/
|
||||
fields->valid = TRUE;
|
||||
restofline:
|
||||
for ( ; fmt_ptr != NULL; fmt_ptr = fmt_ptr->next)
|
||||
{
|
||||
int r;
|
||||
|
||||
idx = fmt_ptr->prefix;
|
||||
if (qi->qf_multiscan && vim_strchr((char_u *)"OPQ", idx) == NULL)
|
||||
continue;
|
||||
fields->namebuf[0] = NUL;
|
||||
fields->pattern[0] = NUL;
|
||||
if (!qi->qf_multiscan)
|
||||
fields->errmsg[0] = NUL;
|
||||
fields->lnum = 0;
|
||||
fields->col = 0;
|
||||
fields->use_viscol = FALSE;
|
||||
fields->enr = -1;
|
||||
fields->type = 0;
|
||||
tail = NULL;
|
||||
|
||||
regmatch.regprog = fmt_ptr->prog;
|
||||
r = vim_regexec(®match, linebuf, (colnr_T)0);
|
||||
fmt_ptr->prog = regmatch.regprog;
|
||||
if (r)
|
||||
{
|
||||
if ((idx == 'C' || idx == 'Z') && !qi->qf_multiline)
|
||||
continue;
|
||||
if (vim_strchr((char_u *)"EWI", idx) != NULL)
|
||||
fields->type = idx;
|
||||
else
|
||||
fields->type = 0;
|
||||
/*
|
||||
* Extract error message data from matched line.
|
||||
* We check for an actual submatch, because "\[" and "\]" in
|
||||
* the 'errorformat' may cause the wrong submatch to be used.
|
||||
*/
|
||||
if ((i = (int)fmt_ptr->addr[0]) > 0) /* %f */
|
||||
{
|
||||
int c;
|
||||
|
||||
if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
|
||||
continue;
|
||||
|
||||
/* Expand ~/file and $HOME/file to full path. */
|
||||
c = *regmatch.endp[i];
|
||||
*regmatch.endp[i] = NUL;
|
||||
expand_env(regmatch.startp[i], fields->namebuf, CMDBUFFSIZE);
|
||||
*regmatch.endp[i] = c;
|
||||
|
||||
if (vim_strchr((char_u *)"OPQ", idx) != NULL
|
||||
&& mch_getperm(fields->namebuf) == -1)
|
||||
continue;
|
||||
}
|
||||
if ((i = (int)fmt_ptr->addr[1]) > 0) /* %n */
|
||||
{
|
||||
if (regmatch.startp[i] == NULL)
|
||||
continue;
|
||||
fields->enr = (int)atol((char *)regmatch.startp[i]);
|
||||
}
|
||||
if ((i = (int)fmt_ptr->addr[2]) > 0) /* %l */
|
||||
{
|
||||
if (regmatch.startp[i] == NULL)
|
||||
continue;
|
||||
fields->lnum = atol((char *)regmatch.startp[i]);
|
||||
}
|
||||
if ((i = (int)fmt_ptr->addr[3]) > 0) /* %c */
|
||||
{
|
||||
if (regmatch.startp[i] == NULL)
|
||||
continue;
|
||||
fields->col = (int)atol((char *)regmatch.startp[i]);
|
||||
}
|
||||
if ((i = (int)fmt_ptr->addr[4]) > 0) /* %t */
|
||||
{
|
||||
if (regmatch.startp[i] == NULL)
|
||||
continue;
|
||||
fields->type = *regmatch.startp[i];
|
||||
}
|
||||
if (fmt_ptr->flags == '+' && !qi->qf_multiscan) /* %+ */
|
||||
{
|
||||
if (linelen > fields->errmsglen) {
|
||||
/* linelen + null terminator */
|
||||
if ((fields->errmsg = vim_realloc(fields->errmsg,
|
||||
linelen + 1)) == NULL)
|
||||
return QF_NOMEM;
|
||||
fields->errmsglen = linelen + 1;
|
||||
}
|
||||
vim_strncpy(fields->errmsg, linebuf, linelen);
|
||||
}
|
||||
else if ((i = (int)fmt_ptr->addr[5]) > 0) /* %m */
|
||||
{
|
||||
if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
|
||||
continue;
|
||||
len = (int)(regmatch.endp[i] - regmatch.startp[i]);
|
||||
if (len > fields->errmsglen) {
|
||||
/* len + null terminator */
|
||||
if ((fields->errmsg = vim_realloc(fields->errmsg, len + 1))
|
||||
== NULL)
|
||||
return QF_NOMEM;
|
||||
fields->errmsglen = len + 1;
|
||||
}
|
||||
vim_strncpy(fields->errmsg, regmatch.startp[i], len);
|
||||
}
|
||||
if ((i = (int)fmt_ptr->addr[6]) > 0) /* %r */
|
||||
{
|
||||
if (regmatch.startp[i] == NULL)
|
||||
continue;
|
||||
tail = regmatch.startp[i];
|
||||
}
|
||||
if ((i = (int)fmt_ptr->addr[7]) > 0) /* %p */
|
||||
{
|
||||
char_u *match_ptr;
|
||||
|
||||
if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
|
||||
continue;
|
||||
fields->col = 0;
|
||||
for (match_ptr = regmatch.startp[i];
|
||||
match_ptr != regmatch.endp[i]; ++match_ptr)
|
||||
{
|
||||
++fields->col;
|
||||
if (*match_ptr == TAB)
|
||||
{
|
||||
fields->col += 7;
|
||||
fields->col -= fields->col % 8;
|
||||
}
|
||||
}
|
||||
++fields->col;
|
||||
fields->use_viscol = TRUE;
|
||||
}
|
||||
if ((i = (int)fmt_ptr->addr[8]) > 0) /* %v */
|
||||
{
|
||||
if (regmatch.startp[i] == NULL)
|
||||
continue;
|
||||
fields->col = (int)atol((char *)regmatch.startp[i]);
|
||||
fields->use_viscol = TRUE;
|
||||
}
|
||||
if ((i = (int)fmt_ptr->addr[9]) > 0) /* %s */
|
||||
{
|
||||
if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
|
||||
continue;
|
||||
len = (int)(regmatch.endp[i] - regmatch.startp[i]);
|
||||
if (len > CMDBUFFSIZE - 5)
|
||||
len = CMDBUFFSIZE - 5;
|
||||
STRCPY(fields->pattern, "^\\V");
|
||||
STRNCAT(fields->pattern, regmatch.startp[i], len);
|
||||
fields->pattern[len + 3] = '\\';
|
||||
fields->pattern[len + 4] = '$';
|
||||
fields->pattern[len + 5] = NUL;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
qi->qf_multiscan = FALSE;
|
||||
|
||||
if (fmt_ptr == NULL || idx == 'D' || idx == 'X')
|
||||
{
|
||||
if (fmt_ptr != NULL)
|
||||
{
|
||||
if (idx == 'D') /* enter directory */
|
||||
{
|
||||
if (*fields->namebuf == NUL)
|
||||
{
|
||||
EMSG(_("E379: Missing or empty directory name"));
|
||||
return QF_FAIL;
|
||||
}
|
||||
qi->qf_directory =
|
||||
qf_push_dir(fields->namebuf, &qi->qf_dir_stack, FALSE);
|
||||
if (qi->qf_directory == NULL)
|
||||
return QF_FAIL;
|
||||
}
|
||||
else if (idx == 'X') /* leave directory */
|
||||
qi->qf_directory = qf_pop_dir(&qi->qf_dir_stack);
|
||||
}
|
||||
fields->namebuf[0] = NUL; /* no match found, remove file name */
|
||||
fields->lnum = 0; /* don't jump to this line */
|
||||
fields->valid = FALSE;
|
||||
if (linelen > fields->errmsglen) {
|
||||
/* linelen + null terminator */
|
||||
if ((fields->errmsg = vim_realloc(fields->errmsg,
|
||||
linelen + 1)) == NULL)
|
||||
return QF_NOMEM;
|
||||
fields->errmsglen = linelen + 1;
|
||||
}
|
||||
/* copy whole line to error message */
|
||||
vim_strncpy(fields->errmsg, linebuf, linelen);
|
||||
if (fmt_ptr == NULL)
|
||||
qi->qf_multiline = qi->qf_multiignore = FALSE;
|
||||
}
|
||||
else if (fmt_ptr != NULL)
|
||||
{
|
||||
/* honor %> item */
|
||||
if (fmt_ptr->conthere)
|
||||
fmt_start = fmt_ptr;
|
||||
|
||||
if (vim_strchr((char_u *)"AEWI", idx) != NULL)
|
||||
{
|
||||
qi->qf_multiline = TRUE; /* start of a multi-line message */
|
||||
qi->qf_multiignore = FALSE; /* reset continuation */
|
||||
}
|
||||
else if (vim_strchr((char_u *)"CZ", idx) != NULL)
|
||||
{ /* continuation of multi-line msg */
|
||||
qfline_T *qfprev = qi->qf_lists[qi->qf_curlist].qf_last;
|
||||
|
||||
if (qfprev == NULL)
|
||||
return QF_FAIL;
|
||||
if (*fields->errmsg && !qi->qf_multiignore)
|
||||
{
|
||||
len = (int)STRLEN(qfprev->qf_text);
|
||||
if ((ptr = alloc((unsigned)(len + STRLEN(fields->errmsg) + 2)))
|
||||
== NULL)
|
||||
return QF_FAIL;
|
||||
STRCPY(ptr, qfprev->qf_text);
|
||||
vim_free(qfprev->qf_text);
|
||||
qfprev->qf_text = ptr;
|
||||
*(ptr += len) = '\n';
|
||||
STRCPY(++ptr, fields->errmsg);
|
||||
}
|
||||
if (qfprev->qf_nr == -1)
|
||||
qfprev->qf_nr = fields->enr;
|
||||
if (vim_isprintc(fields->type) && !qfprev->qf_type)
|
||||
/* only printable chars allowed */
|
||||
qfprev->qf_type = fields->type;
|
||||
|
||||
if (!qfprev->qf_lnum)
|
||||
qfprev->qf_lnum = fields->lnum;
|
||||
if (!qfprev->qf_col)
|
||||
qfprev->qf_col = fields->col;
|
||||
qfprev->qf_viscol = fields->use_viscol;
|
||||
if (!qfprev->qf_fnum)
|
||||
qfprev->qf_fnum = qf_get_fnum(qi, qi->qf_directory,
|
||||
*fields->namebuf || qi->qf_directory != NULL
|
||||
? fields->namebuf
|
||||
: qi->qf_currfile != NULL && fields->valid
|
||||
? qi->qf_currfile : 0);
|
||||
if (idx == 'Z')
|
||||
qi->qf_multiline = qi->qf_multiignore = FALSE;
|
||||
line_breakcheck();
|
||||
return QF_IGNORE_LINE;
|
||||
}
|
||||
else if (vim_strchr((char_u *)"OPQ", idx) != NULL)
|
||||
{
|
||||
/* global file names */
|
||||
fields->valid = FALSE;
|
||||
if (*fields->namebuf == NUL || mch_getperm(fields->namebuf) >= 0)
|
||||
{
|
||||
if (*fields->namebuf && idx == 'P')
|
||||
qi->qf_currfile =
|
||||
qf_push_dir(fields->namebuf, &qi->qf_file_stack, TRUE);
|
||||
else if (idx == 'Q')
|
||||
qi->qf_currfile = qf_pop_dir(&qi->qf_file_stack);
|
||||
*fields->namebuf = NUL;
|
||||
if (tail && *tail)
|
||||
{
|
||||
STRMOVE(IObuff, skipwhite(tail));
|
||||
qi->qf_multiscan = TRUE;
|
||||
goto restofline;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fmt_ptr->flags == '-') /* generally exclude this line */
|
||||
{
|
||||
if (qi->qf_multiline)
|
||||
/* also exclude continuation lines */
|
||||
qi->qf_multiignore = TRUE;
|
||||
return QF_IGNORE_LINE;
|
||||
}
|
||||
}
|
||||
|
||||
return QF_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read the errorfile "efile" into memory, line by line, building the error
|
||||
* list.
|
||||
@@ -786,40 +1112,24 @@ qf_init_ext(
|
||||
linenr_T lnumlast, /* last line number to use */
|
||||
char_u *qf_title)
|
||||
{
|
||||
char_u *namebuf;
|
||||
char_u *errmsg;
|
||||
int errmsglen;
|
||||
char_u *pattern;
|
||||
qfstate_T state = {NULL, 0, NULL, 0, NULL, NULL, NULL, NULL,
|
||||
NULL, 0, 0};
|
||||
int col = 0;
|
||||
char_u use_viscol = FALSE;
|
||||
int type = 0;
|
||||
int valid;
|
||||
long lnum = 0L;
|
||||
int enr = 0;
|
||||
qffields_T fields = {NULL, NULL, 0, 0L, 0, FALSE, NULL, 0, 0, 0};
|
||||
#ifdef FEAT_WINDOWS
|
||||
qfline_T *old_last = NULL;
|
||||
#endif
|
||||
static efm_T *fmt_first = NULL;
|
||||
efm_T *fmt_ptr;
|
||||
efm_T *fmt_start = NULL;
|
||||
char_u *efm;
|
||||
static char_u *last_efm = NULL;
|
||||
char_u *ptr;
|
||||
int len;
|
||||
int i;
|
||||
int idx = 0;
|
||||
int retval = -1; /* default: return error flag */
|
||||
int status;
|
||||
char_u *tail = NULL;
|
||||
regmatch_T regmatch;
|
||||
|
||||
namebuf = alloc_id(CMDBUFFSIZE + 1, aid_qf_namebuf);
|
||||
errmsglen = CMDBUFFSIZE + 1;
|
||||
errmsg = alloc_id(errmsglen, aid_qf_errmsg);
|
||||
pattern = alloc_id(CMDBUFFSIZE + 1, aid_qf_pattern);
|
||||
if (namebuf == NULL || errmsg == NULL || pattern == NULL)
|
||||
fields.namebuf = alloc_id(CMDBUFFSIZE + 1, aid_qf_namebuf);
|
||||
fields.errmsglen = CMDBUFFSIZE + 1;
|
||||
fields.errmsg = alloc_id(fields.errmsglen, aid_qf_errmsg);
|
||||
fields.pattern = alloc_id(CMDBUFFSIZE + 1, aid_qf_pattern);
|
||||
if (fields.namebuf == NULL || fields.errmsg == NULL ||
|
||||
fields.pattern == NULL)
|
||||
goto qf_init_end;
|
||||
|
||||
if (efile != NULL && (state.fd = mch_fopen((char *)efile, "r")) == NULL)
|
||||
@@ -839,10 +1149,6 @@ qf_init_ext(
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Each part of the format string is copied and modified from errorformat to
|
||||
* regex prog. Only a few % characters are allowed.
|
||||
*/
|
||||
/* Use the local value of 'errorformat' if it's set. */
|
||||
if (errorformat == p_efm && tv == NULL && *buf->b_p_efm != NUL)
|
||||
efm = buf->b_p_efm;
|
||||
@@ -890,9 +1196,6 @@ qf_init_ext(
|
||||
*/
|
||||
got_int = FALSE;
|
||||
|
||||
/* Always ignore case when looking for a matching error. */
|
||||
regmatch.rm_ic = TRUE;
|
||||
|
||||
if (tv != NULL)
|
||||
{
|
||||
if (tv->v_type == VAR_STRING)
|
||||
@@ -918,298 +1221,30 @@ qf_init_ext(
|
||||
if (status == QF_END_OF_INPUT) /* end of input */
|
||||
break;
|
||||
|
||||
/* If there was no %> item start at the first pattern */
|
||||
if (fmt_start == NULL)
|
||||
fmt_ptr = fmt_first;
|
||||
else
|
||||
{
|
||||
fmt_ptr = fmt_start;
|
||||
fmt_start = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Try to match each part of 'errorformat' until we find a complete
|
||||
* match or no match.
|
||||
*/
|
||||
valid = TRUE;
|
||||
restofline:
|
||||
for ( ; fmt_ptr != NULL; fmt_ptr = fmt_ptr->next)
|
||||
{
|
||||
int r;
|
||||
|
||||
idx = fmt_ptr->prefix;
|
||||
if (qi->qf_multiscan && vim_strchr((char_u *)"OPQ", idx) == NULL)
|
||||
continue;
|
||||
namebuf[0] = NUL;
|
||||
pattern[0] = NUL;
|
||||
if (!qi->qf_multiscan)
|
||||
errmsg[0] = NUL;
|
||||
lnum = 0;
|
||||
col = 0;
|
||||
use_viscol = FALSE;
|
||||
enr = -1;
|
||||
type = 0;
|
||||
tail = NULL;
|
||||
|
||||
regmatch.regprog = fmt_ptr->prog;
|
||||
r = vim_regexec(®match, state.linebuf, (colnr_T)0);
|
||||
fmt_ptr->prog = regmatch.regprog;
|
||||
if (r)
|
||||
{
|
||||
if ((idx == 'C' || idx == 'Z') && !qi->qf_multiline)
|
||||
continue;
|
||||
if (vim_strchr((char_u *)"EWI", idx) != NULL)
|
||||
type = idx;
|
||||
else
|
||||
type = 0;
|
||||
/*
|
||||
* Extract error message data from matched line.
|
||||
* We check for an actual submatch, because "\[" and "\]" in
|
||||
* the 'errorformat' may cause the wrong submatch to be used.
|
||||
*/
|
||||
if ((i = (int)fmt_ptr->addr[0]) > 0) /* %f */
|
||||
{
|
||||
int c;
|
||||
|
||||
if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
|
||||
continue;
|
||||
|
||||
/* Expand ~/file and $HOME/file to full path. */
|
||||
c = *regmatch.endp[i];
|
||||
*regmatch.endp[i] = NUL;
|
||||
expand_env(regmatch.startp[i], namebuf, CMDBUFFSIZE);
|
||||
*regmatch.endp[i] = c;
|
||||
|
||||
if (vim_strchr((char_u *)"OPQ", idx) != NULL
|
||||
&& mch_getperm(namebuf) == -1)
|
||||
continue;
|
||||
}
|
||||
if ((i = (int)fmt_ptr->addr[1]) > 0) /* %n */
|
||||
{
|
||||
if (regmatch.startp[i] == NULL)
|
||||
continue;
|
||||
enr = (int)atol((char *)regmatch.startp[i]);
|
||||
}
|
||||
if ((i = (int)fmt_ptr->addr[2]) > 0) /* %l */
|
||||
{
|
||||
if (regmatch.startp[i] == NULL)
|
||||
continue;
|
||||
lnum = atol((char *)regmatch.startp[i]);
|
||||
}
|
||||
if ((i = (int)fmt_ptr->addr[3]) > 0) /* %c */
|
||||
{
|
||||
if (regmatch.startp[i] == NULL)
|
||||
continue;
|
||||
col = (int)atol((char *)regmatch.startp[i]);
|
||||
}
|
||||
if ((i = (int)fmt_ptr->addr[4]) > 0) /* %t */
|
||||
{
|
||||
if (regmatch.startp[i] == NULL)
|
||||
continue;
|
||||
type = *regmatch.startp[i];
|
||||
}
|
||||
if (fmt_ptr->flags == '+' && !qi->qf_multiscan) /* %+ */
|
||||
{
|
||||
if (state.linelen > errmsglen) {
|
||||
/* linelen + null terminator */
|
||||
if ((errmsg = vim_realloc(errmsg,
|
||||
state.linelen + 1)) == NULL)
|
||||
goto qf_init_end;
|
||||
errmsglen = state.linelen + 1;
|
||||
}
|
||||
vim_strncpy(errmsg, state.linebuf, state.linelen);
|
||||
}
|
||||
else if ((i = (int)fmt_ptr->addr[5]) > 0) /* %m */
|
||||
{
|
||||
if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
|
||||
continue;
|
||||
len = (int)(regmatch.endp[i] - regmatch.startp[i]);
|
||||
if (len > errmsglen) {
|
||||
/* len + null terminator */
|
||||
if ((errmsg = vim_realloc(errmsg, len + 1))
|
||||
== NULL)
|
||||
goto qf_init_end;
|
||||
errmsglen = len + 1;
|
||||
}
|
||||
vim_strncpy(errmsg, regmatch.startp[i], len);
|
||||
}
|
||||
if ((i = (int)fmt_ptr->addr[6]) > 0) /* %r */
|
||||
{
|
||||
if (regmatch.startp[i] == NULL)
|
||||
continue;
|
||||
tail = regmatch.startp[i];
|
||||
}
|
||||
if ((i = (int)fmt_ptr->addr[7]) > 0) /* %p */
|
||||
{
|
||||
char_u *match_ptr;
|
||||
|
||||
if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
|
||||
continue;
|
||||
col = 0;
|
||||
for (match_ptr = regmatch.startp[i];
|
||||
match_ptr != regmatch.endp[i]; ++match_ptr)
|
||||
{
|
||||
++col;
|
||||
if (*match_ptr == TAB)
|
||||
{
|
||||
col += 7;
|
||||
col -= col % 8;
|
||||
}
|
||||
}
|
||||
++col;
|
||||
use_viscol = TRUE;
|
||||
}
|
||||
if ((i = (int)fmt_ptr->addr[8]) > 0) /* %v */
|
||||
{
|
||||
if (regmatch.startp[i] == NULL)
|
||||
continue;
|
||||
col = (int)atol((char *)regmatch.startp[i]);
|
||||
use_viscol = TRUE;
|
||||
}
|
||||
if ((i = (int)fmt_ptr->addr[9]) > 0) /* %s */
|
||||
{
|
||||
if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
|
||||
continue;
|
||||
len = (int)(regmatch.endp[i] - regmatch.startp[i]);
|
||||
if (len > CMDBUFFSIZE - 5)
|
||||
len = CMDBUFFSIZE - 5;
|
||||
STRCPY(pattern, "^\\V");
|
||||
STRNCAT(pattern, regmatch.startp[i], len);
|
||||
pattern[len + 3] = '\\';
|
||||
pattern[len + 4] = '$';
|
||||
pattern[len + 5] = NUL;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
qi->qf_multiscan = FALSE;
|
||||
|
||||
if (fmt_ptr == NULL || idx == 'D' || idx == 'X')
|
||||
{
|
||||
if (fmt_ptr != NULL)
|
||||
{
|
||||
if (idx == 'D') /* enter directory */
|
||||
{
|
||||
if (*namebuf == NUL)
|
||||
{
|
||||
EMSG(_("E379: Missing or empty directory name"));
|
||||
goto error2;
|
||||
}
|
||||
qi->qf_directory =
|
||||
qf_push_dir(namebuf, &qi->qf_dir_stack, FALSE);
|
||||
if (qi->qf_directory == NULL)
|
||||
goto error2;
|
||||
}
|
||||
else if (idx == 'X') /* leave directory */
|
||||
qi->qf_directory = qf_pop_dir(&qi->qf_dir_stack);
|
||||
}
|
||||
namebuf[0] = NUL; /* no match found, remove file name */
|
||||
lnum = 0; /* don't jump to this line */
|
||||
valid = FALSE;
|
||||
if (state.linelen > errmsglen) {
|
||||
/* linelen + null terminator */
|
||||
if ((errmsg = vim_realloc(errmsg, state.linelen + 1)) == NULL)
|
||||
goto qf_init_end;
|
||||
errmsglen = state.linelen + 1;
|
||||
}
|
||||
/* copy whole line to error message */
|
||||
vim_strncpy(errmsg, state.linebuf, state.linelen);
|
||||
if (fmt_ptr == NULL)
|
||||
qi->qf_multiline = qi->qf_multiignore = FALSE;
|
||||
}
|
||||
else if (fmt_ptr != NULL)
|
||||
{
|
||||
/* honor %> item */
|
||||
if (fmt_ptr->conthere)
|
||||
fmt_start = fmt_ptr;
|
||||
|
||||
if (vim_strchr((char_u *)"AEWI", idx) != NULL)
|
||||
{
|
||||
qi->qf_multiline = TRUE; /* start of a multi-line message */
|
||||
qi->qf_multiignore = FALSE; /* reset continuation */
|
||||
}
|
||||
else if (vim_strchr((char_u *)"CZ", idx) != NULL)
|
||||
{ /* continuation of multi-line msg */
|
||||
qfline_T *qfprev = qi->qf_lists[qi->qf_curlist].qf_last;
|
||||
|
||||
if (qfprev == NULL)
|
||||
goto error2;
|
||||
if (*errmsg && !qi->qf_multiignore)
|
||||
{
|
||||
len = (int)STRLEN(qfprev->qf_text);
|
||||
if ((ptr = alloc((unsigned)(len + STRLEN(errmsg) + 2)))
|
||||
== NULL)
|
||||
goto error2;
|
||||
STRCPY(ptr, qfprev->qf_text);
|
||||
vim_free(qfprev->qf_text);
|
||||
qfprev->qf_text = ptr;
|
||||
*(ptr += len) = '\n';
|
||||
STRCPY(++ptr, errmsg);
|
||||
}
|
||||
if (qfprev->qf_nr == -1)
|
||||
qfprev->qf_nr = enr;
|
||||
if (vim_isprintc(type) && !qfprev->qf_type)
|
||||
qfprev->qf_type = type; /* only printable chars allowed */
|
||||
if (!qfprev->qf_lnum)
|
||||
qfprev->qf_lnum = lnum;
|
||||
if (!qfprev->qf_col)
|
||||
qfprev->qf_col = col;
|
||||
qfprev->qf_viscol = use_viscol;
|
||||
if (!qfprev->qf_fnum)
|
||||
qfprev->qf_fnum = qf_get_fnum(qi, qi->qf_directory,
|
||||
*namebuf || qi->qf_directory != NULL
|
||||
? namebuf
|
||||
: qi->qf_currfile != NULL && valid
|
||||
? qi->qf_currfile : 0);
|
||||
if (idx == 'Z')
|
||||
qi->qf_multiline = qi->qf_multiignore = FALSE;
|
||||
line_breakcheck();
|
||||
continue;
|
||||
}
|
||||
else if (vim_strchr((char_u *)"OPQ", idx) != NULL)
|
||||
{
|
||||
/* global file names */
|
||||
valid = FALSE;
|
||||
if (*namebuf == NUL || mch_getperm(namebuf) >= 0)
|
||||
{
|
||||
if (*namebuf && idx == 'P')
|
||||
qi->qf_currfile =
|
||||
qf_push_dir(namebuf, &qi->qf_file_stack, TRUE);
|
||||
else if (idx == 'Q')
|
||||
qi->qf_currfile = qf_pop_dir(&qi->qf_file_stack);
|
||||
*namebuf = NUL;
|
||||
if (tail && *tail)
|
||||
{
|
||||
STRMOVE(IObuff, skipwhite(tail));
|
||||
qi->qf_multiscan = TRUE;
|
||||
goto restofline;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fmt_ptr->flags == '-') /* generally exclude this line */
|
||||
{
|
||||
if (qi->qf_multiline)
|
||||
/* also exclude continuation lines */
|
||||
qi->qf_multiignore = TRUE;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
status = qf_parse_line(qi, state.linebuf, state.linelen, fmt_first,
|
||||
&fields);
|
||||
if (status == QF_FAIL)
|
||||
goto error2;
|
||||
if (status == QF_NOMEM)
|
||||
goto qf_init_end;
|
||||
if (status == QF_IGNORE_LINE)
|
||||
continue;
|
||||
|
||||
if (qf_add_entry(qi,
|
||||
qi->qf_directory,
|
||||
(*namebuf || qi->qf_directory != NULL)
|
||||
? namebuf
|
||||
: ((qi->qf_currfile != NULL && valid)
|
||||
(*fields.namebuf || qi->qf_directory != NULL)
|
||||
? fields.namebuf
|
||||
: ((qi->qf_currfile != NULL && fields.valid)
|
||||
? qi->qf_currfile : (char_u *)NULL),
|
||||
0,
|
||||
errmsg,
|
||||
lnum,
|
||||
col,
|
||||
use_viscol,
|
||||
pattern,
|
||||
enr,
|
||||
type,
|
||||
valid) == FAIL)
|
||||
fields.errmsg,
|
||||
fields.lnum,
|
||||
fields.col,
|
||||
fields.use_viscol,
|
||||
fields.pattern,
|
||||
fields.enr,
|
||||
fields.type,
|
||||
fields.valid) == FAIL)
|
||||
goto error2;
|
||||
line_breakcheck();
|
||||
}
|
||||
@@ -1243,9 +1278,9 @@ error2:
|
||||
qf_init_end:
|
||||
if (state.fd != NULL)
|
||||
fclose(state.fd);
|
||||
vim_free(namebuf);
|
||||
vim_free(errmsg);
|
||||
vim_free(pattern);
|
||||
vim_free(fields.namebuf);
|
||||
vim_free(fields.errmsg);
|
||||
vim_free(fields.pattern);
|
||||
vim_free(state.growbuf);
|
||||
|
||||
#ifdef FEAT_WINDOWS
|
||||
@@ -2560,7 +2595,7 @@ qf_msg(qf_info_T *qi, int which, char *lead)
|
||||
{
|
||||
while (STRLEN(buf) < 34)
|
||||
STRCAT(buf, " ");
|
||||
STRCAT(buf, title);
|
||||
vim_strcat(buf, title, IOSIZE);
|
||||
}
|
||||
trunc_string(buf, buf, Columns - 1, IOSIZE);
|
||||
msg(buf);
|
||||
|
||||
+1
-2
@@ -600,8 +600,7 @@ typedef struct wordcount_S
|
||||
char_u wc_word[1]; /* word, actually longer */
|
||||
} wordcount_T;
|
||||
|
||||
static wordcount_T dumwc;
|
||||
#define WC_KEY_OFF (unsigned)(dumwc.wc_word - (char_u *)&dumwc)
|
||||
#define WC_KEY_OFF offsetof(wordcount_T, wc_word)
|
||||
#define HI2WC(hi) ((wordcount_T *)((hi)->hi_key - WC_KEY_OFF))
|
||||
#define MAXWORDCOUNT 0xffff
|
||||
|
||||
|
||||
@@ -3136,3 +3136,48 @@ typedef struct
|
||||
int diff_mode; /* start with 'diff' set */
|
||||
#endif
|
||||
} mparm_T;
|
||||
|
||||
/*
|
||||
* Structure returned by get_lval() and used by set_var_lval().
|
||||
* For a plain name:
|
||||
* "name" points to the variable name.
|
||||
* "exp_name" is NULL.
|
||||
* "tv" is NULL
|
||||
* For a magic braces name:
|
||||
* "name" points to the expanded variable name.
|
||||
* "exp_name" is non-NULL, to be freed later.
|
||||
* "tv" is NULL
|
||||
* For an index in a list:
|
||||
* "name" points to the (expanded) variable name.
|
||||
* "exp_name" NULL or non-NULL, to be freed later.
|
||||
* "tv" points to the (first) list item value
|
||||
* "li" points to the (first) list item
|
||||
* "range", "n1", "n2" and "empty2" indicate what items are used.
|
||||
* For an existing Dict item:
|
||||
* "name" points to the (expanded) variable name.
|
||||
* "exp_name" NULL or non-NULL, to be freed later.
|
||||
* "tv" points to the dict item value
|
||||
* "newkey" is NULL
|
||||
* For a non-existing Dict item:
|
||||
* "name" points to the (expanded) variable name.
|
||||
* "exp_name" NULL or non-NULL, to be freed later.
|
||||
* "tv" points to the Dictionary typval_T
|
||||
* "newkey" is the key for the new item.
|
||||
*/
|
||||
typedef struct lval_S
|
||||
{
|
||||
char_u *ll_name; /* start of variable name (can be NULL) */
|
||||
char_u *ll_exp_name; /* NULL or expanded name in allocated memory. */
|
||||
typval_T *ll_tv; /* Typeval of item being used. If "newkey"
|
||||
isn't NULL it's the Dict to which to add
|
||||
the item. */
|
||||
listitem_T *ll_li; /* The list item or NULL. */
|
||||
list_T *ll_list; /* The list or NULL. */
|
||||
int ll_range; /* TRUE when a [i:j] range was used */
|
||||
long ll_n1; /* First index for list */
|
||||
long ll_n2; /* Second index for list range */
|
||||
int ll_empty2; /* Second index is empty: [i:] */
|
||||
dict_T *ll_dict; /* The Dictionary or NULL */
|
||||
dictitem_T *ll_di; /* The dictitem or NULL */
|
||||
char_u *ll_newkey; /* New key for Dict in alloc. mem or NULL. */
|
||||
} lval_T;
|
||||
|
||||
@@ -45,5 +45,79 @@ func Test_getcompletion()
|
||||
call assert_true(matchcount > 0)
|
||||
endif
|
||||
|
||||
let l = getcompletion('v:n', 'var')
|
||||
call assert_true(index(l, 'v:null') >= 0)
|
||||
|
||||
let l = getcompletion('', 'augroup')
|
||||
call assert_true(index(l, 'END') >= 0)
|
||||
|
||||
let l = getcompletion('', 'behave')
|
||||
call assert_true(index(l, 'mswin') >= 0)
|
||||
|
||||
let l = getcompletion('', 'color')
|
||||
call assert_true(index(l, 'default') >= 0)
|
||||
|
||||
let l = getcompletion('', 'command')
|
||||
call assert_true(index(l, 'sleep') >= 0)
|
||||
|
||||
let l = getcompletion('', 'dir')
|
||||
call assert_true(index(l, 'samples') >= 0)
|
||||
|
||||
let l = getcompletion('exe', 'expression')
|
||||
call assert_true(index(l, 'executable(') >= 0)
|
||||
|
||||
let l = getcompletion('tag', 'function')
|
||||
call assert_true(index(l, 'taglist(') >= 0)
|
||||
|
||||
let l = getcompletion('run', 'file')
|
||||
call assert_true(index(l, 'runtest.vim') >= 0)
|
||||
|
||||
let l = getcompletion('ha', 'filetype')
|
||||
call assert_true(index(l, 'hamster') >= 0)
|
||||
|
||||
let l = getcompletion('z', 'syntax')
|
||||
call assert_true(index(l, 'zimbu') >= 0)
|
||||
|
||||
let l = getcompletion('jikes', 'compiler')
|
||||
call assert_true(index(l, 'jikes') >= 0)
|
||||
|
||||
let l = getcompletion('last', 'help')
|
||||
call assert_true(index(l, ':tablast') >= 0)
|
||||
|
||||
let l = getcompletion('time', 'option')
|
||||
call assert_true(index(l, 'timeoutlen') >= 0)
|
||||
|
||||
let l = getcompletion('er', 'highlight')
|
||||
call assert_true(index(l, 'ErrorMsg') >= 0)
|
||||
|
||||
" For others test if the name is recognized.
|
||||
let names = ['buffer', 'environment', 'file_in_path',
|
||||
\ 'mapping', 'shellcmd', 'tag', 'tag_listfiles', 'user']
|
||||
if has('cscope')
|
||||
call add(names, 'cscope')
|
||||
endif
|
||||
if has('cmdline_hist')
|
||||
call add(names, 'history')
|
||||
endif
|
||||
if has('gettext')
|
||||
call add(names, 'locale')
|
||||
endif
|
||||
if has('profile')
|
||||
call add(names, 'syntime')
|
||||
endif
|
||||
if has('signs')
|
||||
call add(names, 'sign')
|
||||
endif
|
||||
|
||||
set tags=Xtags
|
||||
call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", "word\tfile\tcmd"], 'Xtags')
|
||||
|
||||
for name in names
|
||||
let matchcount = len(getcompletion('', name))
|
||||
call assert_true(matchcount >= 0, 'No matches for ' . name)
|
||||
endfor
|
||||
|
||||
call delete('Xtags')
|
||||
|
||||
call assert_fails('call getcompletion("", "burp")', 'E475:')
|
||||
endfunc
|
||||
|
||||
@@ -922,6 +922,30 @@ function! Test_efm2()
|
||||
call assert_equal('E', l[0].type)
|
||||
call assert_equal("\nunknown variable 'i'", l[0].text)
|
||||
|
||||
" Test for %A, %C and other formats
|
||||
let lines = [
|
||||
\"==============================================================",
|
||||
\"FAIL: testGetTypeIdCachesResult (dbfacadeTest.DjsDBFacadeTest)",
|
||||
\"--------------------------------------------------------------",
|
||||
\"Traceback (most recent call last):",
|
||||
\' File "unittests/dbfacadeTest.py", line 89, in testFoo',
|
||||
\" self.assertEquals(34, dtid)",
|
||||
\' File "/usr/lib/python2.2/unittest.py", line 286, in',
|
||||
\" failUnlessEqual",
|
||||
\" raise self.failureException, \\",
|
||||
\"AssertionError: 34 != 33",
|
||||
\"",
|
||||
\"--------------------------------------------------------------",
|
||||
\"Ran 27 tests in 0.063s"
|
||||
\]
|
||||
set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%m
|
||||
cgetexpr lines
|
||||
let l = getqflist()
|
||||
call assert_equal(8, len(l))
|
||||
call assert_equal(89, l[4].lnum)
|
||||
call assert_equal(1, l[4].valid)
|
||||
call assert_equal('unittests/dbfacadeTest.py', bufname(l[4].bufnr))
|
||||
|
||||
let &efm = save_efm
|
||||
endfunction
|
||||
|
||||
|
||||
+3494
File diff suppressed because it is too large
Load Diff
@@ -773,6 +773,24 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
2066,
|
||||
/**/
|
||||
2065,
|
||||
/**/
|
||||
2064,
|
||||
/**/
|
||||
2063,
|
||||
/**/
|
||||
2062,
|
||||
/**/
|
||||
2061,
|
||||
/**/
|
||||
2060,
|
||||
/**/
|
||||
2059,
|
||||
/**/
|
||||
2058,
|
||||
/**/
|
||||
2057,
|
||||
/**/
|
||||
|
||||
@@ -506,6 +506,9 @@ typedef unsigned long u8char_T; /* long should be 32 bits or more */
|
||||
#endif
|
||||
#include <stdarg.h>
|
||||
|
||||
/* for offsetof() */
|
||||
#include <stddef.h>
|
||||
|
||||
#if defined(HAVE_SYS_SELECT_H) && \
|
||||
(!defined(HAVE_SYS_TIME_H) || defined(SYS_SELECT_WITH_SYS_TIME))
|
||||
# include <sys/select.h>
|
||||
@@ -2051,6 +2054,15 @@ typedef struct _stat64 stat_T;
|
||||
typedef struct stat stat_T;
|
||||
#endif
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ASSERT_EQUAL,
|
||||
ASSERT_NOTEQUAL,
|
||||
ASSERT_MATCH,
|
||||
ASSERT_NOTMATCH,
|
||||
ASSERT_OTHER
|
||||
} assert_type_T;
|
||||
|
||||
#include "ex_cmds.h" /* Ex command defines */
|
||||
#include "proto.h" /* function prototypes */
|
||||
|
||||
@@ -2410,4 +2422,29 @@ int vim_main2(int argc, char **argv);
|
||||
#define COPYID_INC 2
|
||||
#define COPYID_MASK (~0x1)
|
||||
|
||||
/* Values for trans_function_name() argument: */
|
||||
#define TFN_INT 1 /* internal function name OK */
|
||||
#define TFN_QUIET 2 /* no error messages */
|
||||
#define TFN_NO_AUTOLOAD 4 /* do not use script autoloading */
|
||||
|
||||
/* Values for get_lval() flags argument: */
|
||||
#define GLV_QUIET TFN_QUIET /* no error messages */
|
||||
#define GLV_NO_AUTOLOAD TFN_NO_AUTOLOAD /* do not use script autoloading */
|
||||
|
||||
#define DO_NOT_FREE_CNT 99999 /* refcount for dict or list that should not
|
||||
be freed. */
|
||||
|
||||
/* errors for when calling a function */
|
||||
#define ERROR_UNKNOWN 0
|
||||
#define ERROR_TOOMANY 1
|
||||
#define ERROR_TOOFEW 2
|
||||
#define ERROR_SCRIPT 3
|
||||
#define ERROR_DICT 4
|
||||
#define ERROR_NONE 5
|
||||
#define ERROR_OTHER 6
|
||||
|
||||
/* flags for find_name_end() */
|
||||
#define FNE_INCL_BR 1 /* include [] in name */
|
||||
#define FNE_CHECK_START 2 /* check name starts with valid character */
|
||||
|
||||
#endif /* VIM__H */
|
||||
|
||||
Reference in New Issue
Block a user