patch 8.2.1668: Vim9: not accepting 0 or 1 as bool when type is any

Problem:    Vim9: not accepting 0 or 1 as bool when type is any.
Solution:   Convert the type with the CHECKTYPE instruction. (closes #6913)
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index 8cf5bc0..15fc3ae 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -2369,6 +2369,9 @@
 		type: '',
 		module: ''}
 		], getloclist(0))
+
+  let result: bool = get(#{n: 0}, 'n', 0)
+  assert_equal(false, result)
 enddef
 
 func Test_expr7_trailing_fails()
diff --git a/src/version.c b/src/version.c
index b225f74..305f0cb 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1668,
+/**/
     1667,
 /**/
     1666,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 18cfb02..e93817a 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -2510,11 +2510,23 @@
 				|| (tv->v_type == VAR_FUNC
 					       && ct->ct_type == VAR_PARTIAL)))
 		    {
-			SOURCING_LNUM = iptr->isn_lnum;
-			semsg(_(e_expected_str_but_got_str),
-				    vartype_name(ct->ct_type),
-				    vartype_name(tv->v_type));
-			goto on_error;
+			if (tv->v_type == VAR_NUMBER && ct->ct_type == VAR_BOOL
+				&& (tv->vval.v_number == 0
+						    || tv->vval.v_number == 1))
+			{
+			    // number 0 is FALSE, number 1 is TRUE
+			    tv->v_type = VAR_BOOL;
+			    tv->vval.v_number = tv->vval.v_number
+						      ? VVAL_TRUE : VVAL_FALSE;
+			}
+			else
+			{
+			    SOURCING_LNUM = iptr->isn_lnum;
+			    semsg(_(e_expected_str_but_got_str),
+					vartype_name(ct->ct_type),
+					vartype_name(tv->v_type));
+			    goto on_error;
+			}
 		    }
 		}
 		break;