Your message dated Sat, 25 Aug 2007 20:50:18 -0700
with message-id <[EMAIL PROTECTED]>
and subject line Bug#404790: guile-1.8: Need more recent or patched guile for 
latest lilypond
has caused the attached Bug report to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what I am
talking about this indicates a serious mail system misconfiguration
somewhere.  Please contact me immediately.)

Debian bug tracking system administrator
(administrator, Debian Bugs database)

--- Begin Message ---
Package: guile-1.8
Version: 1.8.1+1-4
Severity: wishlist
Tags: patch

In order to compile development versions of Lilypond, either guile-1.8.2 
or guile-1.8.1 with the following patch fixing the reading of fractions 
is needed:

http://lilypond.org/vc/gub.darcs/patches/guile-1.8-rational.patch


-- System Information:
Debian Release: 4.0
  APT prefers unstable
  APT policy: (102, 'unstable'), (101, 'experimental')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)

Versions of packages guile-1.8 depends on:
ii  guile-1.8-libs            1.8.1+1-4      Main Guile libraries
ii  libc6                     2.5-0exp3      GNU C Library: Shared libraries
ii  libgmp3c2                 2:4.2.1+dfsg-4 Multiprecision arithmetic library
ii  libltdl3                  1.5.22-4       A system independent dlopen wrappe

guile-1.8 recommends no packages.

-- no debconf information
2006-12-23  Han-Wen Nienhuys  <[EMAIL PROTECTED]>

        * numbers.c (scm_i_fraction_reduce): move logic into
        scm_i_make_ratio(), so fractions are only read.
        scm_i_fraction_reduce() modifies a fraction when reading it.  A
        race condition might lead to fractions being corrupted by reading
        them concurrently.

        Also, the REDUCED bit alters the SCM_CELL_TYPE(), making
        comparisons between reduced and unreduced fractions go wrong.
        
        * numbers.h: remove SCM_FRACTION_SET_NUMERATOR,
        SCM_FRACTION_SET_DENOMINATOR, SCM_FRACTION_REDUCED_BIT,
        SCM_FRACTION_REDUCED_SET, SCM_FRACTION_REDUCED_CLEAR,
        SCM_FRACTION_REDUCED.

Index: libguile/numbers.c
===================================================================
RCS file: /cvsroot/guile/guile/guile-core/libguile/numbers.c,v
retrieving revision 1.285
diff -p -u -u -r1.285 numbers.c
--- libguile/numbers.c  9 Oct 2006 23:17:30 -0000       1.285
+++ libguile/numbers.c  23 Dec 2006 20:31:20 -0000
@@ -452,28 +452,21 @@ scm_i_make_ratio (SCM numerator, SCM den
 
   /* No, it's a proper fraction.
    */
-  return scm_double_cell (scm_tc16_fraction,
-                         SCM_UNPACK (numerator),
-                         SCM_UNPACK (denominator), 0);
+  {
+    SCM divisor = scm_gcd (numerator, denominator);
+    if (!(scm_is_eq (divisor, SCM_I_MAKINUM(1))))
+      {
+       numerator = scm_divide (numerator, divisor);
+       denominator = scm_divide (denominator, divisor);
+      }
+      
+    return scm_double_cell (scm_tc16_fraction,
+                           SCM_UNPACK (numerator),
+                           SCM_UNPACK (denominator), 0);
+  }
 }
 #undef FUNC_NAME
 
-static void scm_i_fraction_reduce (SCM z)
-{
-  if (!(SCM_FRACTION_REDUCED (z)))
-    {
-      SCM divisor;
-      divisor = scm_gcd (SCM_FRACTION_NUMERATOR (z), SCM_FRACTION_DENOMINATOR 
(z));
-      if (!(scm_is_eq (divisor, SCM_I_MAKINUM(1))))
-       {
-         /* is this safe? */
-         SCM_FRACTION_SET_NUMERATOR (z, scm_divide (SCM_FRACTION_NUMERATOR 
(z), divisor));
-         SCM_FRACTION_SET_DENOMINATOR (z, scm_divide (SCM_FRACTION_DENOMINATOR 
(z), divisor));
-       }
-      SCM_FRACTION_REDUCED_SET (z);
-    }
-}
-
 double
 scm_i_fraction2double (SCM z)
 {
@@ -2387,7 +2380,6 @@ SCM_DEFINE (scm_number_to_string, "numbe
     }
   else if (SCM_FRACTIONP (n))
     {
-      scm_i_fraction_reduce (n);
       return scm_string_append (scm_list_3 (scm_number_to_string 
(SCM_FRACTION_NUMERATOR (n), radix),
                                            scm_from_locale_string ("/"), 
                                            scm_number_to_string 
(SCM_FRACTION_DENOMINATOR (n), radix)));
@@ -2441,7 +2433,6 @@ int
 scm_i_print_fraction (SCM sexp, SCM port, scm_print_state *pstate SCM_UNUSED)
 {
   SCM str;
-  scm_i_fraction_reduce (sexp);
   str = scm_number_to_string (sexp, SCM_UNDEFINED);
   scm_lfwrite (scm_i_string_chars (str), scm_i_string_length (str), port);
   scm_remember_upto_here_1 (str);
@@ -3109,8 +3100,6 @@ scm_complex_equalp (SCM x, SCM y)
 SCM
 scm_i_fraction_equalp (SCM x, SCM y)
 {
-  scm_i_fraction_reduce (x);
-  scm_i_fraction_reduce (y);
   if (scm_is_false (scm_equal_p (SCM_FRACTION_NUMERATOR (x),
                               SCM_FRACTION_NUMERATOR (y)))
       || scm_is_false (scm_equal_p (SCM_FRACTION_DENOMINATOR (x),
@@ -5424,10 +5413,7 @@ scm_numerator (SCM z)
   else if (SCM_BIGP (z))
     return z;
   else if (SCM_FRACTIONP (z))
-    {
-      scm_i_fraction_reduce (z);
-      return SCM_FRACTION_NUMERATOR (z);
-    }
+    return SCM_FRACTION_NUMERATOR (z);
   else if (SCM_REALP (z))
     return scm_exact_to_inexact (scm_numerator (scm_inexact_to_exact (z)));
   else
@@ -5446,10 +5432,7 @@ scm_denominator (SCM z)
   else if (SCM_BIGP (z)) 
     return SCM_I_MAKINUM (1);
   else if (SCM_FRACTIONP (z))
-    {
-      scm_i_fraction_reduce (z);
-      return SCM_FRACTION_DENOMINATOR (z);
-    }
+    return SCM_FRACTION_DENOMINATOR (z);
   else if (SCM_REALP (z))
     return scm_exact_to_inexact (scm_denominator (scm_inexact_to_exact (z)));
   else
Index: libguile/numbers.h
===================================================================
RCS file: /cvsroot/guile/guile/guile-core/libguile/numbers.h,v
retrieving revision 1.103
diff -p -u -u -r1.103 numbers.h
--- libguile/numbers.h  9 Oct 2006 23:17:57 -0000       1.103
+++ libguile/numbers.h  23 Dec 2006 20:31:21 -0000
@@ -157,14 +157,6 @@
 #define SCM_FRACTIONP(x) (!SCM_IMP (x) && SCM_TYP16 (x) == scm_tc16_fraction)
 #define SCM_FRACTION_NUMERATOR(x) (SCM_CELL_OBJECT_1 (x))
 #define SCM_FRACTION_DENOMINATOR(x) (SCM_CELL_OBJECT_2 (x))
-#define SCM_FRACTION_SET_NUMERATOR(x, v) (SCM_SET_CELL_OBJECT_1 ((x), (v)))
-#define SCM_FRACTION_SET_DENOMINATOR(x, v) (SCM_SET_CELL_OBJECT_2 ((x), (v)))
-
-  /* I think the left half word is free in the type, so I'll use bit 17 */
-#define SCM_FRACTION_REDUCED_BIT 0x10000
-#define SCM_FRACTION_REDUCED_SET(x) (SCM_SET_CELL_TYPE((x), (SCM_CELL_TYPE (x) 
| SCM_FRACTION_REDUCED_BIT)))
-#define SCM_FRACTION_REDUCED_CLEAR(x) (SCM_SET_CELL_TYPE((x), (SCM_CELL_TYPE 
(x) & ~SCM_FRACTION_REDUCED_BIT)))
-#define SCM_FRACTION_REDUCED(x)     (0x10000 & SCM_CELL_TYPE (x))
 
 
 

--- End Message ---
--- Begin Message ---
Package: guile-1.8
Version: 1.8.2+1-1

Michael Welsh Duggan <[EMAIL PROTECTED]> writes:

> In order to compile development versions of Lilypond, either
> guile-1.8.2 or guile-1.8.1 with the following patch fixing the
> reading of fractions is needed:

Version 1.8.2 has been uploaded to unstable.

Thanks
-- 
Rob Browning
rlb @defaultvalue.org and @debian.org; previously @cs.utexas.edu
GPG as of 2002-11-03 14DD 432F AE39 534D B592 F9A0 25C8 D377 8C7E 73A4

--- End Message ---

Reply via email to