patch 8.2.1416: Vim9: boolean evaluation does not work as intended

Problem:    Vim9: boolean evaluation does not work as intended.
Solution:   Use tv2bool() in Vim9 script. (closes #6681)
diff --git a/src/eval.c b/src/eval.c
index abdf076..99554e7 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -192,7 +192,10 @@
 	*error = FALSE;
 	if (!skip)
 	{
-	    retval = (tv_get_number_chk(&tv, error) != 0);
+	    if (in_vim9script())
+		retval = tv2bool(&tv);
+	    else
+		retval = (tv_get_number_chk(&tv, error) != 0);
 	    clear_tv(&tv);
 	}
     }
@@ -3098,7 +3101,8 @@
 
 		// Apply prefixed "-" and "+" now.  Matters especially when
 		// "->" follows.
-		if (ret == OK && evaluate && end_leader > start_leader)
+		if (ret == OK && evaluate && end_leader > start_leader
+						  && rettv->v_type != VAR_BLOB)
 		    ret = eval7_leader(rettv, TRUE, start_leader, &end_leader);
 		break;
 
@@ -3281,7 +3285,10 @@
 	f = rettv->vval.v_float;
     else
 #endif
-	val = tv_get_number_chk(rettv, &error);
+	if (in_vim9script() && end_leader[-1] == '!')
+	    val = tv2bool(rettv);
+	else
+	    val = tv_get_number_chk(rettv, &error);
     if (error)
     {
 	clear_tv(rettv);