summaryrefslogtreecommitdiff
path: root/src/eval.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2010-07-30 22:29:41 +0200
committerBram Moolenaar <Bram@vim.org>2010-07-30 22:29:41 +0200
commitf878bcfb2e611d792d1acef7019ff6c40e8933d5 (patch)
treed48fad20e6ce9c91c7558c0792e2551c0b805f41 /src/eval.c
parent68392724b8be7ff25767b8fdda65da8082b8d95c (diff)
downloadvim-git-f878bcfb2e611d792d1acef7019ff6c40e8933d5.tar.gz
Improvements for VMS. (Zoltan Arpadffy)
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/eval.c b/src/eval.c
index f1285ca39..8a26b6690 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -4802,9 +4802,24 @@ eval6(arg, rettv, evaluate, want_string)
f1 = f1 * f2;
else if (op == '/')
{
+# ifdef VMS
+ /* VMS crashes on divide by zero, work around it */
+ if (f2 == 0.0)
+ {
+ if (f1 == 0)
+ f1 = -0x7fffffffL - 1L; /* similar to NaN */
+ else if (f1 < 0)
+ f1 = -0x7fffffffL;
+ else
+ f1 = 0x7fffffffL;
+ }
+ else
+ f1 = f1 / f2;
+# else
/* We rely on the floating point library to handle divide
* by zero to result in "inf" and not a crash. */
f1 = f1 / f2;
+# endif
}
else
{