[MLton-commit] r7553

Wesley Terpstra wesley at mlton.org
Tue Jul 19 03:45:29 PDT 2011


Incremental patch


----------------------------------------------------------------------

A   mlton/trunk/package/debian/patches/22-fixes-20110319-to-20110719.patch
U   mlton/trunk/package/debian/patches/series

----------------------------------------------------------------------

Added: mlton/trunk/package/debian/patches/22-fixes-20110319-to-20110719.patch
===================================================================
--- mlton/trunk/package/debian/patches/22-fixes-20110319-to-20110719.patch	2011-07-19 10:37:02 UTC (rev 7552)
+++ mlton/trunk/package/debian/patches/22-fixes-20110319-to-20110719.patch	2011-07-19 10:45:17 UTC (rev 7553)
@@ -0,0 +1,100420 @@
+Index: regression/weird-word1.sml
+===================================================================
+--- regression/weird-word1.sml	(revision 0)
++++ regression/weird-word1.sml	(revision 7552)
+@@ -0,0 +1,26 @@
++fun fib (w: Word5.word) : Word5.word =
++   if w <= 0wx1
++      then 0wx1
++   else fib (w - 0wx1) + fib (w - 0wx2)
++
++val s =
++   case (fib 0wx5) of
++      0wx0 => "0wx0"
++    | 0wx1 => "0wx1"
++    | 0wx2 => "0wx2"
++    | 0wx3 => "0wx3"
++    | 0wx4 => "0wx4"
++    | 0wx5 => "0wx5"
++    | 0wx6 => "0wx6"
++    | 0wx7 => "0wx7"
++    | 0wx8 => "0wx8"
++    | 0wx9 => "0wx9"
++    | 0wxA => "0wxA"
++    | 0wxB => "0wxB"
++    | 0wxC => "0wxC"
++    | 0wxD => "0wxD"
++    | 0wxE => "0wxE"
++    | 0wxF => "0wxF"
++    | _ => "zzz"
++
++val _ = print (concat [s, "\n"])
+Index: regression/weird-word2.sml
+===================================================================
+--- regression/weird-word2.sml	(revision 0)
++++ regression/weird-word2.sml	(revision 7552)
+@@ -0,0 +1,41 @@
++fun fib (w: Word5.word) : Word5.word =
++   if w <= 0wx1
++      then 0wx1
++   else fib (w - 0wx1) + fib (w - 0wx2)
++
++val s =
++   case (fib 0wx5) of
++      0wx0 => "0wx0"
++    | 0wx1 => "0wx1"
++    | 0wx2 => "0wx2"
++    | 0wx3 => "0wx3"
++    | 0wx4 => "0wx4"
++    | 0wx5 => "0wx5"
++    | 0wx6 => "0wx6"
++    | 0wx7 => "0wx7"
++    | 0wx8 => "0wx8"
++    | 0wx9 => "0wx9"
++    | 0wxA => "0wxA"
++    | 0wxB => "0wxB"
++    | 0wxC => "0wxC"
++    | 0wxD => "0wxD"
++    | 0wxE => "0wxE"
++    | 0wxF => "0wxF"
++    | 0wx10 => "0wx10"
++    | 0wx11 => "0wx11"
++    | 0wx12 => "0wx12"
++    | 0wx13 => "0wx13"
++    | 0wx14 => "0wx14"
++    | 0wx15 => "0wx15"
++    | 0wx16 => "0wx16"
++    | 0wx17 => "0wx17"
++    | 0wx18 => "0wx18"
++    | 0wx19 => "0wx19"
++    | 0wx1A => "0wx1A"
++    | 0wx1B => "0wx1B"
++    | 0wx1C => "0wx1C"
++    | 0wx1D => "0wx1D"
++    | 0wx1E => "0wx1E"
++    | 0wx1F => "0wx1F"
++
++val _ = print (concat [s, "\n"])
+Index: regression/weird-word1.ok
+===================================================================
+--- regression/weird-word1.ok	(revision 0)
++++ regression/weird-word1.ok	(revision 7552)
+@@ -0,0 +1 @@
++0wx8
+Index: regression/weird-word2.ok
+===================================================================
+--- regression/weird-word2.ok	(revision 0)
++++ regression/weird-word2.ok	(revision 7552)
+@@ -0,0 +1 @@
++0wx8
+Index: mllex/lexgen.sml
+===================================================================
+--- mllex/lexgen.sml	(revision 7524)
++++ mllex/lexgen.sml	(revision 7552)
+@@ -1,3 +1,6 @@
++(* Modified by Matthew Fluet on 2011-06-17.
++ * Use simple file name (rather than absolute paths) in line directives in output.
++ *)
+ (* Modified by Vesa Karvonen on 2007-12-19.
+  * Create line directives in output.
+  *)
+@@ -295,7 +298,7 @@
+    val OutFile = ref ""
+    fun fmtLineDir {line, col} file =
+        String.concat ["(*#line ", Int.toString line, ".", Int.toString (col+1),
+-                      " \"", OS.FileSys.fullPath file, "\"*)"]
++                      " \"", file, "\"*)"]
+    val sayPos =
+     fn SOME pos => say (fmtLineDir pos (!InFile))
+      | NONE => (say (fmtLineDir {line = !LexOutLine, col = 0} (!OutFile));
+@@ -1284,7 +1287,7 @@
+ 
+ fun lexGen(infile) =
+     let val outfile = infile ^ ".sml"
+-        val () = (InFile := infile; OutFile := outfile)
++        val () = (InFile := OS.Path.file infile; OutFile := OS.Path.file outfile)
+       fun PrintLexer (ends) =
+     let val sayln = fn x => (say x; say "\n")
+      in case !ArgCode
+Index: include/bytecode.h
+===================================================================
+--- include/bytecode.h	(revision 7524)
++++ include/bytecode.h	(revision 7552)
+@@ -1,12 +0,0 @@
+-/* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh
+- *    Jagannathan, and Stephen Weeks.
+- *
+- * MLton is released under a BSD-style license.
+- * See the file MLton-LICENSE for details.
+- */
+-
+-#include <stdint.h>
+-#include "ml-types.h"
+-#include "c-types.h"
+-#include "export.h"
+-#include "interpret.h"
+Index: include/bytecode-main.h
+===================================================================
+--- include/bytecode-main.h	(revision 7524)
++++ include/bytecode-main.h	(revision 7552)
+@@ -1,87 +0,0 @@
+-/* Copyright (C) 2004-2007 Henry Cejtin, Matthew Fluet, Suresh
+- *    Jagannathan, and Stephen Weeks.
+- *
+- * MLton is released under a BSD-style license.
+- * See the file MLton-LICENSE for details.
+- */
+-
+-#ifndef _BYTECODE_MAIN_H_
+-#define _BYTECODE_MAIN_H_
+-
+-#include "common-main.h"
+-#include "interpret.h"
+-
+-#ifndef DEBUG_CODEGEN
+-#define DEBUG_CODEGEN FALSE
+-#endif
+-
+-PRIVATE extern struct Bytecode MLton_bytecode;
+-
+-static GC_frameIndex returnAddressToFrameIndex (GC_returnAddress ra) {
+-        return *((GC_frameIndex*)(MLton_bytecode.code + ra - sizeof(GC_frameIndex)));
+-}
+-
+-#define MLtonCallFromC                                                  \
+-static void MLton_callFromC () {                                        \
+-        uintptr_t nextFun;                                              \
+-        GC_state s;                                                     \
+-                                                                        \
+-        if (DEBUG_CODEGEN)                                              \
+-                fprintf (stderr, "MLton_callFromC() starting\n");       \
+-        s = &gcState;                                                   \
+-        GC_setSavedThread (s, GC_getCurrentThread (s));                 \
+-        s->atomicState += 3;                                            \
+-        if (s->signalsInfo.signalIsPending)                             \
+-                s->limit = s->limitPlusSlop - GC_HEAP_LIMIT_SLOP;       \
+-        /* Switch to the C Handler thread. */                           \
+-        GC_switchToThread (s, GC_getCallFromCHandlerThread (s), 0);     \
+-        nextFun = *(uintptr_t*)(s->stackTop - GC_RETURNADDRESS_SIZE);   \
+-        MLton_Bytecode_interpret (&MLton_bytecode, nextFun);            \
+-        s->atomicState += 1;                                            \
+-        GC_switchToThread (s, GC_getSavedThread (s), 0);                \
+-        s->atomicState -= 1;                                            \
+-        if (0 == s->atomicState                                         \
+-            && s->signalsInfo.signalIsPending)                          \
+-                s->limit = 0;                                           \
+-        if (DEBUG_CODEGEN)                                              \
+-                fprintf (stderr, "MLton_callFromC done\n");             \
+-}                                                                       \
+-
+-#define MLtonMain(al, mg, mfs, mmc, pk, ps, ml)                         \
+-MLtonCallFromC                                                          \
+-PUBLIC int MLton_main (int argc, char* argv[]) {                        \
+-        uintptr_t nextFun;                                              \
+-        Initialize (al, mg, mfs, mmc, pk, ps);                          \
+-        if (gcState.amOriginal) {                                       \
+-                real_Init();                                            \
+-                nextFun = ml;                                           \
+-        } else {                                                        \
+-                /* Return to the saved world */                         \
+-                nextFun = *(uintptr_t*)(gcState.stackTop - GC_RETURNADDRESS_SIZE); \
+-        }                                                               \
+-        MLton_Bytecode_interpret (&MLton_bytecode, nextFun);            \
+-        return 1;                                                       \
+-}
+-
+-#define MLtonLibrary(al, mg, mfs, mmc, pk, ps, ml)                      \
+-MLtonCallFromC                                                          \
+-PUBLIC void LIB_OPEN(LIBNAME) (int argc, char* argv[]) {                \
+-        uintptr_t nextFun;                                              \
+-        Initialize (al, mg, mfs, mmc, pk, ps);                          \
+-        if (gcState.amOriginal) {                                       \
+-                real_Init();                                            \
+-                nextFun = ml;                                           \
+-        } else {                                                        \
+-                /* Return to the saved world */                         \
+-                nextFun = *(uintptr_t*)(gcState.stackTop - GC_RETURNADDRESS_SIZE); \
+-        }                                                               \
+-        MLton_Bytecode_interpret (&MLton_bytecode, nextFun);            \
+-}                                                                       \
+-PUBLIC void LIB_CLOSE(LIBNAME) () {                                     \
+-        uintptr_t nextFun;                                              \
+-        nextFun = *(uintptr_t*)(gcState.stackTop - GC_RETURNADDRESS_SIZE); \
+-        MLton_Bytecode_interpret (&MLton_bytecode, nextFun);            \
+-        GC_done(&gcState);                                              \
+-}
+-
+-#endif /* #ifndef _BYTECODE_MAIN_H */
+Index: runtime/gdtoa-patch.mlton
+===================================================================
+--- runtime/gdtoa-patch.mlton	(revision 7524)
++++ runtime/gdtoa-patch.mlton	(revision 7552)
+@@ -1,98 +1,103 @@
+---- gdtoa/gdtoa.h.orig	2008-07-31 18:07:23.128804424 +0200
+-+++ gdtoa/gdtoa.h	2008-07-31 18:09:01.333773640 +0200
+-@@ -39,6 +39,7 @@
+- #define GDTOA_H_INCLUDED
+- 
+- #include "arith.h"
+-+#include "../export.h"
+- 
+- #ifndef Long
+- #define Long long
+-@@ -108,42 +109,42 @@
+- extern "C" {
+- #endif
+- 
+--extern char* gdtoa__dtoa  ANSI((double d, int mode, int ndigits, int *decpt,
+-+PRIVATE extern char* gdtoa__dtoa  ANSI((double d, int mode, int ndigits, int *decpt,
+- 			int *sign, char **rve));
+--extern char* gdtoa__gdtoa ANSI((FPI *fpi, int be, ULong *bits, int *kindp,
+-+PRIVATE extern char* gdtoa__gdtoa ANSI((FPI *fpi, int be, ULong *bits, int *kindp,
+- 			int mode, int ndigits, int *decpt, char **rve));
+--extern void gdtoa__freedtoa ANSI((char*));
+--extern float  gdtoa__strtof ANSI((CONST char *, char **));
+--extern double gdtoa__strtod ANSI((CONST char *, char **));
+--extern int gdtoa__strtodg ANSI((CONST char*, char**, FPI*, Long*, ULong*));
+--
+--extern char*	gdtoa__g_ddfmt  ANSI((char*, double*, int, unsigned));
+--extern char*	gdtoa__g_dfmt   ANSI((char*, double*, int, unsigned));
+--extern char*	gdtoa__g_ffmt   ANSI((char*, float*,  int, unsigned));
+--extern char*	gdtoa__g_Qfmt   ANSI((char*, void*,   int, unsigned));
+--extern char*	gdtoa__g_xfmt   ANSI((char*, void*,   int, unsigned));
+--extern char*	gdtoa__g_xLfmt  ANSI((char*, void*,   int, unsigned));
+--
+--extern int	gdtoa__strtoId  ANSI((CONST char*, char**, double*, double*));
+--extern int	gdtoa__strtoIdd ANSI((CONST char*, char**, double*, double*));
+--extern int	gdtoa__strtoIf  ANSI((CONST char*, char**, float*, float*));
+--extern int	gdtoa__strtoIQ  ANSI((CONST char*, char**, void*, void*));
+--extern int	gdtoa__strtoIx  ANSI((CONST char*, char**, void*, void*));
+--extern int	gdtoa__strtoIxL ANSI((CONST char*, char**, void*, void*));
+--extern int	gdtoa__strtord  ANSI((CONST char*, char**, int, double*));
+--extern int	gdtoa__strtordd ANSI((CONST char*, char**, int, double*));
+--extern int	gdtoa__strtorf  ANSI((CONST char*, char**, int, float*));
+--extern int	gdtoa__strtorQ  ANSI((CONST char*, char**, int, void*));
+--extern int	gdtoa__strtorx  ANSI((CONST char*, char**, int, void*));
+--extern int	gdtoa__strtorxL ANSI((CONST char*, char**, int, void*));
+-+PRIVATE extern void gdtoa__freedtoa ANSI((char*));
+-+PRIVATE extern float  gdtoa__strtof ANSI((CONST char *, char **));
+-+PRIVATE extern double gdtoa__strtod ANSI((CONST char *, char **));
+-+PRIVATE extern int gdtoa__strtodg ANSI((CONST char*, char**, FPI*, Long*, ULong*));
+-+
+-+PRIVATE extern char*	gdtoa__g_ddfmt  ANSI((char*, double*, int, unsigned));
+-+PRIVATE extern char*	gdtoa__g_dfmt   ANSI((char*, double*, int, unsigned));
+-+PRIVATE extern char*	gdtoa__g_ffmt   ANSI((char*, float*,  int, unsigned));
+-+PRIVATE extern char*	gdtoa__g_Qfmt   ANSI((char*, void*,   int, unsigned));
+-+PRIVATE extern char*	gdtoa__g_xfmt   ANSI((char*, void*,   int, unsigned));
+-+PRIVATE extern char*	gdtoa__g_xLfmt  ANSI((char*, void*,   int, unsigned));
+-+
+-+PRIVATE extern int	gdtoa__strtoId  ANSI((CONST char*, char**, double*, double*));
+-+PRIVATE extern int	gdtoa__strtoIdd ANSI((CONST char*, char**, double*, double*));
+-+PRIVATE extern int	gdtoa__strtoIf  ANSI((CONST char*, char**, float*, float*));
+-+PRIVATE extern int	gdtoa__strtoIQ  ANSI((CONST char*, char**, void*, void*));
+-+PRIVATE extern int	gdtoa__strtoIx  ANSI((CONST char*, char**, void*, void*));
+-+PRIVATE extern int	gdtoa__strtoIxL ANSI((CONST char*, char**, void*, void*));
+-+PRIVATE extern int	gdtoa__strtord  ANSI((CONST char*, char**, int, double*));
+-+PRIVATE extern int	gdtoa__strtordd ANSI((CONST char*, char**, int, double*));
+-+PRIVATE extern int	gdtoa__strtorf  ANSI((CONST char*, char**, int, float*));
+-+PRIVATE extern int	gdtoa__strtorQ  ANSI((CONST char*, char**, int, void*));
+-+PRIVATE extern int	gdtoa__strtorx  ANSI((CONST char*, char**, int, void*));
+-+PRIVATE extern int	gdtoa__strtorxL ANSI((CONST char*, char**, int, void*));
+- #if 1
+--extern int	gdtoa__strtodI  ANSI((CONST char*, char**, double*));
+--extern int	gdtoa__strtopd  ANSI((CONST char*, char**, double*));
+--extern int	gdtoa__strtopdd ANSI((CONST char*, char**, double*));
+--extern int	gdtoa__strtopf  ANSI((CONST char*, char**, float*));
+--extern int	gdtoa__strtopQ  ANSI((CONST char*, char**, void*));
+--extern int	gdtoa__strtopx  ANSI((CONST char*, char**, void*));
+--extern int	gdtoa__strtopxL ANSI((CONST char*, char**, void*));
+-+PRIVATE extern int	gdtoa__strtodI  ANSI((CONST char*, char**, double*));
+-+PRIVATE extern int	gdtoa__strtopd  ANSI((CONST char*, char**, double*));
+-+PRIVATE extern int	gdtoa__strtopdd ANSI((CONST char*, char**, double*));
+-+PRIVATE extern int	gdtoa__strtopf  ANSI((CONST char*, char**, float*));
+-+PRIVATE extern int	gdtoa__strtopQ  ANSI((CONST char*, char**, void*));
+-+PRIVATE extern int	gdtoa__strtopx  ANSI((CONST char*, char**, void*));
+-+PRIVATE extern int	gdtoa__strtopxL ANSI((CONST char*, char**, void*));
+- #else
+- #define gdtoa__strtopd(s,se,x) gdtoa__strtord(s,se,1,x)
+- #define gdtoa__strtopdd(s,se,x) gdtoa__strtordd(s,se,1,x)
+---- gdtoa/gdtoaimp.h.orig	2008-10-04 02:33:51 +0000
+-+++ gdtoa/gdtoaimp.h	2008-10-04 02:34:41 +0000
+-@@ -503,7 +503,8 @@
+- #define g__fmt g__fmt_D2A
+- #define gethex gethex_D2A
+- #define hexdig hexdig_D2A
+--#define hexdig_init hexdig_init_D2A
+-+/* work around MinGW bug */
+-+#define hexdig_init hexdig_init_D3A
+- #define hexnan hexnan_D2A
+- #define hi0bits hi0bits_D2A
+- #define i2b i2b_D2A
++diff -P -C 2 -r gdtoa/gdtoa.h gdtoa-new/gdtoa.h
++*** gdtoa/gdtoa.h	2011-05-27 17:20:57.492026828 -0400
++--- gdtoa-new/gdtoa.h	2011-05-27 17:21:21.004032383 -0400
++***************
++*** 105,144 ****
++  #endif
++  
++! extern char* gdtoa__dtoa  ANSI((double d, int mode, int ndigits, int *decpt,
++  			int *sign, char **rve));
++! extern char* gdtoa__gdtoa ANSI((FPI *fpi, int be, ULong *bits, int *kindp,
++  			int mode, int ndigits, int *decpt, char **rve));
++! extern void gdtoa__freedtoa ANSI((char*));
++! extern float  gdtoa__strtof ANSI((CONST char *, char **));
++! extern double gdtoa__strtod ANSI((CONST char *, char **));
++! extern int gdtoa__strtodg ANSI((CONST char*, char**, FPI*, Long*, ULong*));
++  
++! extern char*	gdtoa__g_ddfmt  ANSI((char*, double*, int, size_t));
++! extern char*	gdtoa__g_dfmt   ANSI((char*, double*, int, size_t));
++! extern char*	gdtoa__g_ffmt   ANSI((char*, float*,  int, size_t));
++! extern char*	gdtoa__g_Qfmt   ANSI((char*, void*,   int, size_t));
++! extern char*	gdtoa__g_xfmt   ANSI((char*, void*,   int, size_t));
++! extern char*	gdtoa__g_xLfmt  ANSI((char*, void*,   int, size_t));
++  
++! extern int	gdtoa__strtoId  ANSI((CONST char*, char**, double*, double*));
++! extern int	gdtoa__strtoIdd ANSI((CONST char*, char**, double*, double*));
++! extern int	gdtoa__strtoIf  ANSI((CONST char*, char**, float*, float*));
++! extern int	gdtoa__strtoIQ  ANSI((CONST char*, char**, void*, void*));
++! extern int	gdtoa__strtoIx  ANSI((CONST char*, char**, void*, void*));
++! extern int	gdtoa__strtoIxL ANSI((CONST char*, char**, void*, void*));
++! extern int	gdtoa__strtord  ANSI((CONST char*, char**, int, double*));
++! extern int	gdtoa__strtordd ANSI((CONST char*, char**, int, double*));
++! extern int	gdtoa__strtorf  ANSI((CONST char*, char**, int, float*));
++! extern int	gdtoa__strtorQ  ANSI((CONST char*, char**, int, void*));
++! extern int	gdtoa__strtorx  ANSI((CONST char*, char**, int, void*));
++! extern int	gdtoa__strtorxL ANSI((CONST char*, char**, int, void*));
++  #if 1
++! extern int	gdtoa__strtodI  ANSI((CONST char*, char**, double*));
++! extern int	gdtoa__strtopd  ANSI((CONST char*, char**, double*));
++! extern int	gdtoa__strtopdd ANSI((CONST char*, char**, double*));
++! extern int	gdtoa__strtopf  ANSI((CONST char*, char**, float*));
++! extern int	gdtoa__strtopQ  ANSI((CONST char*, char**, void*));
++! extern int	gdtoa__strtopx  ANSI((CONST char*, char**, void*));
++! extern int	gdtoa__strtopxL ANSI((CONST char*, char**, void*));
++  #else
++  #define gdtoa__strtopd(s,se,x) gdtoa__strtord(s,se,1,x)
++--- 105,144 ----
++  #endif
++  
++! PRIVATE extern char* gdtoa__dtoa  ANSI((double d, int mode, int ndigits, int *decpt,
++  			int *sign, char **rve));
++! PRIVATE extern char* gdtoa__gdtoa ANSI((FPI *fpi, int be, ULong *bits, int *kindp,
++  			int mode, int ndigits, int *decpt, char **rve));
++! PRIVATE extern void gdtoa__freedtoa ANSI((char*));
++! PRIVATE extern float  gdtoa__strtof ANSI((CONST char *, char **));
++! PRIVATE extern double gdtoa__strtod ANSI((CONST char *, char **));
++! PRIVATE extern int gdtoa__strtodg ANSI((CONST char*, char**, FPI*, Long*, ULong*));
++  
++! PRIVATE extern char*	gdtoa__g_ddfmt  ANSI((char*, double*, int, size_t));
++! PRIVATE extern char*	gdtoa__g_dfmt   ANSI((char*, double*, int, size_t));
++! PRIVATE extern char*	gdtoa__g_ffmt   ANSI((char*, float*,  int, size_t));
++! PRIVATE extern char*	gdtoa__g_Qfmt   ANSI((char*, void*,   int, size_t));
++! PRIVATE extern char*	gdtoa__g_xfmt   ANSI((char*, void*,   int, size_t));
++! PRIVATE extern char*	gdtoa__g_xLfmt  ANSI((char*, void*,   int, size_t));
++  
++! PRIVATE extern int	gdtoa__strtoId  ANSI((CONST char*, char**, double*, double*));
++! PRIVATE extern int	gdtoa__strtoIdd ANSI((CONST char*, char**, double*, double*));
++! PRIVATE extern int	gdtoa__strtoIf  ANSI((CONST char*, char**, float*, float*));
++! PRIVATE extern int	gdtoa__strtoIQ  ANSI((CONST char*, char**, void*, void*));
++! PRIVATE extern int	gdtoa__strtoIx  ANSI((CONST char*, char**, void*, void*));
++! PRIVATE extern int	gdtoa__strtoIxL ANSI((CONST char*, char**, void*, void*));
++! PRIVATE extern int	gdtoa__strtord  ANSI((CONST char*, char**, int, double*));
++! PRIVATE extern int	gdtoa__strtordd ANSI((CONST char*, char**, int, double*));
++! PRIVATE extern int	gdtoa__strtorf  ANSI((CONST char*, char**, int, float*));
++! PRIVATE extern int	gdtoa__strtorQ  ANSI((CONST char*, char**, int, void*));
++! PRIVATE extern int	gdtoa__strtorx  ANSI((CONST char*, char**, int, void*));
++! PRIVATE extern int	gdtoa__strtorxL ANSI((CONST char*, char**, int, void*));
++  #if 1
++! PRIVATE extern int	gdtoa__strtodI  ANSI((CONST char*, char**, double*));
++! PRIVATE extern int	gdtoa__strtopd  ANSI((CONST char*, char**, double*));
++! PRIVATE extern int	gdtoa__strtopdd ANSI((CONST char*, char**, double*));
++! PRIVATE extern int	gdtoa__strtopf  ANSI((CONST char*, char**, float*));
++! PRIVATE extern int	gdtoa__strtopQ  ANSI((CONST char*, char**, void*));
++! PRIVATE extern int	gdtoa__strtopx  ANSI((CONST char*, char**, void*));
++! PRIVATE extern int	gdtoa__strtopxL ANSI((CONST char*, char**, void*));
++  #else
++  #define gdtoa__strtopd(s,se,x) gdtoa__strtord(s,se,1,x)
++diff -P -C 2 -r gdtoa/gdtoaimp.h gdtoa-new/gdtoaimp.h
++*** gdtoa/gdtoaimp.h	2011-05-27 17:20:57.493026911 -0400
++--- gdtoa-new/gdtoaimp.h	2011-05-27 17:21:21.004032383 -0400
++***************
++*** 504,508 ****
++  #define gethex gethex_D2A
++  #define hexdig hexdig_D2A
++! #define hexdig_init hexdig_init_D2A
++  #define hexnan hexnan_D2A
++  #define hi0bits(x) hi0bits_D2A((ULong)(x))
++--- 504,509 ----
++  #define gethex gethex_D2A
++  #define hexdig hexdig_D2A
++! /* work around MinGW bug */
++! #define hexdig_init hexdig_init_D3A
++  #define hexnan hexnan_D2A
++  #define hi0bits(x) hi0bits_D2A((ULong)(x))
+Index: runtime/gc/copy-thread.c
+===================================================================
+--- runtime/gc/copy-thread.c	(revision 7524)
++++ runtime/gc/copy-thread.c	(revision 7552)
+@@ -1,4 +1,5 @@
+-/* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh
++/* Copyright (C) 2011 Matthew Fluet.
++ * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh
+  *    Jagannathan, and Stephen Weeks.
+  * Copyright (C) 1997-2000 NEC Research Institute.
+  *
+@@ -35,7 +36,7 @@
+   GC_thread fromThread;
+   GC_stack fromStack;
+   GC_thread toThread;
+-  GC_stack toStack;
++  GC_stack __attribute__ ((unused)) toStack;
+ 
+   if (DEBUG_THREADS)
+     fprintf (stderr, "GC_copyCurrentThread\n");
+@@ -57,7 +58,7 @@
+   GC_thread fromThread;
+   GC_stack fromStack;
+   GC_thread toThread;
+-  GC_stack toStack;
++  GC_stack __attribute__ ((unused)) toStack;
+ 
+   if (DEBUG_THREADS)
+     fprintf (stderr, "GC_copyThread ("FMTPTR")\n", (uintptr_t)p);
+Index: runtime/gc/heap.c
+===================================================================
+--- runtime/gc/heap.c	(revision 7524)
++++ runtime/gc/heap.c	(revision 7552)
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2009-2010 Matthew Fluet.
++/* Copyright (C) 2009-2011 Matthew Fluet.
+  * Copyright (C) 2005-2008 Henry Cejtin, Matthew Fluet, Suresh
+  *    Jagannathan, and Stephen Weeks.
+  *
+@@ -41,7 +41,7 @@
+   size_t liveMapsSize, liveWithMapsSize;
+   size_t currentMapsSize, currentWithMapsSize;
+   size_t resSize, resWithMapsSize;
+-  size_t syslimSize, syslimMapsSize, syslimWithMapsSize;
++  size_t syslimSize, __attribute__ ((unused)) syslimMapsSize, syslimWithMapsSize;
+   double ratio;
+ 
+   syslimWithMapsSize = alignDown (SIZE_MAX, s->sysvals.pageSize);
+@@ -553,12 +553,11 @@
+  */
+ void resizeHeapSecondary (GC_state s) {
+   size_t primarySize, primaryWithMapsSize;
+-  size_t secondarySize, secondaryWithMapsSize;
++  size_t secondarySize;
+ 
+   primarySize = s->heap.size;
+   primaryWithMapsSize = s->heap.withMapsSize;
+   secondarySize = s->secondaryHeap.size;
+-  secondaryWithMapsSize = s->secondaryHeap.withMapsSize;
+   if (DEBUG_RESIZING)
+     fprintf (stderr, "secondaryHeapResize\n");
+   if (0 == secondarySize)
+Index: runtime/gc/init-world.c
+===================================================================
+--- runtime/gc/init-world.c	(revision 7524)
++++ runtime/gc/init-world.c	(revision 7552)
+@@ -1,4 +1,5 @@
+-/* Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh
++/* Copyright (C) 2011 Matthew Fluet.
++ * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh
+  *    Jagannathan, and Stephen Weeks.
+  * Copyright (C) 1997-2000 NEC Research Institute.
+  *
+@@ -51,7 +52,7 @@
+   size_t bytes;
+   bool neg;
+   __mpz_struct resmpz;
+-  int ans;
++  __attribute__ ((unused)) int ans;
+ 
+   assert (isFrontierAligned (s, s->frontier));
+   for (i = 0; i < s->intInfInitsLength; i++) {
+Index: runtime/gc/profiling.c
+===================================================================
+--- runtime/gc/profiling.c	(revision 7524)
++++ runtime/gc/profiling.c	(revision 7552)
+@@ -1,4 +1,5 @@
+-/* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh
++/* Copyright (C) 2011 Matthew Fluet.
++ * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh
+  *    Jagannathan, and Stephen Weeks.
+  * Copyright (C) 1997-2000 NEC Research Institute.
+  *
+@@ -76,7 +77,6 @@
+ 
+ void enterForProfiling (GC_state s, GC_sourceSeqIndex sourceSeqIndex) {
+   uint32_t i;
+-  GC_profileData p;
+   GC_sourceIndex sourceIndex;
+   uint32_t *sourceSeq;
+ 
+@@ -84,7 +84,6 @@
+     fprintf (stderr, "enterForProfiling ("FMTSSI")\n", sourceSeqIndex);
+   assert (s->profiling.stack);
+   assert (sourceSeqIndex < s->sourceMaps.sourceSeqsLength);
+-  p = s->profiling.data;
+   sourceSeq = s->sourceMaps.sourceSeqs[sourceSeqIndex];
+   for (i = 1; i <= sourceSeq[0]; i++) {
+     sourceIndex = sourceSeq[i];
+@@ -123,10 +122,8 @@
+ }
+ 
+ void leaveSourceForProfiling (GC_state s, GC_profileMasterIndex i) {
+-  GC_profileData p;
+   GC_profileStack ps;
+ 
+-  p = s->profiling.data;
+   ps = getProfileStackInfo (s, i);
+   assert (ps->numOccurrences > 0);
+   ps->numOccurrences--;
+@@ -136,7 +133,6 @@
+ 
+ void leaveForProfiling (GC_state s, GC_sourceSeqIndex sourceSeqIndex) {
+   int32_t i;
+-  GC_profileData p;
+   GC_sourceIndex sourceIndex;
+   uint32_t *sourceSeq;
+ 
+@@ -144,7 +140,6 @@
+     fprintf (stderr, "leaveForProfiling ("FMTSSI")\n", sourceSeqIndex);
+   assert (s->profiling.stack);
+   assert (sourceSeqIndex < s->sourceMaps.sourceSeqsLength);
+-  p = s->profiling.data;
+   sourceSeq = s->sourceMaps.sourceSeqs[sourceSeqIndex];
+   for (i = sourceSeq[0]; i > 0; i--) {
+     sourceIndex = sourceSeq[i];
+Index: runtime/gc/invariant.c
+===================================================================
+--- runtime/gc/invariant.c	(revision 7524)
++++ runtime/gc/invariant.c	(revision 7552)
+@@ -1,4 +1,5 @@
+-/* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh
++/* Copyright (C) 2011 Matthew Fluet.
++ * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh
+  *    Jagannathan, and Stephen Weeks.
+  * Copyright (C) 1997-2000 NEC Research Institute.
+  *
+@@ -42,6 +43,8 @@
+ 
+       assert (layout->size <= s->maxFrameSize);
+       offsets = layout->offsets;
++      for (unsigned int j = 0; j < offsets[0]; ++j)
++        assert (offsets[j + 1] < layout->size);
+     }
+   }
+   /* Generational */
+Index: runtime/gdtoa-patch
+===================================================================
+--- runtime/gdtoa-patch	(revision 7524)
++++ runtime/gdtoa-patch	(revision 7552)
+@@ -1,918 +1,1119 @@
+-diff -u gdtoa.orig/arithchk.c gdtoa/arithchk.c
+---- gdtoa.orig/arithchk.c	1998-06-19 20:46:11 +0000
+-+++ gdtoa/arithchk.c	2008-10-04 02:01:43 +0000
+-@@ -136,7 +136,7 @@
+- 	return b == 0.;
+- 	}
+- 
+--main()
+-+int main()
+- {
+- 	Akind *a = 0;
+- 	int Ldef = 0;
+-diff -u gdtoa.orig/dmisc.c gdtoa/dmisc.c
+---- gdtoa.orig/dmisc.c	1998-11-02 19:34:31 +0000
+-+++ gdtoa/dmisc.c	2008-10-04 02:01:43 +0000
+-@@ -89,9 +89,9 @@
+- 
+-  void
+- #ifdef KR_headers
+--freedtoa(s) char *s;
+-+gdtoa__freedtoa(s) char *s;
+- #else
+--freedtoa(char *s)
+-+gdtoa__freedtoa(char *s)
+- #endif
+- {
+- 	Bigint *b = (Bigint *)((int *)s - 1);
+-diff -u gdtoa.orig/dtoa.c gdtoa/dtoa.c
+---- gdtoa.orig/dtoa.c	2000-11-02 15:09:01 +0000
+-+++ gdtoa/dtoa.c	2008-10-04 02:01:43 +0000
+-@@ -80,7 +80,7 @@
+- #endif
+- 
+-  char *
+--dtoa
+-+gdtoa__dtoa
+- #ifdef KR_headers
+- 	(d, mode, ndigits, decpt, sign, rve)
+- 	double d; int mode, ndigits, *decpt, *sign; char **rve;
+-@@ -142,7 +142,7 @@
+- 
+- #ifndef MULTIPLE_THREADS
+- 	if (dtoa_result) {
+--		freedtoa(dtoa_result);
+-+		gdtoa__freedtoa(dtoa_result);
+- 		dtoa_result = 0;
+- 		}
+- #endif
+-diff -u gdtoa.orig/g_Qfmt.c gdtoa/g_Qfmt.c
+---- gdtoa.orig/g_Qfmt.c	2000-11-01 15:21:10 +0000
+-+++ gdtoa/g_Qfmt.c	2008-10-04 02:01:43 +0000
+-@@ -57,9 +57,9 @@
+- 
+-  char*
+- #ifdef KR_headers
+--g_Qfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; unsigned bufsize;
+-+gdtoa__g_Qfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; unsigned bufsize;
+- #else
+--g_Qfmt(char *buf, void *V, int ndig, unsigned bufsize)
+-+gdtoa__g_Qfmt(char *buf, void *V, int ndig, unsigned bufsize)
+- #endif
+- {
+- 	static FPI fpi = { 113, 1-16383-113+1, 32766 - 16383 - 113 + 1, 1, 0 };
+-@@ -115,6 +115,6 @@
+- 			return 0;
+- 		mode = 0;
+- 		}
+--	s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
+-+	s = gdtoa__gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
+- 	return g__fmt(buf, s, se, decpt, sign);
+- 	}
+-diff -u gdtoa.orig/g__fmt.c gdtoa/g__fmt.c
+---- gdtoa.orig/g__fmt.c	2003-03-21 20:59:43 +0000
+-+++ gdtoa/g__fmt.c	2008-10-04 02:01:43 +0000
+-@@ -96,6 +96,6 @@
+- 			*b++ = '0';
+- 		*b = 0;
+- 		}
+--	freedtoa(s0);
+-+	gdtoa__freedtoa(s0);
+- 	return b;
++diff -P -C 2 -r gdtoa/dmisc.c gdtoa-new/dmisc.c
++*** gdtoa/dmisc.c	2004-04-11 23:39:50.000000000 -0400
++--- gdtoa-new/dmisc.c	2011-05-27 17:09:13.940030010 -0400
++***************
++*** 84,90 ****
++   void
++  #ifdef KR_headers
++! freedtoa(s) char *s;
++  #else
++! freedtoa(char *s)
++  #endif
++  {
++--- 84,90 ----
++   void
++  #ifdef KR_headers
++! gdtoa__freedtoa(s) char *s;
++  #else
++! gdtoa__freedtoa(char *s)
++  #endif
++  {
++diff -P -C 2 -r gdtoa/dtoa.c gdtoa-new/dtoa.c
++*** gdtoa/dtoa.c	2010-09-15 10:59:11.000000000 -0400
++--- gdtoa-new/dtoa.c	2011-05-27 17:09:13.940030010 -0400
++***************
++*** 74,78 ****
++  
++   char *
++! dtoa
++  #ifdef KR_headers
++  	(d0, mode, ndigits, decpt, sign, rve)
++--- 74,78 ----
++  
++   char *
++! gdtoa__dtoa
++  #ifdef KR_headers
++  	(d0, mode, ndigits, decpt, sign, rve)
++***************
++*** 147,151 ****
++  #ifndef MULTIPLE_THREADS
++  	if (dtoa_result) {
++! 		freedtoa(dtoa_result);
++  		dtoa_result = 0;
++  		}
++--- 147,151 ----
++  #ifndef MULTIPLE_THREADS
++  	if (dtoa_result) {
++! 		gdtoa__freedtoa(dtoa_result);
++  		dtoa_result = 0;
++  		}
++diff -P -C 2 -r gdtoa/g_ddfmt.c gdtoa-new/g_ddfmt.c
++*** gdtoa/g_ddfmt.c	2009-04-11 23:11:05.000000000 -0400
++--- gdtoa-new/g_ddfmt.c	2011-05-27 17:09:13.940030010 -0400
++***************
++*** 34,40 ****
++   char *
++  #ifdef KR_headers
++! g_ddfmt(buf, dd0, ndig, bufsize) char *buf; double *dd0; int ndig; size_t bufsize;
++  #else
++! g_ddfmt(char *buf, double *dd0, int ndig, size_t bufsize)
++  #endif
++  {
++--- 34,40 ----
++   char *
++  #ifdef KR_headers
++! gdtoa__g_ddfmt(buf, dd0, ndig, bufsize) char *buf; double *dd0; int ndig; size_t bufsize;
++  #else
++! gdtoa__g_ddfmt(char *buf, double *dd0, int ndig, size_t bufsize)
++  #endif
++  {
++***************
++*** 164,168 ****
++  	fpi.sudden_underflow = 0;
++  	i = STRTOG_Normal;
++! 	s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
++  	b = g__fmt(buf, s, se, decpt, z->sign, bufsize);
++  	Bfree(z);
++--- 164,168 ----
++  	fpi.sudden_underflow = 0;
++  	i = STRTOG_Normal;
++! 	s = gdtoa__gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
++  	b = g__fmt(buf, s, se, decpt, z->sign, bufsize);
++  	Bfree(z);
++diff -P -C 2 -r gdtoa/g_dfmt.c gdtoa-new/g_dfmt.c
++*** gdtoa/g_dfmt.c	2010-07-08 23:38:41.000000000 -0400
++--- gdtoa-new/g_dfmt.c	2011-05-27 17:09:13.940030010 -0400
++***************
++*** 34,40 ****
++   char*
++  #ifdef KR_headers
++! g_dfmt(buf, d, ndig, bufsize) char *buf; double *d; int ndig; size_t bufsize;
++  #else
++! g_dfmt(char *buf, double *d, int ndig, size_t bufsize)
++  #endif
++  {
++--- 34,40 ----
++   char*
++  #ifdef KR_headers
++! gdtoa__g_dfmt(buf, d, ndig, bufsize) char *buf; double *d; int ndig; size_t bufsize;
++  #else
++! gdtoa__g_dfmt(char *buf, double *d, int ndig, size_t bufsize)
++  #endif
++  {
++***************
++*** 91,95 ****
++  	if (sign)
++  		i = STRTOG_Normal | STRTOG_Neg;
++! 	s = gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se);
++  	return g__fmt(buf, s, se, decpt, sign, bufsize);
+   	}
+-diff -u gdtoa.orig/g_ddfmt.c gdtoa/g_ddfmt.c
+---- gdtoa.orig/g_ddfmt.c	1998-09-09 12:09:31 +0000
+-+++ gdtoa/g_ddfmt.c	2008-10-04 02:01:43 +0000
+-@@ -40,9 +40,9 @@
+- 
+-  char *
+- #ifdef KR_headers
+--g_ddfmt(buf, dd, ndig, bufsize) char *buf; double *dd; int ndig; unsigned bufsize;
+-+gdtoa__g_ddfmt(buf, dd, ndig, bufsize) char *buf; double *dd; int ndig; unsigned bufsize;
+- #else
+--g_ddfmt(char *buf, double *dd, int ndig, unsigned bufsize)
+-+gdtoa__g_ddfmt(char *buf, double *dd, int ndig, unsigned bufsize)
+- #endif
+- {
+- 	FPI fpi;
+-@@ -154,7 +154,7 @@
+- 	fpi.rounding = FPI_Round_near;
+- 	fpi.sudden_underflow = 0;
+- 	i = STRTOG_Normal;
+--	s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
+-+	s = gdtoa__gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
+- 	b = g__fmt(buf, s, se, decpt, z->sign);
+- 	Bfree(z);
+- 	return b;
+-diff -u gdtoa.orig/g_dfmt.c gdtoa/g_dfmt.c
+---- gdtoa.orig/g_dfmt.c	1998-09-09 14:18:15 +0000
+-+++ gdtoa/g_dfmt.c	2008-10-04 02:01:43 +0000
+-@@ -39,9 +39,9 @@
+- 
+-  char*
+- #ifdef KR_headers
+--g_dfmt(buf, d, ndig, bufsize) char *buf; double *d; int ndig; unsigned bufsize;
+-+gdtoa__g_dfmt(buf, d, ndig, bufsize) char *buf; double *d; int ndig; unsigned bufsize;
+- #else
+--g_dfmt(char *buf, double *d, int ndig, unsigned bufsize)
+-+gdtoa__g_dfmt(char *buf, double *d, int ndig, unsigned bufsize)
+- #endif
+- {
+- 	static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, 0 };
+-@@ -90,6 +90,6 @@
+- 		mode = 0;
+- 		}
+- 	i = STRTOG_Normal;
+--	s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
+-+	s = gdtoa__gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
+- 	return g__fmt(buf, s, se, decpt, sign);
+- 	}
+-diff -u gdtoa.orig/g_ffmt.c gdtoa/g_ffmt.c
+---- gdtoa.orig/g_ffmt.c	1998-09-12 20:39:39 +0000
+-+++ gdtoa/g_ffmt.c	2008-10-04 02:01:43 +0000
+-@@ -39,9 +39,9 @@
+- 
+-  char*
+- #ifdef KR_headers
+--g_ffmt(buf, f, ndig, bufsize) char *buf; float *f; int ndig; unsigned bufsize;
+-+gdtoa__g_ffmt(buf, f, ndig, bufsize) char *buf; float *f; int ndig; unsigned bufsize;
+- #else
+--g_ffmt(char *buf, float *f, int ndig, unsigned bufsize)
+-+gdtoa__g_ffmt(char *buf, float *f, int ndig, unsigned bufsize)
+- #endif
+- {
+- 	static FPI fpi = { 24, 1-127-24+1,  254-127-24+1, 1, 0 };
+-@@ -89,6 +89,6 @@
+- 		mode = 0;
+- 		}
+- 	i = STRTOG_Normal;
+--	s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
+-+	s = gdtoa__gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
+- 	return g__fmt(buf, s, se, decpt, sign);
+- 	}
+-diff -u gdtoa.orig/g_xLfmt.c gdtoa/g_xLfmt.c
+---- gdtoa.orig/g_xLfmt.c	1998-09-09 16:35:43 +0000
+-+++ gdtoa/g_xLfmt.c	2008-10-04 02:01:43 +0000
+-@@ -55,9 +55,9 @@
+- 
+-  char*
+- #ifdef KR_headers
+--g_xLfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; unsigned bufsize;
+-+gdtoa__g_xLfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; unsigned bufsize;
+- #else
+--g_xLfmt(char *buf, void *V, int ndig, unsigned bufsize)
+-+gdtoa__g_xLfmt(char *buf, void *V, int ndig, unsigned bufsize)
+- #endif
+- {
+- 	static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 0 };
+-@@ -109,6 +109,6 @@
+- 			return 0;
+- 		mode = 0;
+- 		}
+--	s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
+-+	s = gdtoa__gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
+- 	return g__fmt(buf, s, se, decpt, sign);
+- 	}
+-diff -u gdtoa.orig/g_xfmt.c gdtoa/g_xfmt.c
+---- gdtoa.orig/g_xfmt.c	1998-09-09 13:59:17 +0000
+-+++ gdtoa/g_xfmt.c	2008-10-04 02:01:43 +0000
+-@@ -59,9 +59,9 @@
+- 
+-  char*
+- #ifdef KR_headers
+--g_xfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; unsigned bufsize;
+-+gdtoa__g_xfmt(buf, V, ndig, bufsize) char *buf; char *V; int ndig; unsigned bufsize;
+- #else
+--g_xfmt(char *buf, void *V, int ndig, unsigned bufsize)
+-+gdtoa__g_xfmt(char *buf, void *V, int ndig, unsigned bufsize)
+- #endif
+- {
+- 	static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, 0 };
+-@@ -114,6 +114,6 @@
+- 			return 0;
+- 		mode = 0;
+- 		}
+--	s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
+-+	s = gdtoa__gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
+- 	return g__fmt(buf, s, se, decpt, sign);
+- 	}
+-Only in gdtoa: gdtoa
+-diff -u gdtoa.orig/gdtoa.c gdtoa/gdtoa.c
+---- gdtoa.orig/gdtoa.c	1999-09-21 04:22:19 +0000
+-+++ gdtoa/gdtoa.c	2008-10-04 02:01:43 +0000
+-@@ -115,7 +115,7 @@
+-  */
+- 
+-  char *
+--gdtoa
+-+gdtoa__gdtoa
+- #ifdef KR_headers
+- 	(fpi, be, bits, kindp, mode, ndigits, decpt, rve)
+- 	FPI *fpi; int be; ULong *bits;
+-@@ -168,7 +168,7 @@
+- 
+- #ifndef MULTIPLE_THREADS
+- 	if (dtoa_result) {
+--		freedtoa(dtoa_result);
+-+		gdtoa__freedtoa(dtoa_result);
+- 		dtoa_result = 0;
+- 		}
+- #endif
+-diff -u gdtoa.orig/gdtoa.h gdtoa/gdtoa.h
+---- gdtoa.orig/gdtoa.h	2000-11-01 15:01:39 +0000
+-+++ gdtoa/gdtoa.h	2008-10-04 02:01:43 +0000
+-@@ -108,49 +108,49 @@
+- extern "C" {
+- #endif
+- 
+--extern char* dtoa  ANSI((double d, int mode, int ndigits, int *decpt,
+-+extern char* gdtoa__dtoa  ANSI((double d, int mode, int ndigits, int *decpt,
+- 			int *sign, char **rve));
+--extern char* gdtoa ANSI((FPI *fpi, int be, ULong *bits, int *kindp,
+-+extern char* gdtoa__gdtoa ANSI((FPI *fpi, int be, ULong *bits, int *kindp,
+- 			int mode, int ndigits, int *decpt, char **rve));
+--extern void freedtoa ANSI((char*));
+--extern float  strtof ANSI((CONST char *, char **));
+--extern double strtod ANSI((CONST char *, char **));
+--extern int strtodg ANSI((CONST char*, char**, FPI*, Long*, ULong*));
+-+extern void gdtoa__freedtoa ANSI((char*));
+-+extern float  gdtoa__strtof ANSI((CONST char *, char **));
+-+extern double gdtoa__strtod ANSI((CONST char *, char **));
+-+extern int gdtoa__strtodg ANSI((CONST char*, char**, FPI*, Long*, ULong*));
+- 
+--extern char*	g_ddfmt  ANSI((char*, double*, int, unsigned));
+--extern char*	g_dfmt   ANSI((char*, double*, int, unsigned));
+--extern char*	g_ffmt   ANSI((char*, float*,  int, unsigned));
+--extern char*	g_Qfmt   ANSI((char*, void*,   int, unsigned));
+--extern char*	g_xfmt   ANSI((char*, void*,   int, unsigned));
+--extern char*	g_xLfmt  ANSI((char*, void*,   int, unsigned));
+-+extern char*	gdtoa__g_ddfmt  ANSI((char*, double*, int, unsigned));
+-+extern char*	gdtoa__g_dfmt   ANSI((char*, double*, int, unsigned));
+-+extern char*	gdtoa__g_ffmt   ANSI((char*, float*,  int, unsigned));
+-+extern char*	gdtoa__g_Qfmt   ANSI((char*, void*,   int, unsigned));
+-+extern char*	gdtoa__g_xfmt   ANSI((char*, void*,   int, unsigned));
+-+extern char*	gdtoa__g_xLfmt  ANSI((char*, void*,   int, unsigned));
+- 
+--extern int	strtoId  ANSI((CONST char*, char**, double*, double*));
+--extern int	strtoIdd ANSI((CONST char*, char**, double*, double*));
+--extern int	strtoIf  ANSI((CONST char*, char**, float*, float*));
+--extern int	strtoIQ  ANSI((CONST char*, char**, void*, void*));
+--extern int	strtoIx  ANSI((CONST char*, char**, void*, void*));
+--extern int	strtoIxL ANSI((CONST char*, char**, void*, void*));
+--extern int	strtord  ANSI((CONST char*, char**, int, double*));
+--extern int	strtordd ANSI((CONST char*, char**, int, double*));
+--extern int	strtorf  ANSI((CONST char*, char**, int, float*));
+--extern int	strtorQ  ANSI((CONST char*, char**, int, void*));
+--extern int	strtorx  ANSI((CONST char*, char**, int, void*));
+--extern int	strtorxL ANSI((CONST char*, char**, int, void*));
+-+extern int	gdtoa__strtoId  ANSI((CONST char*, char**, double*, double*));
+-+extern int	gdtoa__strtoIdd ANSI((CONST char*, char**, double*, double*));
+-+extern int	gdtoa__strtoIf  ANSI((CONST char*, char**, float*, float*));
+-+extern int	gdtoa__strtoIQ  ANSI((CONST char*, char**, void*, void*));
+-+extern int	gdtoa__strtoIx  ANSI((CONST char*, char**, void*, void*));
+-+extern int	gdtoa__strtoIxL ANSI((CONST char*, char**, void*, void*));
+-+extern int	gdtoa__strtord  ANSI((CONST char*, char**, int, double*));
+-+extern int	gdtoa__strtordd ANSI((CONST char*, char**, int, double*));
+-+extern int	gdtoa__strtorf  ANSI((CONST char*, char**, int, float*));
+-+extern int	gdtoa__strtorQ  ANSI((CONST char*, char**, int, void*));
+-+extern int	gdtoa__strtorx  ANSI((CONST char*, char**, int, void*));
+-+extern int	gdtoa__strtorxL ANSI((CONST char*, char**, int, void*));
+- #if 1
+--extern int	strtodI  ANSI((CONST char*, char**, double*));
+--extern int	strtopd  ANSI((CONST char*, char**, double*));
+--extern int	strtopdd ANSI((CONST char*, char**, double*));
+--extern int	strtopf  ANSI((CONST char*, char**, float*));
+--extern int	strtopQ  ANSI((CONST char*, char**, void*));
+--extern int	strtopx  ANSI((CONST char*, char**, void*));
+--extern int	strtopxL ANSI((CONST char*, char**, void*));
+-+extern int	gdtoa__strtodI  ANSI((CONST char*, char**, double*));
+-+extern int	gdtoa__strtopd  ANSI((CONST char*, char**, double*));
+-+extern int	gdtoa__strtopdd ANSI((CONST char*, char**, double*));
+-+extern int	gdtoa__strtopf  ANSI((CONST char*, char**, float*));
+-+extern int	gdtoa__strtopQ  ANSI((CONST char*, char**, void*));
+-+extern int	gdtoa__strtopx  ANSI((CONST char*, char**, void*));
+-+extern int	gdtoa__strtopxL ANSI((CONST char*, char**, void*));
+- #else
+--#define strtopd(s,se,x) strtord(s,se,1,x)
+--#define strtopdd(s,se,x) strtordd(s,se,1,x)
+--#define strtopf(s,se,x) strtorf(s,se,1,x)
+--#define strtopQ(s,se,x) strtorQ(s,se,1,x)
+--#define strtopx(s,se,x) strtorx(s,se,1,x)
+--#define strtopxL(s,se,x) strtorxL(s,se,1,x)
+-+#define gdtoa__strtopd(s,se,x) gdtoa__strtord(s,se,1,x)
+-+#define gdtoa__strtopdd(s,se,x) gdtoa__strtordd(s,se,1,x)
+-+#define gdtoa__strtopf(s,se,x) gdtoa__strtorf(s,se,1,x)
+-+#define gdtoa__strtopQ(s,se,x) gdtoa__strtorQ(s,se,1,x)
+-+#define gdtoa__strtopx(s,se,x) gdtoa__strtorx(s,se,1,x)
+-+#define gdtoa__strtopxL(s,se,x) gdtoa__strtorxL(s,se,1,x)
+- #endif
+- 
+- #ifdef __cplusplus
+-diff -u gdtoa.orig/gdtoaimp.h gdtoa/gdtoaimp.h
+---- gdtoa.orig/gdtoaimp.h	2000-11-02 15:09:01 +0000
+-+++ gdtoa/gdtoaimp.h	2008-10-04 02:24:16 +0000
+-@@ -267,7 +267,7 @@
+- Exactly one of IEEE_8087, IEEE_MC68k, VAX, or IBM should be defined.
+- #endif
+- 
+--typedef union { double d; ULong L[2]; } U;
+-+typedef union { double d; ULong L[2]; } __attribute__((__may_alias__)) U;
+- 
+- #ifdef YES_ALIAS
+- #define dval(x) x
+-@@ -502,6 +502,7 @@
+- #define g__fmt g__fmt_D2A
+- #define gethex gethex_D2A
+- #define hexdig hexdig_D2A
+-+#define hexdig_init hexdig_init_D2A
+- #define hexnan hexnan_D2A
+- #define hi0bits hi0bits_D2A
+- #define i2b i2b_D2A
+-@@ -551,7 +552,7 @@
+- 			int *decpt, int *sign, char **rve));
+-  extern char *g__fmt ANSI((char*, char*, char*, int, ULong));
+-  extern int gethex ANSI((CONST char**, FPI*, Long*, Bigint**, int));
+-- extern void hexdig_init_D2A(Void);
+-+ extern void hexdig_init ANSI((Void));
+-  extern int hexnan ANSI((CONST char**, FPI*, ULong*));
+-  extern int hi0bits ANSI((ULong));
+-  extern Bigint *i2b ANSI((int));
+-@@ -570,8 +571,8 @@
+-  extern Bigint *s2b ANSI((CONST char*, int, int, ULong));
+-  extern Bigint *set_ones ANSI((Bigint*, int));
+-  extern char *strcp ANSI((char*, const char*));
+-- extern int strtoIg ANSI((CONST char*, char**, FPI*, Long*, Bigint**, int*));
+-- extern double strtod ANSI((const char *s00, char **se));
+-+ extern int gdtoa__strtoIg ANSI((CONST char*, char**, FPI*, Long*, Bigint**, int*));
+-+ extern double gdtoa__strtod ANSI((const char *s00, char **se));
+-  extern Bigint *sum ANSI((Bigint*, Bigint*));
+-  extern int trailz ANSI((Bigint*));
+-  extern double ulp ANSI((double));
+-diff -u gdtoa.orig/gethex.c gdtoa/gethex.c
+---- gdtoa.orig/gethex.c	2003-03-26 20:33:08 +0000
+-+++ gdtoa/gethex.c	2008-10-04 02:24:16 +0000
+-@@ -57,7 +57,7 @@
+- #endif
+- 
+- 	if (!hexdig['0'])
+--		hexdig_init_D2A();
+-+		hexdig_init();
+- 	havedig = 0;
+- 	s0 = *(CONST unsigned char **)sp + 2;
+- 	while(s0[havedig] == '0')
+-diff -u gdtoa.orig/hd_init.c gdtoa/hd_init.c
+---- gdtoa.orig/hd_init.c	2000-11-03 01:45:35 +0000
+-+++ gdtoa/hd_init.c	2008-10-04 02:24:16 +0000
+-@@ -52,7 +52,7 @@
+- 	}
+- 
+-  void
+--hexdig_init_D2A(Void)
+-+hexdig_init(Void)
+- {
+- #define USC (unsigned char *)
+- 	htinit(hexdig, USC "0123456789", 0x10);
+-diff -u gdtoa.orig/hexnan.c gdtoa/hexnan.c
+---- gdtoa.orig/hexnan.c	2000-11-03 01:44:38 +0000
+-+++ gdtoa/hexnan.c	2008-10-04 02:24:16 +0000
+-@@ -68,7 +68,7 @@
+- 	int havedig, hd0, i, nbits;
+- 
+- 	if (!hexdig['0'])
+--		hexdig_init_D2A();
+-+		hexdig_init();
+- 	nbits = fpi->nbits;
+- 	x = x0 + (nbits >> kshift);
+- 	if (nbits & kmask)
+-diff -u gdtoa.orig/strtoIQ.c gdtoa/strtoIQ.c
+---- gdtoa.orig/strtoIQ.c	1998-06-22 18:49:25 +0000
+-+++ gdtoa/strtoIQ.c	2008-10-04 02:01:43 +0000
+-@@ -39,9 +39,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtoIQ(s, sp, a, b) CONST char *s; char **sp; void *a; void *b;
+-+gdtoa__strtoIQ(s, sp, a, b) CONST char *s; char **sp; void *a; void *b;
+- #else
+--strtoIQ(CONST char *s, char **sp, void *a, void *b)
+-+gdtoa__strtoIQ(CONST char *s, char **sp, void *a, void *b)
+- #endif
+- {
+- 	static FPI fpi = { 113, 1-16383-113+1, 32766-16383-113+1, 1, SI };
+-@@ -52,7 +52,7 @@
+- 
+- 	B[0] = Balloc(2);
+- 	B[0]->wds = 4;
+--	k = strtoIg(s, sp, &fpi, exp, B, rv);
+-+	k = gdtoa__strtoIg(s, sp, &fpi, exp, B, rv);
+- 	ULtoQ(L, B[0]->x, exp[0], rv[0]);
+- 	Bfree(B[0]);
+- 	if (B[1]) {
+-diff -u gdtoa.orig/strtoId.c gdtoa/strtoId.c
+---- gdtoa.orig/strtoId.c	1998-09-09 13:59:17 +0000
+-+++ gdtoa/strtoId.c	2008-10-04 02:01:43 +0000
+-@@ -39,9 +39,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtoId(s, sp, f0, f1) CONST char *s; char **sp; double *f0, *f1;
+-+gdtoa__strtoId(s, sp, f0, f1) CONST char *s; char **sp; double *f0, *f1;
+- #else
+--strtoId(CONST char *s, char **sp, double *f0, double *f1)
+-+gdtoa__strtoId(CONST char *s, char **sp, double *f0, double *f1)
+- #endif
+- {
+- 	static FPI fpi = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI };
+-@@ -51,7 +51,7 @@
+- 
+- 	B[0] = Balloc(1);
+- 	B[0]->wds = 2;
+--	k = strtoIg(s, sp, &fpi, exp, B, rv);
+-+	k = gdtoa__strtoIg(s, sp, &fpi, exp, B, rv);
+- 	ULtod((ULong*)f0, B[0]->x, exp[0], rv[0]);
+- 	Bfree(B[0]);
+- 	if (B[1]) {
+-diff -u gdtoa.orig/strtoIdd.c gdtoa/strtoIdd.c
+---- gdtoa.orig/strtoIdd.c	1998-09-09 13:59:17 +0000
+-+++ gdtoa/strtoIdd.c	2008-10-04 02:01:43 +0000
+-@@ -39,9 +39,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtoIdd(s, sp, f0, f1) CONST char *s; char **sp; double *f0, *f1;
+-+gdtoa__strtoIdd(s, sp, f0, f1) CONST char *s; char **sp; double *f0, *f1;
+- #else
+--strtoIdd(CONST char *s, char **sp, double *f0, double *f1)
+-+gdtoa__strtoIdd(CONST char *s, char **sp, double *f0, double *f1)
+- #endif
+- {
+- #ifdef Sudden_Underflow
+-@@ -55,7 +55,7 @@
+- 
+- 	B[0] = Balloc(2);
+- 	B[0]->wds = 4;
+--	k = strtoIg(s, sp, &fpi, exp, B, rv);
+-+	k = gdtoa__strtoIg(s, sp, &fpi, exp, B, rv);
+- 	ULtodd((ULong*)f0, B[0]->x, exp[0], rv[0]);
+- 	Bfree(B[0]);
+- 	if (B[1]) {
+-diff -u gdtoa.orig/strtoIf.c gdtoa/strtoIf.c
+---- gdtoa.orig/strtoIf.c	1998-09-09 13:59:17 +0000
+-+++ gdtoa/strtoIf.c	2008-10-04 02:01:43 +0000
+-@@ -39,9 +39,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtoIf(s, sp, f0, f1) CONST char *s; char **sp; float *f0, *f1;
+-+gdtoa__strtoIf(s, sp, f0, f1) CONST char *s; char **sp; float *f0, *f1;
+- #else
+--strtoIf(CONST char *s, char **sp, float *f0, float *f1)
+-+gdtoa__strtoIf(CONST char *s, char **sp, float *f0, float *f1)
+- #endif
+- {
+- 	static FPI fpi = { 24, 1-127-24+1,  254-127-24+1, 1, SI };
+-@@ -51,7 +51,7 @@
+- 
+- 	B[0] = Balloc(0);
+- 	B[0]->wds = 1;
+--	k = strtoIg(s, sp, &fpi, exp, B, rv);
+-+	k = gdtoa__strtoIg(s, sp, &fpi, exp, B, rv);
+- 	ULtof((ULong*)f0, B[0]->x, exp[0], rv[0]);
+- 	Bfree(B[0]);
+- 	if (B[1]) {
+-diff -u gdtoa.orig/strtoIg.c gdtoa/strtoIg.c
+---- gdtoa.orig/strtoIg.c	1998-06-26 14:04:19 +0000
+-+++ gdtoa/strtoIg.c	2008-10-04 02:01:43 +0000
+-@@ -39,9 +39,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtoIg(s00, se, fpi, exp, B, rvp) CONST char *s00; char **se; FPI *fpi; Long *exp; Bigint **B; int *rvp;
+-+gdtoa__strtoIg(s00, se, fpi, exp, B, rvp) CONST char *s00; char **se; FPI *fpi; Long *exp; Bigint **B; int *rvp;
+- #else
+--strtoIg(CONST char *s00, char **se, FPI *fpi, Long *exp, Bigint **B, int *rvp)
+-+gdtoa__strtoIg(CONST char *s00, char **se, FPI *fpi, Long *exp, Bigint **B, int *rvp)
+- #endif
+- {
+- 	Bigint *b, *b1;
+-@@ -50,7 +50,7 @@
+- 	Long e1;
+- 
+- 	b = *B;
+--	rv = strtodg(s00, se, fpi, exp, b->x);
+-+	rv = gdtoa__strtodg(s00, se, fpi, exp, b->x);
+- 	if (!(rv & STRTOG_Inexact)) {
+- 		B[1] = 0;
+- 		return *rvp = rv;
+-diff -u gdtoa.orig/strtoIx.c gdtoa/strtoIx.c
+---- gdtoa.orig/strtoIx.c	1998-09-09 13:13:22 +0000
+-+++ gdtoa/strtoIx.c	2008-10-04 02:01:43 +0000
+-@@ -39,9 +39,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtoIx(s, sp, a, b) CONST char *s; char **sp; void *a; void *b;
+-+gdtoa__strtoIx(s, sp, a, b) CONST char *s; char **sp; void *a; void *b;
+- #else
+--strtoIx(CONST char *s, char **sp, void *a, void *b)
+-+gdtoa__strtoIx(CONST char *s, char **sp, void *a, void *b)
+- #endif
+- {
+- 	static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI };
+-@@ -52,7 +52,7 @@
+- 
+- 	B[0] = Balloc(1);
+- 	B[0]->wds = 2;
+--	k = strtoIg(s, sp, &fpi, exp, B, rv);
+-+	k = gdtoa__strtoIg(s, sp, &fpi, exp, B, rv);
+- 	ULtox(L, B[0]->x, exp[0], rv[0]);
+- 	Bfree(B[0]);
+- 	if (B[1]) {
+-diff -u gdtoa.orig/strtoIxL.c gdtoa/strtoIxL.c
+---- gdtoa.orig/strtoIxL.c	1998-09-09 13:13:22 +0000
+-+++ gdtoa/strtoIxL.c	2008-10-04 02:01:43 +0000
+-@@ -39,9 +39,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtoIxL(s, sp, a, b) CONST char *s; char **sp; void *a; void *b;
+-+gdtoa__strtoIxL(s, sp, a, b) CONST char *s; char **sp; void *a; void *b;
+- #else
+--strtoIxL(CONST char *s, char **sp, void *a, void *b)
+-+gdtoa__strtoIxL(CONST char *s, char **sp, void *a, void *b)
+- #endif
+- {
+- 	static FPI fpi = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI };
+-@@ -52,7 +52,7 @@
+- 
+- 	B[0] = Balloc(1);
+- 	B[0]->wds = 2;
+--	k = strtoIg(s, sp, &fpi, exp, B, rv);
+-+	k = gdtoa__strtoIg(s, sp, &fpi, exp, B, rv);
+- 	ULtoxL(L, B[0]->x, exp[0], rv[0]);
+- 	Bfree(B[0]);
+- 	if (B[1]) {
+-diff -u gdtoa.orig/strtod.c gdtoa/strtod.c
+---- gdtoa.orig/strtod.c	2003-03-21 21:24:01 +0000
+-+++ gdtoa/strtod.c	2008-10-04 02:01:43 +0000
+-@@ -58,7 +58,7 @@
+- #endif
+- 
+-  double
+--strtod
+-+gdtoa__strtod
+- #ifdef KR_headers
+- 	(s00, se) CONST char *s00; char **se;
+- #else
+-diff -u gdtoa.orig/strtodI.c gdtoa/strtodI.c
+---- gdtoa.orig/strtodI.c	2000-11-02 04:33:13 +0000
+-+++ gdtoa/strtodI.c	2008-10-04 02:01:43 +0000
+-@@ -56,9 +56,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtodI(s, sp, dd) CONST char *s; char **sp; double *dd;
+-+gdtoa__strtodI(s, sp, dd) CONST char *s; char **sp; double *dd;
+- #else
+--strtodI(CONST char *s, char **sp, double *dd)
+-+gdtoa__strtodI(CONST char *s, char **sp, double *dd)
+- #endif
+- {
+- #ifdef Sudden_Underflow
+-@@ -75,7 +75,7 @@
+- 		} U;
+- 	U *u;
+- 
+--	k = strtodg(s, sp, &fpi, &exp, bits);
+-+	k = gdtoa__strtodg(s, sp, &fpi, &exp, bits);
+- 	u = (U*)dd;
+- 	sign = k & STRTOG_Neg ? 0x80000000L : 0;
+- 	switch(k & STRTOG_Retmask) {
+-diff -u gdtoa.orig/strtodg.c gdtoa/strtodg.c
+---- gdtoa.orig/strtodg.c	2003-03-21 20:59:43 +0000
+-+++ gdtoa/strtodg.c	2008-10-04 02:01:43 +0000
+-@@ -316,7 +316,7 @@
+- 	}
+- 
+-  int
+--strtodg
+-+gdtoa__strtodg
+- #ifdef KR_headers
+- 	(s00, se, fpi, exp, bits)
+- 	CONST char *s00; char **se; FPI *fpi; Long *exp; ULong *bits;
+-diff -u gdtoa.orig/strtof.c gdtoa/strtof.c
+---- gdtoa.orig/strtof.c	2000-11-02 04:31:40 +0000
+-+++ gdtoa/strtof.c	2008-10-04 02:01:43 +0000
+-@@ -37,11 +37,11 @@
+- 
+- #include "gdtoaimp.h"
+- 
+-- float
+-+ float gdtoa__strtof
+- #ifdef KR_headers
+--strtof(s, sp) CONST char *s; char **sp;
+-+	(s, sp) CONST char *s; char **sp;
+- #else
+--strtof(CONST char *s, char **sp)
+-+	(CONST char *s, char **sp)
+- #endif
+- {
+- #ifdef Sudden_Underflow
+-@@ -54,7 +54,7 @@
+- 	int k;
+- 	union { ULong L[1]; float f; } u;
+- 
+--	k = strtodg(s, sp, &fpi, &exp, bits);
+-+	k = gdtoa__strtodg(s, sp, &fpi, &exp, bits);
+- 	switch(k & STRTOG_Retmask) {
+- 	  case STRTOG_NoNumber:
+- 	  case STRTOG_Zero:
+-diff -u gdtoa.orig/strtopQ.c gdtoa/strtopQ.c
+---- gdtoa.orig/strtopQ.c	2000-11-02 04:31:40 +0000
+-+++ gdtoa/strtopQ.c	2008-10-04 02:01:43 +0000
+-@@ -57,9 +57,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtopQ(s, sp, V) CONST char *s; char **sp; void *V;
+-+gdtoa__strtopQ(s, sp, V) CONST char *s; char **sp; void *V;
+- #else
+--strtopQ(CONST char *s, char **sp, void *V)
+-+gdtoa__strtopQ(CONST char *s, char **sp, void *V)
+- #endif
+- {
+- #ifdef Sudden_Underflow
+-@@ -72,7 +72,7 @@
+- 	int k;
+- 	ULong *L = (ULong*)V;
+- 
+--	k = strtodg(s, sp, &fpi, &exp, bits);
+-+	k = gdtoa__strtodg(s, sp, &fpi, &exp, bits);
+- 	switch(k & STRTOG_Retmask) {
+- 	  case STRTOG_NoNumber:
+- 	  case STRTOG_Zero:
+-diff -u gdtoa.orig/strtopd.c gdtoa/strtopd.c
+---- gdtoa.orig/strtopd.c	1998-09-12 15:30:06 +0000
+-+++ gdtoa/strtopd.c	2008-10-04 02:01:43 +0000
+-@@ -39,9 +39,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtopd(s, sp, d) char *s; char **sp; double *d;
+-+gdtoa__strtopd(s, sp, d) char *s; char **sp; double *d;
+- #else
+--strtopd(CONST char *s, char **sp, double *d)
+-+gdtoa__strtopd(CONST char *s, char **sp, double *d)
+- #endif
+- {
+- 	static FPI fpi0 = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI };
+-@@ -49,7 +49,7 @@
+- 	Long exp;
+- 	int k;
+- 
+--	k = strtodg(s, sp, &fpi0, &exp, bits);
+-+	k = gdtoa__strtodg(s, sp, &fpi0, &exp, bits);
+- 	ULtod((ULong*)d, bits, exp, k);
+- 	return k;
+- 	}
+-diff -u gdtoa.orig/strtopdd.c gdtoa/strtopdd.c
+---- gdtoa.orig/strtopdd.c	2000-11-02 04:33:46 +0000
+-+++ gdtoa/strtopdd.c	2008-10-04 02:01:43 +0000
+-@@ -39,9 +39,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtopdd(s, sp, dd) CONST char *s; char **sp; double *dd;
+-+gdtoa__strtopdd(s, sp, dd) CONST char *s; char **sp; double *dd;
+- #else
+--strtopdd(CONST char *s, char **sp, double *dd)
+-+gdtoa__strtopdd(CONST char *s, char **sp, double *dd)
+- #endif
+- {
+- #ifdef Sudden_Underflow
+-@@ -58,7 +58,7 @@
+- 		} U;
+- 	U *u;
+- 
+--	rv = strtodg(s, sp, &fpi, &exp, bits);
+-+	rv = gdtoa__strtodg(s, sp, &fpi, &exp, bits);
+- 	u = (U*)dd;
+- 	switch(rv & STRTOG_Retmask) {
+- 	  case STRTOG_NoNumber:
+-diff -u gdtoa.orig/strtopf.c gdtoa/strtopf.c
+---- gdtoa.orig/strtopf.c	2000-11-02 04:31:40 +0000
+-+++ gdtoa/strtopf.c	2008-10-04 02:01:43 +0000
+-@@ -39,9 +39,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtopf(s, sp, f) CONST char *s; char **sp; float *f;
+-+gdtoa__strtopf(s, sp, f) CONST char *s; char **sp; float *f;
+- #else
+--strtopf(CONST char *s, char **sp, float *f)
+-+gdtoa__strtopf(CONST char *s, char **sp, float *f)
+- #endif
+- {
+- #ifdef Sudden_Underflow
+-@@ -53,7 +53,7 @@
+- 	Long exp;
+- 	int k;
+- 
+--	k = strtodg(s, sp, &fpi, &exp, bits);
+-+	k = gdtoa__strtodg(s, sp, &fpi, &exp, bits);
+- 	L = (ULong*)f;
+- 	switch(k & STRTOG_Retmask) {
+- 	  case STRTOG_NoNumber:
+-diff -u gdtoa.orig/strtopx.c gdtoa/strtopx.c
+---- gdtoa.orig/strtopx.c	2000-11-02 04:31:40 +0000
+-+++ gdtoa/strtopx.c	2008-10-04 02:01:43 +0000
+-@@ -59,9 +59,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtopx(s, sp, V) CONST char *s; char **sp; void *V;
+-+gdtoa__strtopx(s, sp, V) CONST char *s; char **sp; void *V;
+- #else
+--strtopx(CONST char *s, char **sp, void *V)
+-+gdtoa__strtopx(CONST char *s, char **sp, void *V)
+- #endif
+- {
+- #ifdef Sudden_Underflow
+-@@ -74,7 +74,7 @@
+- 	int k;
+- 	UShort *L = (UShort*)V;
+- 
+--	k = strtodg(s, sp, &fpi, &exp, bits);
+-+	k = gdtoa__strtodg(s, sp, &fpi, &exp, bits);
+- 	switch(k & STRTOG_Retmask) {
+- 	  case STRTOG_NoNumber:
+- 	  case STRTOG_Zero:
+-diff -u gdtoa.orig/strtopxL.c gdtoa/strtopxL.c
+---- gdtoa.orig/strtopxL.c	2000-11-02 04:31:40 +0000
+-+++ gdtoa/strtopxL.c	2008-10-04 02:01:43 +0000
+-@@ -55,9 +55,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtopxL(s, sp, V) CONST char *s; char **sp; void *V;
+-+gdtoa__strtopxL(s, sp, V) CONST char *s; char **sp; void *V;
+- #else
+--strtopxL(CONST char *s, char **sp, void *V)
+-+gdtoa__strtopxL(CONST char *s, char **sp, void *V)
+- #endif
+- {
+- #ifdef Sudden_Underflow
+-@@ -70,7 +70,7 @@
+- 	int k;
+- 	ULong *L = (ULong*)V;
+- 
+--	k = strtodg(s, sp, &fpi, &exp, bits);
+-+	k = gdtoa__strtodg(s, sp, &fpi, &exp, bits);
+- 	switch(k & STRTOG_Retmask) {
+- 	  case STRTOG_NoNumber:
+- 	  case STRTOG_Zero:
+-diff -u gdtoa.orig/strtorQ.c gdtoa/strtorQ.c
+---- gdtoa.orig/strtorQ.c	2000-11-02 04:31:40 +0000
+-+++ gdtoa/strtorQ.c	2008-10-04 02:01:43 +0000
+-@@ -98,9 +98,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtorQ(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L;
+-+gdtoa__strtorQ(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L;
+- #else
+--strtorQ(CONST char *s, char **sp, int rounding, void *L)
+-+gdtoa__strtorQ(CONST char *s, char **sp, int rounding, void *L)
+- #endif
+- {
+- 	static FPI fpi0 = { 113, 1-16383-113+1, 32766-16383-113+1, 1, SI };
+-@@ -115,7 +115,7 @@
+- 		fpi1.rounding = rounding;
+- 		fpi = &fpi1;
+- 		}
+--	k = strtodg(s, sp, fpi, &exp, bits);
+-+	k = gdtoa__strtodg(s, sp, fpi, &exp, bits);
+- 	ULtoQ((ULong*)L, bits, exp, k);
+- 	return k;
+- 	}
+-diff -u gdtoa.orig/strtord.c gdtoa/strtord.c
+---- gdtoa.orig/strtord.c	2000-11-02 04:31:40 +0000
+-+++ gdtoa/strtord.c	2008-10-04 02:01:43 +0000
+-@@ -76,9 +76,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtord(s, sp, rounding, d) CONST char *s; char **sp; int rounding; double *d;
+-+gdtoa__strtord(s, sp, rounding, d) CONST char *s; char **sp; int rounding; double *d;
+- #else
+--strtord(CONST char *s, char **sp, int rounding, double *d)
+-+gdtoa__strtord(CONST char *s, char **sp, int rounding, double *d)
+- #endif
+- {
+- 	static FPI fpi0 = { 53, 1-1023-53+1, 2046-1023-53+1, 1, SI };
+-@@ -93,7 +93,7 @@
+- 		fpi1.rounding = rounding;
+- 		fpi = &fpi1;
+- 		}
+--	k = strtodg(s, sp, fpi, &exp, bits);
+-+	k = gdtoa__strtodg(s, sp, fpi, &exp, bits);
+- 	ULtod((ULong*)d, bits, exp, k);
+- 	return k;
+- 	}
+-diff -u gdtoa.orig/strtordd.c gdtoa/strtordd.c
+---- gdtoa.orig/strtordd.c	2000-11-02 04:31:40 +0000
+-+++ gdtoa/strtordd.c	2008-10-04 02:01:43 +0000
+-@@ -178,9 +178,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtordd(s, sp, rounding, dd) CONST char *s; char **sp; int rounding; double *dd;
+-+gdtoa__strtordd(s, sp, rounding, dd) CONST char *s; char **sp; int rounding; double *dd;
+- #else
+--strtordd(CONST char *s, char **sp, int rounding, double *dd)
+-+gdtoa__strtordd(CONST char *s, char **sp, int rounding, double *dd)
+- #endif
+- {
+- #ifdef Sudden_Underflow
+-@@ -199,7 +199,7 @@
+- 		fpi1.rounding = rounding;
+- 		fpi = &fpi1;
+- 		}
+--	k = strtodg(s, sp, fpi, &exp, bits);
+-+	k = gdtoa__strtodg(s, sp, fpi, &exp, bits);
+- 	ULtodd((ULong*)dd, bits, exp, k);
+- 	return k;
+- 	}
+-diff -u gdtoa.orig/strtorf.c gdtoa/strtorf.c
+---- gdtoa.orig/strtorf.c	2000-11-02 04:31:40 +0000
+-+++ gdtoa/strtorf.c	2008-10-04 02:01:43 +0000
+-@@ -72,9 +72,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtorf(s, sp, rounding, f) CONST char *s; char **sp; int rounding; float *f;
+-+gdtoa__strtorf(s, sp, rounding, f) CONST char *s; char **sp; int rounding; float *f;
+- #else
+--strtorf(CONST char *s, char **sp, int rounding, float *f)
+-+gdtoa__strtorf(CONST char *s, char **sp, int rounding, float *f)
+- #endif
+- {
+- 	static FPI fpi0 = { 24, 1-127-24+1,  254-127-24+1, 1, SI };
+-@@ -89,7 +89,7 @@
+- 		fpi1.rounding = rounding;
+- 		fpi = &fpi1;
+- 		}
+--	k = strtodg(s, sp, fpi, &exp, bits);
+-+	k = gdtoa__strtodg(s, sp, fpi, &exp, bits);
+- 	ULtof((ULong*)f, bits, exp, k);
+- 	return k;
+- 	}
+-diff -u gdtoa.orig/strtorx.c gdtoa/strtorx.c
+---- gdtoa.orig/strtorx.c	2000-11-02 04:34:18 +0000
+-+++ gdtoa/strtorx.c	2008-10-04 02:01:43 +0000
+-@@ -95,9 +95,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtorx(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L;
+-+gdtoa__strtorx(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L;
+- #else
+--strtorx(CONST char *s, char **sp, int rounding, void *L)
+-+gdtoa__strtorx(CONST char *s, char **sp, int rounding, void *L)
+- #endif
+- {
+- 	static FPI fpi0 = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI };
+-@@ -112,7 +112,7 @@
+- 		fpi1.rounding = rounding;
+- 		fpi = &fpi1;
+- 		}
+--	k = strtodg(s, sp, fpi, &exp, bits);
+-+	k = gdtoa__strtodg(s, sp, fpi, &exp, bits);
+- 	ULtox((UShort*)L, bits, exp, k);
+- 	return k;
+- 	}
+-diff -u gdtoa.orig/strtorxL.c gdtoa/strtorxL.c
+---- gdtoa.orig/strtorxL.c	2000-11-02 04:31:40 +0000
+-+++ gdtoa/strtorxL.c	2008-10-04 02:01:43 +0000
+-@@ -89,9 +89,9 @@
+- 
+-  int
+- #ifdef KR_headers
+--strtorxL(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L;
+-+gdtoa__strtorxL(s, sp, rounding, L) CONST char *s; char **sp; int rounding; void *L;
+- #else
+--strtorxL(CONST char *s, char **sp, int rounding, void *L)
+-+gdtoa__strtorxL(CONST char *s, char **sp, int rounding, void *L)
+- #endif
+- {
+- 	static FPI fpi0 = { 64, 1-16383-64+1, 32766 - 16383 - 64 + 1, 1, SI };
+-@@ -106,7 +106,7 @@
+- 		fpi1.rounding = rounding;
+- 		fpi = &fpi1;
+- 		}
+--	k = strtodg(s, sp, fpi, &exp, bits);
+-+	k = gdtoa__strtodg(s, sp, fpi, &exp, bits);
+- 	ULtoxL((ULong*)L, bits, exp, k);
+- 	return k;
+- 	}
+-Common subdirectories: gdtoa.orig/test and gdtoa/test
++--- 91,95 ----
++  	if (sign)
++  		i = STRTOG_Normal | STRTOG_Neg;
++! 	s = gdtoa__gdtoa(fpi, ex, bits, &i, mode, ndig, &decpt, &se);
++  	return g__fmt(buf, s, se, decpt, sign, bufsize);
++  	}
++diff -P -C 2 -r gdtoa/gdtoa.c gdtoa-new/gdtoa.c
++*** gdtoa/gdtoa.c	2011-03-04 23:26:27.000000000 -0500
++--- gdtoa-new/gdtoa.c	2011-05-27 17:09:13.941030075 -0400
++***************
++*** 110,114 ****
++  
++   char *
++! gdtoa
++  #ifdef KR_headers
++  	(fpi, be, bits, kindp, mode, ndigits, decpt, rve)
++--- 110,114 ----
++  
++   char *
++! gdtoa__gdtoa
++  #ifdef KR_headers
++  	(fpi, be, bits, kindp, mode, ndigits, decpt, rve)
++***************
++*** 165,169 ****
++  #ifndef MULTIPLE_THREADS
++  	if (dtoa_result) {
++! 		freedtoa(dtoa_result);
++  		dtoa_result = 0;
++  		}
++--- 165,169 ----
++  #ifndef MULTIPLE_THREADS
++  	if (dtoa_result) {
++! 		gdtoa__freedtoa(dtoa_result);
++  		dtoa_result = 0;
++  		}
++diff -P -C 2 -r gdtoa/gdtoa.h gdtoa-new/gdtoa.h
++*** gdtoa/gdtoa.h	2011-03-04 13:54:26.000000000 -0500
++--- gdtoa-new/gdtoa.h	2011-05-27 17:18:00.996031868 -0400
++***************
++*** 104,150 ****
++  #endif
++  
++! extern char* dtoa  ANSI((double d, int mode, int ndigits, int *decpt,
++  			int *sign, char **rve));
++! extern char* gdtoa ANSI((FPI *fpi, int be, ULong *bits, int *kindp,
++  			int mode, int ndigits, int *decpt, char **rve));
++! extern void freedtoa ANSI((char*));
++! extern float  strtof ANSI((CONST char *, char **));
++! extern double strtod ANSI((CONST char *, char **));
++! extern int strtodg ANSI((CONST char*, char**, FPI*, Long*, ULong*));
++  
++! extern char*	g_ddfmt  ANSI((char*, double*, int, size_t));
++! extern char*	g_dfmt   ANSI((char*, double*, int, size_t));
++! extern char*	g_ffmt   ANSI((char*, float*,  int, size_t));
++! extern char*	g_Qfmt   ANSI((char*, void*,   int, size_t));
++! extern char*	g_xfmt   ANSI((char*, void*,   int, size_t));
++! extern char*	g_xLfmt  ANSI((char*, void*,   int, size_t));
++  
++! extern int	strtoId  ANSI((CONST char*, char**, double*, double*));
++! extern int	strtoIdd ANSI((CONST char*, char**, double*, double*));
++! extern int	strtoIf  ANSI((CONST char*, char**, float*, float*));
++! extern int	strtoIQ  ANSI((CONST char*, char**, void*, void*));
++! extern int	strtoIx  ANSI((CONST char*, char**, void*, void*));
++! extern int	strtoIxL ANSI((CONST char*, char**, void*, void*));
++! extern int	strtord  ANSI((CONST char*, char**, int, double*));
++! extern int	strtordd ANSI((CONST char*, char**, int, double*));
++! extern int	strtorf  ANSI((CONST char*, char**, int, float*));
++! extern int	strtorQ  ANSI((CONST char*, char**, int, void*));
++! extern int	strtorx  ANSI((CONST char*, char**, int, void*));
++! extern int	strtorxL ANSI((CONST char*, char**, int, void*));
++  #if 1
++! extern int	strtodI  ANSI((CONST char*, char**, double*));
++! extern int	strtopd  ANSI((CONST char*, char**, double*));
++! extern int	strtopdd ANSI((CONST char*, char**, double*));
++! extern int	strtopf  ANSI((CONST char*, char**, float*));
++! extern int	strtopQ  ANSI((CONST char*, char**, void*));
++! extern int	strtopx  ANSI((CONST char*, char**, void*));
++! extern int	strtopxL ANSI((CONST char*, char**, void*));
++  #else
++! #define strtopd(s,se,x) strtord(s,se,1,x)
++! #define strtopdd(s,se,x) strtordd(s,se,1,x)
++! #define strtopf(s,se,x) strtorf(s,se,1,x)
++! #define strtopQ(s,se,x) strtorQ(s,se,1,x)
++! #define strtopx(s,se,x) strtorx(s,se,1,x)
++! #define strtopxL(s,se,x) strtorxL(s,se,1,x)
++  #endif
++  
++--- 104,150 ----
++  #endif
++  
++! extern char* gdtoa__dtoa  ANSI((double d, int mode, int ndigits, int *decpt,
++  			int *sign, char **rve));
++! extern char* gdtoa__gdtoa ANSI((FPI *fpi, int be, ULong *bits, int *kindp,
++  			int mode, int ndigits, int *decpt, char **rve));



More information about the MLton-commit mailing list