fixed bug #464752
authorjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 16 Jan 2002 12:54:10 +0000 (12:54 +0000)
committerjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 16 Jan 2002 12:54:10 +0000 (12:54 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1805 4a8a32a2-be11-0410-ad9d-d568d2c75423

src/SDCCval.c

index 86de5525be63e892b658735dfee21d855529e1d0..59cb58726ea60b3de136a709c625dc62848d7fef 100644 (file)
@@ -889,10 +889,28 @@ floatFromVal (value * val)
        return (double) SPEC_CVAL (val->etype).v_long;
     }
   
-  if (SPEC_USIGN (val->etype))
-    return (double) SPEC_CVAL (val->etype).v_uint;
-  else
-    return (double) SPEC_CVAL (val->etype).v_int;
+  if (SPEC_NOUN (val->etype) == V_INT) {
+    if (SPEC_USIGN (val->etype))
+      return (double) SPEC_CVAL (val->etype).v_uint;
+    else
+      return (double) SPEC_CVAL (val->etype).v_int;
+  }
+
+  if (SPEC_NOUN (val->etype) == V_CHAR) {
+    if (SPEC_USIGN (val->etype))
+      return (double) (unsigned char)SPEC_CVAL (val->etype).v_uint;
+    else
+      return (double) (signed char)SPEC_CVAL (val->etype).v_int;
+  }
+
+  if (IS_BITVAR(val->etype)) {
+    return (double) SPEC_CVAL (val->etype).v_ulong;
+  }
+
+  // we are lost !
+  werror (E_INTERNAL_ERROR, __FILE__, __LINE__,
+         "floatFromVal: unknown value");
+  return 0;
 }