summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-01-24 13:34:18 +0100
committerBram Moolenaar <Bram@vim.org>2021-01-24 13:34:18 +0100
commitf002a41d127d49cfe5a59819d1498bc0ff8b594a (patch)
tree6d5d7fe7c9ad051329ad561567d54f046d5c96e3 /src
parentb204990346ca857802b174afe8a7fbb05e4f318e (diff)
patch 8.2.2401: build fails without +profiling featurev8.2.2401
Problem: Build fails without +profiling feature. Solution: Add #ifdefs.
Diffstat (limited to 'src')
-rw-r--r--src/structs.h5
-rw-r--r--src/testdir/test_vim9_disassemble.vim3
-rw-r--r--src/version.c2
-rw-r--r--src/vim9.h6
-rw-r--r--src/vim9compile.c29
-rw-r--r--src/vim9execute.c25
6 files changed, 63 insertions, 7 deletions
diff --git a/src/structs.h b/src/structs.h
index b092b45bb0..bd59656b7c 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1906,6 +1906,11 @@ typedef struct {
proftime_T pi_call_start;
} profinfo_T;
+# else
+typedef struct
+{
+ int dummy;
+} profinfo_T;
# endif
#else
// dummy typedefs for use in function prototypes
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim
index 9a3401fc32..97846a6f5f 100644
--- a/src/testdir/test_vim9_disassemble.vim
+++ b/src/testdir/test_vim9_disassemble.vim
@@ -1848,6 +1848,9 @@ def s:Profiled(): string
enddef
def Test_profiled()
+ if !has('profile')
+ MissingFeature 'profile'
+ endif
var res = execute('disass! s:Profiled')
assert_match('<SNR>\d*_Profiled\_s*' ..
'echo "profiled"\_s*' ..
diff --git a/src/version.c b/src/version.c
index 41858baacf..8786933fb2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2401,
+/**/
2400,
/**/
2399,
diff --git a/src/vim9.h b/src/vim9.h
index 9446c15bf3..f8d51c5028 100644
--- a/src/vim9.h
+++ b/src/vim9.h
@@ -373,8 +373,10 @@ struct dfunc_S {
// After compiling "df_instr" and/or "df_instr_prof" is not NULL.
isn_T *df_instr; // function body to be executed
int df_instr_count; // size of "df_instr"
- isn_T *df_instr_prof; // like "df_instr" with profiling
- int df_instr_prof_count; // size of "df_instr_prof"
+#ifdef FEAT_PROFILE
+ isn_T *df_instr_prof; // like "df_instr" with profiling
+ int df_instr_prof_count; // size of "df_instr_prof"
+#endif
int df_varcount; // number of local variables
int df_has_closure; // one if a closure was created
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 5a7da1247a..32d9dea1eb 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -1699,22 +1699,27 @@ generate_BLOBAPPEND(cctx_T *cctx)
* "profile" indicates profiling is to be done.
*/
int
-func_needs_compiling(ufunc_T *ufunc, int profile)
+func_needs_compiling(ufunc_T *ufunc, int profile UNUSED)
{
switch (ufunc->uf_def_status)
{
- case UF_NOT_COMPILED: return FALSE;
+ case UF_NOT_COMPILED: break;
case UF_TO_BE_COMPILED: return TRUE;
case UF_COMPILED:
{
+#ifdef FEAT_PROFILE
dfunc_T *dfunc = ((dfunc_T *)def_functions.ga_data)
+ ufunc->uf_dfunc_idx;
return profile ? dfunc->df_instr_prof == NULL
: dfunc->df_instr == NULL;
+#else
+ break;
+#endif
}
- case UF_COMPILING: return FALSE;
+ case UF_COMPILING: break;
}
+ return FALSE;
}
/*
@@ -2088,6 +2093,7 @@ generate_undo_cmdmods(cctx_T *cctx)
return OK;
}
+#ifdef FEAT_PROFILE
static void
may_generate_prof_end(cctx_T *cctx, int prof_lnum)
{
@@ -2100,6 +2106,7 @@ may_generate_prof_end(cctx_T *cctx, int prof_lnum)
cctx->ctx_lnum = save_lnum;
}
}
+#endif
/*
* Reserve space for a local variable.
@@ -7143,9 +7150,11 @@ compile_while(char_u *arg, cctx_T *cctx)
// "endwhile" jumps back here, one before when profiling
scope->se_u.se_while.ws_top_label = instr->ga_len;
+#ifdef FEAT_PROFILE
if (cctx->ctx_profiling && ((isn_T *)instr->ga_data)[instr->ga_len - 1]
.isn_type == ISN_PROF_START)
--scope->se_u.se_while.ws_top_label;
+#endif
// compile "expr"
if (compile_expr0(&p, cctx) == FAIL)
@@ -7178,8 +7187,10 @@ compile_endwhile(char_u *arg, cctx_T *cctx)
cctx->ctx_scope = scope->se_outer;
unwind_locals(cctx, scope->se_local_count);
+#ifdef FEAT_PROFILE
// count the endwhile before jumping
may_generate_prof_end(cctx, cctx->ctx_lnum);
+#endif
// At end of ":for" scope jump back to the FOR instruction.
generate_JUMP(cctx, JUMP_ALWAYS, scope->se_u.se_while.ws_top_label);
@@ -7851,7 +7862,7 @@ add_def_function(ufunc_T *ufunc)
compile_def_function(
ufunc_T *ufunc,
int check_return_type,
- int profiling,
+ int profiling UNUSED,
cctx_T *outer_cctx)
{
char_u *line = NULL;
@@ -7865,7 +7876,9 @@ compile_def_function(
int save_estack_compiling = estack_compiling;
int do_estack_push;
int new_def_function = FALSE;
+#ifdef FEAT_PROFILE
int prof_lnum = -1;
+#endif
// When using a function that was compiled before: Free old instructions.
// The index is reused. Otherwise add a new entry in "def_functions".
@@ -7886,7 +7899,9 @@ compile_def_function(
CLEAR_FIELD(cctx);
+#ifdef FEAT_PROFILE
cctx.ctx_profiling = profiling;
+#endif
cctx.ctx_ufunc = ufunc;
cctx.ctx_lnum = -1;
cctx.ctx_outer = outer_cctx;
@@ -7989,7 +8004,9 @@ compile_def_function(
if (cctx.ctx_lnum >= ufunc->uf_lines.ga_len)
{
// beyond the last line
+#ifdef FEAT_PROFILE
may_generate_prof_end(&cctx, prof_lnum);
+#endif
break;
}
}
@@ -8005,6 +8022,7 @@ compile_def_function(
continue;
}
+#ifdef FEAT_PROFILE
if (cctx.ctx_profiling && cctx.ctx_lnum != prof_lnum)
{
may_generate_prof_end(&cctx, prof_lnum);
@@ -8012,6 +8030,7 @@ compile_def_function(
prof_lnum = cctx.ctx_lnum;
generate_instr(&cctx, ISN_PROF_START);
}
+#endif
// Some things can be recognized by the first character.
switch (*ea.cmd)
@@ -8376,12 +8395,14 @@ nextline:
+ ufunc->uf_dfunc_idx;
dfunc->df_deleted = FALSE;
dfunc->df_script_seq = current_sctx.sc_seq;
+#ifdef FEAT_PROFILE
if (cctx.ctx_profiling)
{
dfunc->df_instr_prof = instr->ga_data;
dfunc->df_instr_prof_count = instr->ga_len;
}
else
+#endif
{
dfunc->df_instr = instr->ga_data;
dfunc->df_instr_count = instr->ga_len;
diff --git a/src/vim9execute.c b/src/vim9execute.c
index e4948859f9..f640684c6e 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -645,7 +645,11 @@ call_ufunc(
int error;
int idx;
int did_emsg_before = did_emsg;
+#ifdef FEAT_PROFILE
int profiling = do_profiling == PROF_YES && ufunc->uf_profiling;
+#else
+# define profiling FALSE
+#endif
if (func_needs_compiling(ufunc, profiling)
&& compile_def_function(ufunc, FALSE, profiling, NULL) == FAIL)
@@ -1131,7 +1135,11 @@ call_def_function(
int save_did_emsg_def = did_emsg_def;
int trylevel_at_start = trylevel;
int orig_funcdepth;
+#ifdef FEAT_PROFILE
int profiling = do_profiling == PROF_YES && ufunc->uf_profiling;
+#else
+# define profiling FALSE
+#endif
// Get pointer to item in the stack.
#define STACK_TV(idx) (((typval_T *)ectx.ec_stack.ga_data) + idx)
@@ -1158,7 +1166,11 @@ call_def_function(
// Check the function was really compiled.
dfunc_T *dfunc = ((dfunc_T *)def_functions.ga_data)
+ ufunc->uf_dfunc_idx;
- if ((profiling ? dfunc->df_instr_prof : dfunc->df_instr) == NULL)
+ if ((
+#ifdef FEAT_PROFILE
+ profiling ? dfunc->df_instr_prof :
+#endif
+ dfunc->df_instr) == NULL)
{
iemsg("using call_def_function() on not compiled function");
return FAIL;
@@ -1297,7 +1309,11 @@ call_def_function(
++ectx.ec_stack.ga_len;
}
+#ifdef FEAT_PROFILE
ectx.ec_instr = profiling ? dfunc->df_instr_prof : dfunc->df_instr;
+#else
+ ectx.ec_instr = dfunc->df_instr;
+#endif
}
// Following errors are in the function, not the caller.
@@ -3501,6 +3517,7 @@ call_def_function(
case ISN_PROF_START:
case ISN_PROF_END:
{
+#ifdef FEAT_PROFILE
funccall_T cookie;
ufunc_T *cur_ufunc =
(((dfunc_T *)def_functions.ga_data)
@@ -3515,6 +3532,7 @@ call_def_function(
}
else
func_line_end(&cookie);
+#endif
}
break;
@@ -3715,9 +3733,14 @@ ex_disassemble(exarg_T *eap)
msg((char *)ufunc->uf_name);
dfunc = ((dfunc_T *)def_functions.ga_data) + ufunc->uf_dfunc_idx;
+#ifdef FEAT_PROFILE
instr = eap->forceit ? dfunc->df_instr_prof : dfunc->df_instr;
instr_count = eap->forceit ? dfunc->df_instr_prof_count
: dfunc->df_instr_count;
+#else
+ instr = dfunc->df_instr;
+ instr_count = dfunc->df_instr_count;
+#endif
for (current = 0; current < instr_count; ++current)
{
isn_T *iptr = &instr[current];