From 2c9363852c1363bd680179cf202329028cba413c Mon Sep 17 00:00:00 2001 From: Juerg Billeter Date: Thu, 14 Feb 2008 17:03:21 +0000 Subject: [PATCH] avoid testing floating point numbers for equality, fixes bug 516259 2008-02-14 Juerg Billeter * vala/valainterfacewriter.vala: avoid testing floating point numbers for equality, fixes bug 516259 svn path=/trunk/; revision=1009 --- ChangeLog | 5 +++++ vala/valainterfacewriter.vala | 15 ++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 065f390..328c173 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2008-02-14 Jürg Billeter + + * vala/valainterfacewriter.vala: avoid testing floating point + numbers for equality, fixes bug 516259 + 2008-02-12 Jürg Billeter * vala/valanamespace.vala: visit error domains, fixes bug 515828 diff --git a/vala/valainterfacewriter.vala b/vala/valainterfacewriter.vala index 74dc79a..fe0beeb 100644 --- a/vala/valainterfacewriter.vala +++ b/vala/valainterfacewriter.vala @@ -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 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 = ", "; } -- 2.7.4