forked from aniani/vim
patch 8.2.3860: Vim9: codecov struggles with the file size
Problem: Vim9: codecov struggles with the file size. Solution: Split vim9compile.c into four files.
This commit is contained in:
parent
a99fb23842
commit
dc7c366f3a
@ -180,8 +180,11 @@ SRC += \
|
||||
userfunc.c \
|
||||
version.c \
|
||||
viminfo.c \
|
||||
vim9cmds.c \
|
||||
vim9compile.c \
|
||||
vim9execute.c \
|
||||
vim9expr.c \
|
||||
vim9instr.c \
|
||||
vim9script.c \
|
||||
vim9type.c \
|
||||
window.c \
|
||||
|
@ -825,8 +825,11 @@ OBJ = \
|
||||
$(OUTDIR)/usercmd.o \
|
||||
$(OUTDIR)/userfunc.o \
|
||||
$(OUTDIR)/version.o \
|
||||
$(OUTDIR)/vim9cmds.o \
|
||||
$(OUTDIR)/vim9compile.o \
|
||||
$(OUTDIR)/vim9execute.o \
|
||||
$(OUTDIR)/vim9expr.o \
|
||||
$(OUTDIR)/vim9instr.o \
|
||||
$(OUTDIR)/vim9script.o \
|
||||
$(OUTDIR)/vim9type.o \
|
||||
$(OUTDIR)/viminfo.o \
|
||||
@ -1203,10 +1206,16 @@ $(OUTDIR)/netbeans.o: netbeans.c $(INCL) version.h
|
||||
|
||||
$(OUTDIR)/version.o: version.c $(INCL) version.h
|
||||
|
||||
$(OUTDIR)/vim9cmds.o: vim9cmds.c $(INCL) version.h
|
||||
|
||||
$(OUTDIR)/vim9compile.o: vim9compile.c $(INCL) version.h
|
||||
|
||||
$(OUTDIR)/vim9execute.o: vim9execute.c $(INCL) version.h
|
||||
|
||||
$(OUTDIR)/vim9expr.o: vim9expr.c $(INCL) version.h
|
||||
|
||||
$(OUTDIR)/vim9instr.o: vim9instr.c $(INCL) version.h
|
||||
|
||||
$(OUTDIR)/vim9script.o: vim9script.c $(INCL) version.h
|
||||
|
||||
$(OUTDIR)/vim9type.o: vim9type.c $(INCL) version.h
|
||||
|
@ -842,8 +842,11 @@ OBJ = \
|
||||
$(OUTDIR)\undo.obj \
|
||||
$(OUTDIR)\usercmd.obj \
|
||||
$(OUTDIR)\userfunc.obj \
|
||||
$(OUTDIR)\vim9cmds.obj \
|
||||
$(OUTDIR)\vim9compile.obj \
|
||||
$(OUTDIR)\vim9execute.obj \
|
||||
$(OUTDIR)\vim9expr.obj \
|
||||
$(OUTDIR)\vim9instr.obj \
|
||||
$(OUTDIR)\vim9script.obj \
|
||||
$(OUTDIR)\vim9type.obj \
|
||||
$(OUTDIR)\viminfo.obj \
|
||||
@ -1834,10 +1837,16 @@ $(OUTDIR)/userfunc.obj: $(OUTDIR) userfunc.c $(INCL)
|
||||
|
||||
$(OUTDIR)/version.obj: $(OUTDIR) version.c $(INCL) version.h
|
||||
|
||||
$(OUTDIR)/vim9cmds.obj: $(OUTDIR) vim9cmds.c $(INCL)
|
||||
|
||||
$(OUTDIR)/vim9compile.obj: $(OUTDIR) vim9compile.c $(INCL)
|
||||
|
||||
$(OUTDIR)/vim9execute.obj: $(OUTDIR) vim9execute.c $(INCL)
|
||||
|
||||
$(OUTDIR)/vim9expr.obj: $(OUTDIR) vim9expr.c $(INCL)
|
||||
|
||||
$(OUTDIR)/vim9instr.obj: $(OUTDIR) vim9instr.c $(INCL)
|
||||
|
||||
$(OUTDIR)/vim9script.obj: $(OUTDIR) vim9script.c $(INCL)
|
||||
|
||||
$(OUTDIR)/vim9type.obj: $(OUTDIR) vim9type.c $(INCL)
|
||||
@ -2041,8 +2050,11 @@ proto.h: \
|
||||
proto/undo.pro \
|
||||
proto/usercmd.pro \
|
||||
proto/userfunc.pro \
|
||||
proto/vim9cmds.pro \
|
||||
proto/vim9compile.pro \
|
||||
proto/vim9execute.pro \
|
||||
proto/vim9expr.pro \
|
||||
proto/vim9instr.pro \
|
||||
proto/vim9script.pro \
|
||||
proto/vim9type.pro \
|
||||
proto/viminfo.pro \
|
||||
|
@ -2,7 +2,7 @@
|
||||
# Makefile for Vim on OpenVMS
|
||||
#
|
||||
# Maintainer: Zoltan Arpadffy <arpadffy@polarhome.com>
|
||||
# Last change: 2021 Nov 19
|
||||
# Last change: 2021 Dec 20
|
||||
#
|
||||
# This script has been tested on VMS 6.2 to 8.4 on DEC Alpha, VAX and IA64
|
||||
# with MMS and MMK
|
||||
@ -410,8 +410,11 @@ SRC = \
|
||||
usercmd.c \
|
||||
userfunc.c \
|
||||
version.c \
|
||||
vim9cmds.c \
|
||||
vim9compile.c \
|
||||
vim9execute.c \
|
||||
vim9expr.c \
|
||||
vim9instr.c \
|
||||
vim9script.c \
|
||||
vim9type.c \
|
||||
viminfo.c \
|
||||
@ -531,8 +534,11 @@ OBJ = \
|
||||
usercmd.obj \
|
||||
userfunc.obj \
|
||||
version.obj \
|
||||
vim9cmds.obj \
|
||||
vim9compile.obj \
|
||||
vim9execute.obj \
|
||||
vim9expr.obj \
|
||||
vim9instr.obj \
|
||||
vim9script.obj \
|
||||
vim9type.obj \
|
||||
viminfo.obj \
|
||||
@ -1112,6 +1118,10 @@ viminfo.obj : viminfo.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h termdefs.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
errors.h globals.h version.h
|
||||
vim9cmds.obj : vim9cmds.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h termdefs.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
errors.h globals.h version.h
|
||||
vim9compile.obj : vim9compile.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h termdefs.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
@ -1120,6 +1130,14 @@ vim9execute.obj : vim9execute.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h termdefs.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
errors.h globals.h version.h
|
||||
vim9expr.obj : vim9expr.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h termdefs.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
errors.h globals.h version.h
|
||||
vim9instr.obj : vim9instr.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h termdefs.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
errors.h globals.h version.h
|
||||
vim9script.obj : vim9script.c vim.h [.auto]config.h feature.h os_unix.h \
|
||||
ascii.h keymap.h termdefs.h macros.h structs.h regexp.h \
|
||||
gui.h beval.h [.proto]gui_beval.pro option.h ex_cmds.h proto.h \
|
||||
|
52
src/Makefile
52
src/Makefile
@ -368,7 +368,7 @@ CClink = $(CC)
|
||||
#CONF_OPT_GUI = --enable-gui=gtk2 --disable-gtktest
|
||||
#CONF_OPT_GUI = --enable-gui=gnome2
|
||||
#CONF_OPT_GUI = --enable-gui=gnome2 --disable-gtktest
|
||||
#CONF_OPT_GUI = --enable-gui=gtk3
|
||||
CONF_OPT_GUI = --enable-gui=gtk3
|
||||
#CONF_OPT_GUI = --enable-gui=gtk3 --disable-gtktest
|
||||
#CONF_OPT_GUI = --enable-gui=motif
|
||||
#CONF_OPT_GUI = --enable-gui=motif --with-motif-lib="-static -lXm -shared"
|
||||
@ -404,7 +404,7 @@ CClink = $(CC)
|
||||
# Use --with-luajit if you want to use LuaJIT instead of Lua.
|
||||
# Set PATH environment variable to find lua or luajit executable.
|
||||
# This requires at least "normal" features, "tiny" and "small" don't work.
|
||||
#CONF_OPT_LUA = --enable-luainterp
|
||||
CONF_OPT_LUA = --enable-luainterp
|
||||
#CONF_OPT_LUA = --enable-luainterp=dynamic
|
||||
#CONF_OPT_LUA = --enable-luainterp --with-luajit
|
||||
#CONF_OPT_LUA = --enable-luainterp=dynamic --with-luajit
|
||||
@ -433,7 +433,7 @@ CClink = $(CC)
|
||||
# When you get an error for a missing "perl.exp" file, try creating an empty
|
||||
# one: "touch perl.exp".
|
||||
# This requires at least "normal" features, "tiny" and "small" don't work.
|
||||
#CONF_OPT_PERL = --enable-perlinterp
|
||||
CONF_OPT_PERL = --enable-perlinterp
|
||||
#CONF_OPT_PERL = --enable-perlinterp=dynamic
|
||||
|
||||
# PYTHON
|
||||
@ -453,7 +453,7 @@ CClink = $(CC)
|
||||
#CONF_OPT_PYTHON = --enable-pythoninterp
|
||||
#CONF_OPT_PYTHON = --enable-pythoninterp --with-python-command=python2.7
|
||||
#CONF_OPT_PYTHON = --enable-pythoninterp=dynamic
|
||||
#CONF_OPT_PYTHON3 = --enable-python3interp
|
||||
CONF_OPT_PYTHON3 = --enable-python3interp
|
||||
#CONF_OPT_PYTHON3 = --enable-python3interp --with-python3-command=python3.6
|
||||
#CONF_OPT_PYTHON3 = --enable-python3interp=dynamic
|
||||
|
||||
@ -462,7 +462,7 @@ CClink = $(CC)
|
||||
# First one for static linking, second one for loading when used.
|
||||
# Debian package is "ruby-dev".
|
||||
# This requires at least "normal" features, "tiny" and "small" don't work.
|
||||
#CONF_OPT_RUBY = --enable-rubyinterp
|
||||
CONF_OPT_RUBY = --enable-rubyinterp
|
||||
#CONF_OPT_RUBY = --enable-rubyinterp=dynamic
|
||||
#CONF_OPT_RUBY = --enable-rubyinterp --with-ruby-command=ruby1.9.1
|
||||
|
||||
@ -470,13 +470,13 @@ CClink = $(CC)
|
||||
# Uncomment this when you want to include the Tcl interface.
|
||||
# First one is for static linking, second one for dynamic loading.
|
||||
# Debian package is "tcl-dev".
|
||||
#CONF_OPT_TCL = --enable-tclinterp
|
||||
CONF_OPT_TCL = --enable-tclinterp
|
||||
#CONF_OPT_TCL = --enable-tclinterp=dynamic
|
||||
#CONF_OPT_TCL = --enable-tclinterp --with-tclsh=tclsh8.4
|
||||
|
||||
# CSCOPE
|
||||
# Uncomment this when you want to include the Cscope interface.
|
||||
#CONF_OPT_CSCOPE = --enable-cscope
|
||||
CONF_OPT_CSCOPE = --enable-cscope
|
||||
|
||||
# NETBEANS - NetBeans interface. Only works with Motif, GTK, and gnome.
|
||||
# Motif version must have XPM libraries (see |netbeans-xpm|).
|
||||
@ -548,7 +548,7 @@ CClink = $(CC)
|
||||
#CONF_OPT_FEAT = --with-features=small
|
||||
#CONF_OPT_FEAT = --with-features=normal
|
||||
#CONF_OPT_FEAT = --with-features=big
|
||||
#CONF_OPT_FEAT = --with-features=huge
|
||||
CONF_OPT_FEAT = --with-features=huge
|
||||
|
||||
# COMPILED BY - For including a specific e-mail address for ":version".
|
||||
#CONF_OPT_COMPBY = "--with-compiledby=John Doe <JohnDoe@yahoo.com>"
|
||||
@ -623,7 +623,7 @@ CClink = $(CC)
|
||||
# Note: If you use -Wextra and get warnings in GTK code about function
|
||||
# parameters, you can add -Wno-cast-function-type (but not with clang)
|
||||
#CFLAGS = -g -Wall -Wextra -Wshadow -Wmissing-prototypes -Wunreachable-code -Wno-cast-function-type -Wno-deprecated-declarations -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
|
||||
#CFLAGS = -g -Wall -Wextra -Wshadow -Wmissing-prototypes -Wunreachable-code -Wno-deprecated-declarations -D_REENTRANT -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
|
||||
CFLAGS = -g -Wall -Wextra -Wshadow -Wmissing-prototypes -Wunreachable-code -Wno-deprecated-declarations -D_REENTRANT -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
|
||||
# Add -Wpedantic to find // comments and other C99 constructs.
|
||||
# Better disable Perl and Python to avoid a lot of warnings.
|
||||
#CFLAGS = -g -Wall -Wextra -Wshadow -Wmissing-prototypes -Wpedantic -Wunreachable-code -Wunused-result -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
|
||||
@ -727,12 +727,12 @@ SANITIZER_LIBS = $(SANITIZER_CFLAGS)
|
||||
# Configuration is in the .ccmalloc or ~/.ccmalloc file.
|
||||
# Doesn't work very well, since memory linked to from global variables
|
||||
# (in libraries) is also marked as leaked memory.
|
||||
#LEAK_CFLAGS = -DEXITFREE
|
||||
LEAK_CFLAGS = -DEXITFREE
|
||||
#LEAK_LIBS = -lccmalloc
|
||||
|
||||
# Uncomment this line to have Vim call abort() when an internal error is
|
||||
# detected. Useful when using a tool to find errors.
|
||||
#ABORT_CFLAGS = -DABORT_ON_INTERNAL_ERROR
|
||||
ABORT_CFLAGS = -DABORT_ON_INTERNAL_ERROR
|
||||
|
||||
####################################################
|
||||
### Specific systems, check if yours is listed ### {{{
|
||||
@ -1695,8 +1695,11 @@ BASIC_SRC = \
|
||||
usercmd.c \
|
||||
userfunc.c \
|
||||
version.c \
|
||||
vim9cmds.c, \
|
||||
vim9compile.c \
|
||||
vim9execute.c \
|
||||
vim9expr.c, \
|
||||
vim9instr.c, \
|
||||
vim9script.c \
|
||||
vim9type.c \
|
||||
viminfo.c \
|
||||
@ -1848,8 +1851,11 @@ OBJ_COMMON = \
|
||||
objects/usercmd.o \
|
||||
objects/userfunc.o \
|
||||
objects/version.o \
|
||||
objects/vim9cmds.o \
|
||||
objects/vim9compile.o \
|
||||
objects/vim9execute.o \
|
||||
objects/vim9expr.o \
|
||||
objects/vim9instr.o \
|
||||
objects/vim9script.o \
|
||||
objects/vim9type.o \
|
||||
objects/viminfo.o \
|
||||
@ -2034,8 +2040,11 @@ PRO_AUTO = \
|
||||
usercmd.pro \
|
||||
userfunc.pro \
|
||||
version.pro \
|
||||
vim9cmds.pro \
|
||||
vim9compile.pro \
|
||||
vim9execute.pro \
|
||||
vim9expr.pro \
|
||||
vim9instr.pro \
|
||||
vim9script.pro \
|
||||
vim9type.pro \
|
||||
viminfo.pro \
|
||||
@ -3575,12 +3584,21 @@ objects/usercmd.o: usercmd.c
|
||||
objects/userfunc.o: userfunc.c
|
||||
$(CCC) -o $@ userfunc.c
|
||||
|
||||
objects/vim9cmds.o: vim9cmds.c
|
||||
$(CCC) -o $@ vim9cmds.c
|
||||
|
||||
objects/vim9compile.o: vim9compile.c
|
||||
$(CCC) -o $@ vim9compile.c
|
||||
|
||||
objects/vim9execute.o: vim9execute.c
|
||||
$(CCC) -o $@ vim9execute.c
|
||||
|
||||
objects/vim9expr.o: vim9expr.c
|
||||
$(CCC) -o $@ vim9expr.c
|
||||
|
||||
objects/vim9instr.o: vim9instr.c
|
||||
$(CCC) -o $@ vim9instr.c
|
||||
|
||||
objects/vim9script.o: vim9script.c
|
||||
$(CCC) -o $@ vim9script.c
|
||||
|
||||
@ -4137,6 +4155,10 @@ objects/version.o: version.c vim.h protodef.h auto/config.h feature.h os_unix.h
|
||||
auto/osdef.h ascii.h keymap.h termdefs.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 errors.h version.h
|
||||
objects/vim9cmds.o: vim9cmds.c vim.h protodef.h auto/config.h feature.h \
|
||||
os_unix.h auto/osdef.h ascii.h keymap.h termdefs.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 errors.h vim9.h
|
||||
objects/vim9compile.o: vim9compile.c vim.h protodef.h auto/config.h feature.h \
|
||||
os_unix.h auto/osdef.h ascii.h keymap.h termdefs.h macros.h option.h beval.h \
|
||||
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
|
||||
@ -4145,6 +4167,14 @@ objects/vim9execute.o: vim9execute.c vim.h protodef.h auto/config.h feature.h \
|
||||
os_unix.h auto/osdef.h ascii.h keymap.h termdefs.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 errors.h vim9.h
|
||||
objects/vim9expr.o: vim9expr.c vim.h protodef.h auto/config.h feature.h \
|
||||
os_unix.h auto/osdef.h ascii.h keymap.h termdefs.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 errors.h vim9.h
|
||||
objects/vim9instr.o: vim9instr.c vim.h protodef.h auto/config.h feature.h \
|
||||
os_unix.h auto/osdef.h ascii.h keymap.h termdefs.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 errors.h vim9.h
|
||||
objects/vim9script.o: vim9script.c vim.h protodef.h auto/config.h feature.h \
|
||||
os_unix.h auto/osdef.h ascii.h keymap.h termdefs.h macros.h option.h beval.h \
|
||||
proto/gui_beval.pro structs.h regexp.h gui.h alloc.h ex_cmds.h spell.h \
|
||||
|
@ -212,8 +212,13 @@ void mbyte_im_set_active(int active_arg);
|
||||
# include "version.pro"
|
||||
# include "vim9script.pro"
|
||||
# ifdef FEAT_EVAL
|
||||
// include vim9.h here, the types defined there are used by function arguments.
|
||||
# include "vim9.h"
|
||||
# include "vim9cmds.pro"
|
||||
# include "vim9compile.pro"
|
||||
# include "vim9execute.pro"
|
||||
# include "vim9expr.pro"
|
||||
# include "vim9instr.pro"
|
||||
# include "vim9type.pro"
|
||||
# endif
|
||||
# include "window.pro"
|
||||
|
33
src/proto/vim9cmds.pro
Normal file
33
src/proto/vim9cmds.pro
Normal file
@ -0,0 +1,33 @@
|
||||
/* vim9cmds.c */
|
||||
void free_locals(cctx_T *cctx);
|
||||
int check_vim9_unlet(char_u *name);
|
||||
char_u *compile_unletlock(char_u *arg, exarg_T *eap, cctx_T *cctx);
|
||||
void drop_scope(cctx_T *cctx);
|
||||
char_u *compile_if(char_u *arg, cctx_T *cctx);
|
||||
char_u *compile_elseif(char_u *arg, cctx_T *cctx);
|
||||
char_u *compile_else(char_u *arg, cctx_T *cctx);
|
||||
char_u *compile_endif(char_u *arg, cctx_T *cctx);
|
||||
char_u *compile_for(char_u *arg_start, cctx_T *cctx);
|
||||
char_u *compile_endfor(char_u *arg, cctx_T *cctx);
|
||||
char_u *compile_while(char_u *arg, cctx_T *cctx);
|
||||
char_u *compile_endwhile(char_u *arg, cctx_T *cctx);
|
||||
char_u *compile_continue(char_u *arg, cctx_T *cctx);
|
||||
char_u *compile_break(char_u *arg, cctx_T *cctx);
|
||||
char_u *compile_block(char_u *arg, cctx_T *cctx);
|
||||
void compile_endblock(cctx_T *cctx);
|
||||
char_u *compile_try(char_u *arg, cctx_T *cctx);
|
||||
char_u *compile_catch(char_u *arg, cctx_T *cctx);
|
||||
char_u *compile_finally(char_u *arg, cctx_T *cctx);
|
||||
char_u *compile_endtry(char_u *arg, cctx_T *cctx);
|
||||
char_u *compile_throw(char_u *arg, cctx_T *cctx);
|
||||
char_u *compile_eval(char_u *arg, cctx_T *cctx);
|
||||
char_u *compile_mult_expr(char_u *arg, int cmdidx, cctx_T *cctx);
|
||||
char_u *compile_put(char_u *arg, exarg_T *eap, cctx_T *cctx);
|
||||
char_u *compile_exec(char_u *line_arg, exarg_T *eap, cctx_T *cctx);
|
||||
char_u *compile_script(char_u *line, cctx_T *cctx);
|
||||
char_u *compile_substitute(char_u *arg, exarg_T *eap, cctx_T *cctx);
|
||||
char_u *compile_redir(char_u *line, exarg_T *eap, cctx_T *cctx);
|
||||
char_u *compile_cexpr(char_u *line, exarg_T *eap, cctx_T *cctx);
|
||||
char_u *compile_return(char_u *arg, int check_return_type, int legacy, cctx_T *cctx);
|
||||
int check_global_and_subst(char_u *cmd, char_u *arg);
|
||||
/* vim: set ft=c : */
|
@ -1,26 +1,30 @@
|
||||
/* vim9compile.c */
|
||||
int lookup_local(char_u *name, size_t len, lvar_T *lvar, cctx_T *cctx);
|
||||
int arg_exists(char_u *name, size_t len, int *idxp, type_T **type, int *gen_load_outer, cctx_T *cctx);
|
||||
int script_is_vim9(void);
|
||||
int script_var_exists(char_u *name, size_t len, cctx_T *cctx);
|
||||
int check_defined(char_u *p, size_t len, cctx_T *cctx, int is_arg);
|
||||
int check_compare_types(exprtype_T type, typval_T *tv1, typval_T *tv2);
|
||||
int need_type(type_T *actual, type_T *expected, int offset, int arg_idx, cctx_T *cctx, int silent, int actual_is_const);
|
||||
int func_needs_compiling(ufunc_T *ufunc, compiletype_T compile_type);
|
||||
lvar_T *reserve_local(cctx_T *cctx, char_u *name, size_t len, int isConst, type_T *type);
|
||||
int get_script_item_idx(int sid, char_u *name, int check_writable, cctx_T *cctx);
|
||||
imported_T *find_imported(char_u *name, size_t len, cctx_T *cctx);
|
||||
imported_T *find_imported_in_script(char_u *name, size_t len, int sid);
|
||||
char_u *may_peek_next_line(cctx_T *cctx, char_u *arg, char_u **nextp);
|
||||
char_u *peek_next_line_from_context(cctx_T *cctx);
|
||||
char_u *next_line_from_context(cctx_T *cctx, int skip_comment);
|
||||
char_u *to_name_end(char_u *arg, int use_namespace);
|
||||
char_u *to_name_const_end(char_u *arg);
|
||||
int get_lambda_tv_and_compile(char_u **arg, typval_T *rettv, int types_optional, evalarg_T *evalarg);
|
||||
exprtype_T get_compare_type(char_u *p, int *len, int *type_is);
|
||||
void error_white_both(char_u *op, int len);
|
||||
int may_get_next_line(char_u *whitep, char_u **arg, cctx_T *cctx);
|
||||
int may_get_next_line_error(char_u *whitep, char_u **arg, cctx_T *cctx);
|
||||
void fill_exarg_from_cctx(exarg_T *eap, cctx_T *cctx);
|
||||
int func_needs_compiling(ufunc_T *ufunc, compiletype_T compile_type);
|
||||
int assignment_len(char_u *p, int *heredoc);
|
||||
void vim9_declare_error(char_u *name);
|
||||
int check_vim9_unlet(char_u *name);
|
||||
int check_global_and_subst(char_u *cmd, char_u *arg);
|
||||
int get_var_dest(char_u *name, assign_dest_T *dest, int cmdidx, int *option_scope, int *vimvaridx, type_T **type, cctx_T *cctx);
|
||||
int compile_lhs(char_u *var_start, lhs_T *lhs, int cmdidx, int heredoc, int oplen, cctx_T *cctx);
|
||||
int compile_assign_lhs(char_u *var_start, lhs_T *lhs, int cmdidx, int is_decl, int heredoc, int oplen, cctx_T *cctx);
|
||||
int compile_load_lhs_with_index(lhs_T *lhs, char_u *var_start, cctx_T *cctx);
|
||||
int compile_assign_unlet(char_u *var_start, lhs_T *lhs, int is_assign, type_T *rhs_type, cctx_T *cctx);
|
||||
int compile_def_function(ufunc_T *ufunc, int check_return_type, compiletype_T compile_type, cctx_T *outer_cctx);
|
||||
void set_function_type(ufunc_T *ufunc);
|
||||
void delete_instr(isn_T *isn);
|
||||
void unlink_def_function(ufunc_T *ufunc);
|
||||
void link_def_function(ufunc_T *ufunc);
|
||||
void free_def_functions(void);
|
||||
|
17
src/proto/vim9expr.pro
Normal file
17
src/proto/vim9expr.pro
Normal file
@ -0,0 +1,17 @@
|
||||
/* vim9expr.c */
|
||||
int generate_ppconst(cctx_T *cctx, ppconst_T *ppconst);
|
||||
void clear_ppconst(ppconst_T *ppconst);
|
||||
int compile_member(int is_slice, int *keeping_dict, cctx_T *cctx);
|
||||
int compile_load_scriptvar(cctx_T *cctx, char_u *name, char_u *start, char_u **end, int error);
|
||||
int compile_load(char_u **arg, char_u *end_arg, cctx_T *cctx, int is_expr, int error);
|
||||
char_u *to_name_end(char_u *arg, int use_namespace);
|
||||
char_u *to_name_const_end(char_u *arg);
|
||||
int get_lambda_tv_and_compile(char_u **arg, typval_T *rettv, int types_optional, evalarg_T *evalarg);
|
||||
exprtype_T get_compare_type(char_u *p, int *len, int *type_is);
|
||||
void skip_expr_cctx(char_u **arg, cctx_T *cctx);
|
||||
int bool_on_stack(cctx_T *cctx);
|
||||
void error_white_both(char_u *op, int len);
|
||||
int compile_expr1(char_u **arg, cctx_T *cctx, ppconst_T *ppconst);
|
||||
int compile_expr0_ext(char_u **arg, cctx_T *cctx, int *is_const);
|
||||
int compile_expr0(char_u **arg, cctx_T *cctx);
|
||||
/* vim: set ft=c : */
|
72
src/proto/vim9instr.pro
Normal file
72
src/proto/vim9instr.pro
Normal file
@ -0,0 +1,72 @@
|
||||
/* vim9instr.c */
|
||||
isn_T *generate_instr(cctx_T *cctx, isntype_T isn_type);
|
||||
isn_T *generate_instr_drop(cctx_T *cctx, isntype_T isn_type, int drop);
|
||||
isn_T *generate_instr_type(cctx_T *cctx, isntype_T isn_type, type_T *type);
|
||||
isn_T *generate_instr_debug(cctx_T *cctx);
|
||||
int may_generate_2STRING(int offset, int tolerant, cctx_T *cctx);
|
||||
int generate_add_instr(cctx_T *cctx, vartype_T vartype, type_T *type1, type_T *type2, exprtype_T expr_type);
|
||||
vartype_T operator_type(type_T *type1, type_T *type2);
|
||||
int generate_two_op(cctx_T *cctx, char_u *op);
|
||||
int check_compare_types(exprtype_T type, typval_T *tv1, typval_T *tv2);
|
||||
int generate_COMPARE(cctx_T *cctx, exprtype_T exprtype, int ic);
|
||||
int generate_2BOOL(cctx_T *cctx, int invert, int offset);
|
||||
int generate_COND2BOOL(cctx_T *cctx);
|
||||
int generate_TYPECHECK(cctx_T *cctx, type_T *expected, int offset, int argidx);
|
||||
int generate_SETTYPE(cctx_T *cctx, type_T *expected);
|
||||
int generate_tv_PUSH(cctx_T *cctx, typval_T *tv);
|
||||
int generate_PUSHNR(cctx_T *cctx, varnumber_T number);
|
||||
int generate_PUSHBOOL(cctx_T *cctx, varnumber_T number);
|
||||
int generate_PUSHSPEC(cctx_T *cctx, varnumber_T number);
|
||||
int generate_PUSHF(cctx_T *cctx, float_T fnumber);
|
||||
int generate_PUSHS(cctx_T *cctx, char_u **str);
|
||||
int generate_PUSHCHANNEL(cctx_T *cctx, channel_T *channel);
|
||||
int generate_PUSHJOB(cctx_T *cctx, job_T *job);
|
||||
int generate_PUSHBLOB(cctx_T *cctx, blob_T *blob);
|
||||
int generate_PUSHFUNC(cctx_T *cctx, char_u *name, type_T *type);
|
||||
int generate_GETITEM(cctx_T *cctx, int index, int with_op);
|
||||
int generate_SLICE(cctx_T *cctx, int count);
|
||||
int generate_CHECKLEN(cctx_T *cctx, int min_len, int more_OK);
|
||||
int generate_STORE(cctx_T *cctx, isntype_T isn_type, int idx, char_u *name);
|
||||
int generate_STOREOUTER(cctx_T *cctx, int idx, int level);
|
||||
int generate_STORENR(cctx_T *cctx, int idx, varnumber_T value);
|
||||
int generate_STOREOPT(cctx_T *cctx, isntype_T isn_type, char_u *name, int opt_flags);
|
||||
int generate_LOAD(cctx_T *cctx, isntype_T isn_type, int idx, char_u *name, type_T *type);
|
||||
int generate_LOADOUTER(cctx_T *cctx, int idx, int nesting, type_T *type);
|
||||
int generate_LOADV(cctx_T *cctx, char_u *name, int error);
|
||||
int generate_UNLET(cctx_T *cctx, isntype_T isn_type, char_u *name, int forceit);
|
||||
int generate_LOCKCONST(cctx_T *cctx);
|
||||
int generate_OLDSCRIPT(cctx_T *cctx, isntype_T isn_type, char_u *name, int sid, type_T *type);
|
||||
int generate_VIM9SCRIPT(cctx_T *cctx, isntype_T isn_type, int sid, int idx, type_T *type);
|
||||
int generate_NEWLIST(cctx_T *cctx, int count);
|
||||
int generate_NEWDICT(cctx_T *cctx, int count);
|
||||
int generate_FUNCREF(cctx_T *cctx, ufunc_T *ufunc);
|
||||
int generate_NEWFUNC(cctx_T *cctx, char_u *lambda_name, char_u *func_name);
|
||||
int generate_DEF(cctx_T *cctx, char_u *name, size_t len);
|
||||
int generate_JUMP(cctx_T *cctx, jumpwhen_T when, int where);
|
||||
int generate_JUMP_IF_ARG_SET(cctx_T *cctx, int arg_off);
|
||||
int generate_FOR(cctx_T *cctx, int loop_idx);
|
||||
int generate_TRYCONT(cctx_T *cctx, int levels, int where);
|
||||
int generate_BCALL(cctx_T *cctx, int func_idx, int argcount, int method_call);
|
||||
int generate_LISTAPPEND(cctx_T *cctx);
|
||||
int generate_BLOBAPPEND(cctx_T *cctx);
|
||||
int generate_CALL(cctx_T *cctx, ufunc_T *ufunc, int pushed_argcount);
|
||||
int generate_UCALL(cctx_T *cctx, char_u *name, int argcount);
|
||||
int generate_PCALL(cctx_T *cctx, int argcount, char_u *name, type_T *type, int at_top);
|
||||
int generate_STRINGMEMBER(cctx_T *cctx, char_u *name, size_t len);
|
||||
int generate_ECHO(cctx_T *cctx, int with_white, int count);
|
||||
int generate_MULT_EXPR(cctx_T *cctx, isntype_T isn_type, int count);
|
||||
int generate_PUT(cctx_T *cctx, int regname, linenr_T lnum);
|
||||
int generate_EXEC_copy(cctx_T *cctx, isntype_T isntype, char_u *line);
|
||||
int generate_EXEC(cctx_T *cctx, isntype_T isntype, char_u *str);
|
||||
int generate_LEGACY_EVAL(cctx_T *cctx, char_u *line);
|
||||
int generate_EXECCONCAT(cctx_T *cctx, int count);
|
||||
int generate_RANGE(cctx_T *cctx, char_u *range);
|
||||
int generate_UNPACK(cctx_T *cctx, int var_count, int semicolon);
|
||||
int generate_cmdmods(cctx_T *cctx, cmdmod_T *cmod);
|
||||
int generate_undo_cmdmods(cctx_T *cctx);
|
||||
int generate_store_var(cctx_T *cctx, assign_dest_T dest, int opt_flags, int vimvaridx, int scriptvar_idx, int scriptvar_sid, type_T *type, char_u *name);
|
||||
int generate_store_lhs(cctx_T *cctx, lhs_T *lhs, int instr_count);
|
||||
void may_generate_prof_end(cctx_T *cctx, int prof_lnum);
|
||||
void delete_instr(isn_T *isn);
|
||||
void clear_instr_ga(garray_T *gap);
|
||||
/* vim: set ft=c : */
|
@ -749,6 +749,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
3860,
|
||||
/**/
|
||||
3859,
|
||||
/**/
|
||||
|
208
src/vim9.h
208
src/vim9.h
@ -11,6 +11,10 @@
|
||||
* vim9.h: types and globals used for Vim9 script.
|
||||
*/
|
||||
|
||||
#ifdef VMS
|
||||
# include <float.h>
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
ISN_EXEC, // execute Ex command line isn_arg.string
|
||||
ISN_EXECCONCAT, // execute Ex command from isn_arg.number items on stack
|
||||
@ -502,14 +506,7 @@ struct dfunc_S {
|
||||
#define STACK_FRAME_SIZE 6
|
||||
|
||||
|
||||
#ifdef DEFINE_VIM9_GLOBALS
|
||||
// Functions defined with :def are stored in this growarray.
|
||||
// They are never removed, so that they can be found by index.
|
||||
// Deleted functions have the df_deleted flag set.
|
||||
garray_T def_functions = {0, 0, sizeof(dfunc_T), 50, NULL};
|
||||
#else
|
||||
extern garray_T def_functions;
|
||||
#endif
|
||||
|
||||
// Used for "lnum" when a range is to be taken from the stack.
|
||||
#define LNUM_VARIABLE_RANGE -999
|
||||
@ -531,3 +528,200 @@ extern garray_T def_functions;
|
||||
? (dfunc)->df_instr_debug \
|
||||
: (dfunc)->df_instr)
|
||||
#endif
|
||||
|
||||
// Structure passed between the compile_expr* functions to keep track of
|
||||
// constants that have been parsed but for which no code was produced yet. If
|
||||
// possible expressions on these constants are applied at compile time. If
|
||||
// that is not possible, the code to push the constants needs to be generated
|
||||
// before other instructions.
|
||||
// Using 50 should be more than enough of 5 levels of ().
|
||||
#define PPSIZE 50
|
||||
typedef struct {
|
||||
typval_T pp_tv[PPSIZE]; // stack of ppconst constants
|
||||
int pp_used; // active entries in pp_tv[]
|
||||
int pp_is_const; // all generated code was constants, used for a
|
||||
// list or dict with constant members
|
||||
} ppconst_T;
|
||||
|
||||
// values for ctx_skip
|
||||
typedef enum {
|
||||
SKIP_NOT, // condition is a constant, produce code
|
||||
SKIP_YES, // condition is a constant, do NOT produce code
|
||||
SKIP_UNKNOWN // condition is not a constant, produce code
|
||||
} skip_T;
|
||||
|
||||
/*
|
||||
* Chain of jump instructions where the end label needs to be set.
|
||||
*/
|
||||
typedef struct endlabel_S endlabel_T;
|
||||
struct endlabel_S {
|
||||
endlabel_T *el_next; // chain end_label locations
|
||||
int el_end_label; // instruction idx where to set end
|
||||
};
|
||||
|
||||
/*
|
||||
* info specific for the scope of :if / elseif / else
|
||||
*/
|
||||
typedef struct {
|
||||
int is_seen_else;
|
||||
int is_seen_skip_not; // a block was unconditionally executed
|
||||
int is_had_return; // every block ends in :return
|
||||
int is_if_label; // instruction idx at IF or ELSEIF
|
||||
endlabel_T *is_end_label; // instructions to set end label
|
||||
} ifscope_T;
|
||||
|
||||
/*
|
||||
* info specific for the scope of :while
|
||||
*/
|
||||
typedef struct {
|
||||
int ws_top_label; // instruction idx at WHILE
|
||||
endlabel_T *ws_end_label; // instructions to set end
|
||||
} whilescope_T;
|
||||
|
||||
/*
|
||||
* info specific for the scope of :for
|
||||
*/
|
||||
typedef struct {
|
||||
int fs_top_label; // instruction idx at FOR
|
||||
endlabel_T *fs_end_label; // break instructions
|
||||
} forscope_T;
|
||||
|
||||
/*
|
||||
* info specific for the scope of :try
|
||||
*/
|
||||
typedef struct {
|
||||
int ts_try_label; // instruction idx at TRY
|
||||
endlabel_T *ts_end_label; // jump to :finally or :endtry
|
||||
int ts_catch_label; // instruction idx of last CATCH
|
||||
int ts_caught_all; // "catch" without argument encountered
|
||||
} tryscope_T;
|
||||
|
||||
typedef enum {
|
||||
NO_SCOPE,
|
||||
IF_SCOPE,
|
||||
WHILE_SCOPE,
|
||||
FOR_SCOPE,
|
||||
TRY_SCOPE,
|
||||
BLOCK_SCOPE
|
||||
} scopetype_T;
|
||||
|
||||
/*
|
||||
* Info for one scope, pointed to by "ctx_scope".
|
||||
*/
|
||||
typedef struct scope_S scope_T;
|
||||
struct scope_S {
|
||||
scope_T *se_outer; // scope containing this one
|
||||
scopetype_T se_type;
|
||||
int se_local_count; // ctx_locals.ga_len before scope
|
||||
skip_T se_skip_save; // ctx_skip before the block
|
||||
union {
|
||||
ifscope_T se_if;
|
||||
whilescope_T se_while;
|
||||
forscope_T se_for;
|
||||
tryscope_T se_try;
|
||||
} se_u;
|
||||
};
|
||||
|
||||
/*
|
||||
* Entry for "ctx_locals". Used for arguments and local variables.
|
||||
*/
|
||||
typedef struct {
|
||||
char_u *lv_name;
|
||||
type_T *lv_type;
|
||||
int lv_idx; // index of the variable on the stack
|
||||
int lv_from_outer; // nesting level, using ctx_outer scope
|
||||
int lv_const; // when TRUE cannot be assigned to
|
||||
int lv_arg; // when TRUE this is an argument
|
||||
} lvar_T;
|
||||
|
||||
// Destination for an assignment or ":unlet" with an index.
|
||||
typedef enum {
|
||||
dest_local,
|
||||
dest_option,
|
||||
dest_func_option,
|
||||
dest_env,
|
||||
dest_global,
|
||||
dest_buffer,
|
||||
dest_window,
|
||||
dest_tab,
|
||||
dest_vimvar,
|
||||
dest_script,
|
||||
dest_reg,
|
||||
dest_expr,
|
||||
} assign_dest_T;
|
||||
|
||||
// Used by compile_lhs() to store information about the LHS of an assignment
|
||||
// and one argument of ":unlet" with an index.
|
||||
typedef struct {
|
||||
assign_dest_T lhs_dest; // type of destination
|
||||
|
||||
char_u *lhs_name; // allocated name excluding the last
|
||||
// "[expr]" or ".name".
|
||||
size_t lhs_varlen; // length of the variable without
|
||||
// "[expr]" or ".name"
|
||||
char_u *lhs_whole; // allocated name including the last
|
||||
// "[expr]" or ".name" for :redir
|
||||
size_t lhs_varlen_total; // length of the variable including
|
||||
// any "[expr]" or ".name"
|
||||
char_u *lhs_dest_end; // end of the destination, including
|
||||
// "[expr]" or ".name".
|
||||
char_u *lhs_end; // end including any type
|
||||
|
||||
int lhs_has_index; // has "[expr]" or ".name"
|
||||
|
||||
int lhs_new_local; // create new local variable
|
||||
int lhs_opt_flags; // for when destination is an option
|
||||
int lhs_vimvaridx; // for when destination is a v:var
|
||||
|
||||
lvar_T lhs_local_lvar; // used for existing local destination
|
||||
lvar_T lhs_arg_lvar; // used for argument destination
|
||||
lvar_T *lhs_lvar; // points to destination lvar
|
||||
int lhs_scriptvar_sid;
|
||||
int lhs_scriptvar_idx;
|
||||
|
||||
int lhs_has_type; // type was specified
|
||||
type_T *lhs_type;
|
||||
type_T *lhs_member_type;
|
||||
|
||||
int lhs_append; // used by ISN_REDIREND
|
||||
} lhs_T;
|
||||
|
||||
/*
|
||||
* Context for compiling lines of Vim script.
|
||||
* Stores info about the local variables and condition stack.
|
||||
*/
|
||||
struct cctx_S {
|
||||
ufunc_T *ctx_ufunc; // current function
|
||||
int ctx_lnum; // line number in current function
|
||||
char_u *ctx_line_start; // start of current line or NULL
|
||||
garray_T ctx_instr; // generated instructions
|
||||
|
||||
int ctx_prev_lnum; // line number below previous command, for
|
||||
// debugging
|
||||
|
||||
compiletype_T ctx_compile_type;
|
||||
|
||||
garray_T ctx_locals; // currently visible local variables
|
||||
|
||||
int ctx_has_closure; // set to one if a closures was created in
|
||||
// the function
|
||||
|
||||
garray_T ctx_imports; // imported items
|
||||
|
||||
skip_T ctx_skip;
|
||||
scope_T *ctx_scope; // current scope, NULL at toplevel
|
||||
int ctx_had_return; // last seen statement was "return"
|
||||
|
||||
cctx_T *ctx_outer; // outer scope for lambda or nested
|
||||
// function
|
||||
int ctx_outer_used; // var in ctx_outer was used
|
||||
|
||||
garray_T ctx_type_stack; // type of each item on the stack
|
||||
garray_T *ctx_type_list; // list of pointers to allocated types
|
||||
|
||||
int ctx_has_cmdmod; // ISN_CMDMOD was generated
|
||||
|
||||
lhs_T ctx_redir_lhs; // LHS for ":redir => var", valid when
|
||||
// lhs_name is not NULL
|
||||
};
|
||||
|
||||
|
2274
src/vim9cmds.c
Normal file
2274
src/vim9cmds.c
Normal file
File diff suppressed because it is too large
Load Diff
7655
src/vim9compile.c
7655
src/vim9compile.c
File diff suppressed because it is too large
Load Diff
@ -16,11 +16,11 @@
|
||||
|
||||
#if defined(FEAT_EVAL) || defined(PROTO)
|
||||
|
||||
#ifdef VMS
|
||||
# include <float.h>
|
||||
// When not generating protos this is included in proto.h
|
||||
#ifdef PROTO
|
||||
# include "vim9.h"
|
||||
#endif
|
||||
|
||||
#include "vim9.h"
|
||||
|
||||
// Structure put on ec_trystack when ISN_TRY is encountered.
|
||||
typedef struct {
|
||||
@ -5064,7 +5064,7 @@ call_def_function(
|
||||
if (ectx.ec_funcrefs.ga_len > 0)
|
||||
{
|
||||
handle_closure_in_use(&ectx, FALSE);
|
||||
ga_clear(&ectx.ec_funcrefs); // TODO: should not be needed?
|
||||
ga_clear(&ectx.ec_funcrefs);
|
||||
}
|
||||
|
||||
estack_pop();
|
||||
|
2893
src/vim9expr.c
Normal file
2893
src/vim9expr.c
Normal file
File diff suppressed because it is too large
Load Diff
2208
src/vim9instr.c
Normal file
2208
src/vim9instr.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -13,7 +13,8 @@
|
||||
|
||||
#include "vim.h"
|
||||
|
||||
#if defined(FEAT_EVAL)
|
||||
// When not generating protos this is included in proto.h
|
||||
#ifdef PROTO
|
||||
# include "vim9.h"
|
||||
#endif
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user