]> granicus.if.org Git - vim/commitdiff
patch 9.0.1107: float constant not recognized as float v9.0.1107
authorBram Moolenaar <Bram@vim.org>
Tue, 27 Dec 2022 20:54:41 +0000 (20:54 +0000)
committerBram Moolenaar <Bram@vim.org>
Tue, 27 Dec 2022 20:54:41 +0000 (20:54 +0000)
Problem:    Float constant not recognized as float.
Solution:   Check the vartype instead of comparing with t_float.
            (closes #11754)

src/testdir/test_vim9_expr.vim
src/version.c
src/vim9expr.c

index faaa915ac98f1c91aa450b87ba47e76fbc1ed3f6..2c67103c9da55eabd9cf7935312a606adc9b869b 100644 (file)
@@ -2045,6 +2045,13 @@ def Test_expr9_number()
       assert_equal(6, 0x6)
       assert_equal(15, 0xf)
       assert_equal(255, 0xff)
+
+      const INFTY = 1.0 / 0.0
+      def Test()
+        assert_equal(1, isinf(INFTY))
+        assert_equal(-1, isinf(-INFTY))
+      enddef
+      Test()
   END
   v9.CheckDefAndScriptSuccess(lines)
 enddef
index 9c9d02562e748306ea3655968bd76ab59c505e24..029652e817d1cd882812f02ecda4c96f808317fe 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1107,
 /**/
     1106,
 /**/
index 7ec3ee9de760954d4142caef29e543ad5d80283a..b4e201eb5b2af190b9f696dee9b3a01ecc93f33e 100644 (file)
@@ -1757,22 +1757,14 @@ compile_leader(cctx_T *cctx, int numeric_only, char_u *start, char_u **end)
            --p;
        if (*p == '-' || *p == '+')
        {
-           int         negate = *p == '-';
-           isn_T       *isn;
-           type_T      *type;
-
-           type = get_type_on_stack(cctx, 0);
-           if (type != &t_float && need_type(type, &t_number,
+           type_T *type = get_type_on_stack(cctx, 0);
+           if (type->tt_type != VAR_FLOAT && need_type(type, &t_number,
                                            -1, 0, cctx, FALSE, FALSE) == FAIL)
                return FAIL;
 
            // only '-' has an effect, for '+' we only check the type
-           if (negate)
-           {
-               isn = generate_instr(cctx, ISN_NEGATENR);
-               if (isn == NULL)
-                   return FAIL;
-           }
+           if (*p == '-' && generate_instr(cctx, ISN_NEGATENR) == NULL)
+               return FAIL;
        }
        else if (numeric_only)
        {