avoid testing floating point numbers for equality, fixes bug 516259
authorJuerg Billeter <j@bitron.ch>
Thu, 14 Feb 2008 17:03:21 +0000 (17:03 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Thu, 14 Feb 2008 17:03:21 +0000 (17:03 +0000)
2008-02-14  Juerg Billeter  <j@bitron.ch>

* vala/valainterfacewriter.vala: avoid testing floating point
  numbers for equality, fixes bug 516259

svn path=/trunk/; revision=1009

ChangeLog
vala/valainterfacewriter.vala

index 065f390..328c173 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-02-14  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valainterfacewriter.vala: avoid testing floating point
+         numbers for equality, fixes bug 516259
+
 2008-02-12  Jürg Billeter  <j@bitron.ch>
 
        * vala/valanamespace.vala: visit error domains, fixes bug 515828
index 74dc79a..fe0beeb 100644 (file)
@@ -448,6 +448,11 @@ public class Vala.InterfaceWriter : CodeVisitor {
                }
        }
 
+       // equality comparison with 3 digit precision
+       private bool float_equal (double d1, double d2) {
+               return ((int) (d1 * 1000)) == ((int) (d2 * 1000));
+       }
+
        private void write_params (Collection<FormalParameter> params) {
                write_string ("(");
 
@@ -466,11 +471,11 @@ public class Vala.InterfaceWriter : CodeVisitor {
                        var ccode_params = new String ();
                        var separator = "";
 
-                       if (param.carray_length_parameter_position != i + 0.1) {
+                       if (!float_equal (param.carray_length_parameter_position, i + 0.1)) {
                                ccode_params.append_printf ("%sarray_length_pos = %g", separator, param.carray_length_parameter_position);
                                separator = ", ";
                        }
-                       if (param.cdelegate_target_parameter_position != i + 0.1) {
+                       if (!float_equal (param.cdelegate_target_parameter_position, i + 0.1)) {
                                ccode_params.append_printf ("%sdelegate_target_pos = %g", separator, param.cdelegate_target_parameter_position);
                                separator = ", ";
                        }
@@ -571,15 +576,15 @@ public class Vala.InterfaceWriter : CodeVisitor {
                        ccode_params.append_printf ("%scname = \"%s\"", separator, m.get_cname ());
                        separator = ", ";
                }
-               if (m.cinstance_parameter_position != 0) {
+               if (!float_equal (m.cinstance_parameter_position, 0)) {
                        ccode_params.append_printf ("%sinstance_pos = %g", separator, m.cinstance_parameter_position);
                        separator = ", ";
                }
-               if (m.carray_length_parameter_position != -3) {
+               if (!float_equal (m.carray_length_parameter_position, -3)) {
                        ccode_params.append_printf ("%sarray_length_pos = %g", separator, m.carray_length_parameter_position);
                        separator = ", ";
                }
-               if (m.cdelegate_target_parameter_position != -3) {
+               if (!float_equal (m.cdelegate_target_parameter_position, -3)) {
                        ccode_params.append_printf ("%sdelegate_target_pos = %g", separator, m.cdelegate_target_parameter_position);
                        separator = ", ";
                }