patch 8.2.1562: Vim9: error when using "%" where a buffer is expected
Problem: Vim9: error when using "%" where a buffer is expected.
Solution: Add tv_get_buf_from_arg(). (closes #6814)
diff --git a/src/typval.c b/src/typval.c
index d1732f2..c7cfd41 100644
--- a/src/typval.c
+++ b/src/typval.c
@@ -1562,4 +1562,23 @@
return buf;
}
+/*
+ * Like tv_get_buf() but give an error message is the type is wrong.
+ */
+ buf_T *
+tv_get_buf_from_arg(typval_T *tv)
+{
+ buf_T *buf;
+
+ ++emsg_off;
+ buf = tv_get_buf(tv, FALSE);
+ --emsg_off;
+ if (buf == NULL
+ && tv->v_type != VAR_NUMBER
+ && tv->v_type != VAR_STRING)
+ // issue errmsg for type error
+ (void)tv_get_number(tv);
+ return buf;
+}
+
#endif // FEAT_EVAL