Mercurial > vim
diff src/vim9compile.c @ 24614:07b3d21a8b4b v8.2.2846
patch 8.2.2846: Vim9: "echo Func()" does not give an error for using void
Commit: https://github.com/vim/vim/commit/68db996b621b98066fb7ab7028ed5c6aaa3954a8
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun May 9 23:19:22 2021 +0200
patch 8.2.2846: Vim9: "echo Func()" does not give an error for using void
Problem: Vim9: "echo Func()" does not give an error for a function without
a return value.
Solution: Give an error. Be more specific about why a value is invalid.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 09 May 2021 23:30:05 +0200 |
parents | cb031f421ece |
children | 4a4f64cdc798 |
line wrap: on
line diff
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -8375,15 +8375,31 @@ compile_mult_expr(char_u *arg, int cmdid { char_u *p = arg; char_u *prev = arg; + char_u *expr_start; int count = 0; int start_ctx_lnum = cctx->ctx_lnum; + garray_T *stack = &cctx->ctx_type_stack; + type_T *type; for (;;) { if (ends_excmd2(prev, p)) break; + expr_start = p; if (compile_expr0(&p, cctx) == FAIL) return NULL; + + if (cctx->ctx_skip != SKIP_YES) + { + // check for non-void type + type = ((type_T **)stack->ga_data)[stack->ga_len - 1]; + if (type->tt_type == VAR_VOID) + { + semsg(_(e_expression_does_not_result_in_value_str), expr_start); + return NULL; + } + } + ++count; prev = p; p = skipwhite(p);