fix a number of assumptions that a pointer could fit into a long
authorAndy Wingo <wingo@pobox.com>
Thu, 18 Nov 2010 21:30:27 +0000 (22:30 +0100)
committerAndy Wingo <wingo@pobox.com>
Fri, 19 Nov 2010 14:22:43 +0000 (15:22 +0100)
* libguile/debug.c:
* libguile/eval.c:
* libguile/frames.c:
* libguile/objcodes.c:
* libguile/print.c:
* libguile/programs.c:
* libguile/read.c:
* libguile/struct.c:
* libguile/vm.c: Fix a number of instances in which we assumed we could
  fit a pointer into a long.

libguile/debug.c
libguile/eval.c
libguile/frames.c
libguile/objcodes.c
libguile/print.c
libguile/programs.c
libguile/read.c
libguile/struct.c
libguile/vm.c

index dd65de4..e059a31 100644 (file)
@@ -82,7 +82,7 @@ scm_t_option scm_debug_opts[] = {
      for anyone!) or a whoppin' 1280 KB on 64-bit arches.
   */
   { SCM_OPTION_INTEGER, "stack", 160000, "Stack size limit (measured in words; 0 = no check)." },
-  { SCM_OPTION_SCM, "show-file-name", (unsigned long)SCM_BOOL_T,
+  { SCM_OPTION_SCM, "show-file-name", (scm_t_bits)SCM_BOOL_T,
     "Show file names and line numbers "
     "in backtraces when not `#f'.  A value of `base' "
     "displays only base names, while `#t' displays full names."},
index 293612e..414645f 100644 (file)
@@ -1009,7 +1009,7 @@ boot_closure_print (SCM closure, SCM port, scm_print_state *pstate)
 {
   SCM args;
   scm_puts ("#<boot-closure ", port);
-  scm_uintprint ((unsigned long)SCM2PTR (closure), 16, port);
+  scm_uintprint ((scm_t_bits)SCM2PTR (closure), 16, port);
   scm_putc (' ', port);
   args = scm_make_list (scm_from_int (BOOT_CLOSURE_NUM_REQUIRED_ARGS (closure)),
                         scm_from_locale_symbol ("_"));
index 67ddd1a..2f87084 100644 (file)
@@ -209,7 +209,7 @@ SCM_DEFINE (scm_frame_address, "frame-address", 1, 0, 0,
 #define FUNC_NAME s_scm_frame_address
 {
   SCM_VALIDATE_VM_FRAME (1, frame);
-  return scm_from_ulong ((unsigned long) SCM_VM_FRAME_FP (frame));
+  return scm_from_unsigned_integer ((scm_t_bits) SCM_VM_FRAME_FP (frame));
 }
 #undef FUNC_NAME
 
@@ -220,7 +220,7 @@ SCM_DEFINE (scm_frame_stack_pointer, "frame-stack-pointer", 1, 0, 0,
 {
   SCM_VALIDATE_VM_FRAME (1, frame);
 
-  return scm_from_ulong ((unsigned long) SCM_VM_FRAME_SP (frame));
+  return scm_from_unsigned_integer ((scm_t_bits) SCM_VM_FRAME_SP (frame));
 }
 #undef FUNC_NAME
 
@@ -234,9 +234,8 @@ SCM_DEFINE (scm_frame_instruction_pointer, "frame-instruction-pointer", 1, 0, 0,
   SCM_VALIDATE_VM_FRAME (1, frame);
 
   c_objcode = SCM_PROGRAM_DATA (scm_frame_procedure (frame));
-  return scm_from_ulong ((unsigned long)
-                         (SCM_VM_FRAME_IP (frame)
-                          - SCM_C_OBJCODE_BASE (c_objcode)));
+  return scm_from_unsigned_integer ((SCM_VM_FRAME_IP (frame)
+                                     - SCM_C_OBJCODE_BASE (c_objcode)));
 }
 #undef FUNC_NAME
 
@@ -246,9 +245,9 @@ SCM_DEFINE (scm_frame_return_address, "frame-return-address", 1, 0, 0,
 #define FUNC_NAME s_scm_frame_return_address
 {
   SCM_VALIDATE_VM_FRAME (1, frame);
-  return scm_from_ulong ((unsigned long)
-                        (SCM_FRAME_RETURN_ADDRESS
-                         (SCM_VM_FRAME_FP (frame))));
+  return scm_from_unsigned_integer ((scm_t_bits)
+                                    (SCM_FRAME_RETURN_ADDRESS
+                                     (SCM_VM_FRAME_FP (frame))));
 }
 #undef FUNC_NAME
 
@@ -258,9 +257,9 @@ SCM_DEFINE (scm_frame_mv_return_address, "frame-mv-return-address", 1, 0, 0,
 #define FUNC_NAME s_scm_frame_mv_return_address
 {
   SCM_VALIDATE_VM_FRAME (1, frame);
-  return scm_from_ulong ((unsigned long)
-                        (SCM_FRAME_MV_RETURN_ADDRESS
-                         (SCM_VM_FRAME_FP (frame))));
+  return scm_from_unsigned_integer ((scm_t_bits)
+                                    (SCM_FRAME_MV_RETURN_ADDRESS
+                                     (SCM_VM_FRAME_FP (frame))));
 }
 #undef FUNC_NAME
 
index f54e79b..5f3079c 100644 (file)
@@ -123,11 +123,12 @@ scm_c_make_objcode_slice (SCM parent, const scm_t_uint8 *ptr)
   if (ptr < parent_base
       || ptr >= (parent_base + parent_data->len + parent_data->metalen
                  - sizeof (struct scm_objcode)))
-    scm_misc_error (FUNC_NAME, "offset out of bounds (~a vs ~a + ~a + ~a)",
-                   scm_list_4 (scm_from_ulong ((unsigned long) ptr),
-                               scm_from_ulong ((unsigned long) parent_base),
-                               scm_from_uint32 (parent_data->len),
-                               scm_from_uint32 (parent_data->metalen)));
+    scm_misc_error
+      (FUNC_NAME, "offset out of bounds (~a vs ~a + ~a + ~a)",
+       scm_list_4 (scm_from_unsigned_integer ((scm_t_bits) ptr),
+                   scm_from_unsigned_integer ((scm_t_bits) parent_base),
+                   scm_from_uint32 (parent_data->len),
+                   scm_from_uint32 (parent_data->metalen)));
 
   /* Make sure bytecode for the objcode-meta is suitable aligned.  Failing to
      do so leads to SIGBUS/SIGSEGV on some arches (e.g., SPARC).  */
index 8c807bb..f62378f 100644 (file)
@@ -89,11 +89,11 @@ static const char *iflagnames[] =
 SCM_SYMBOL (sym_reader, "reader");
 
 scm_t_option scm_print_opts[] = {
-  { SCM_OPTION_SCM, "highlight-prefix", (unsigned long)SCM_BOOL_F,
+  { SCM_OPTION_SCM, "highlight-prefix", (scm_t_bits)SCM_BOOL_F,
     "The string to print before highlighted values." },
-  { SCM_OPTION_SCM, "highlight-suffix", (unsigned long)SCM_BOOL_F,
+  { SCM_OPTION_SCM, "highlight-suffix", (scm_t_bits)SCM_BOOL_F,
     "The string to print after highlighted values." },
-  { SCM_OPTION_SCM, "quote-keywordish-symbols", (unsigned long)SCM_BOOL_F,
+  { SCM_OPTION_SCM, "quote-keywordish-symbols", (scm_t_bits)SCM_BOOL_F,
     "How to print symbols that have a colon as their first or last character. "
     "The value '#f' does not quote the colons; '#t' quotes them; "
     "'reader' quotes them when the reader option 'keywords' is not '#f'." 
index 4404f83..8b769a5 100644 (file)
@@ -131,7 +131,7 @@ SCM_DEFINE (scm_program_base, "program-base", 1, 0, 0,
   SCM_VALIDATE_PROGRAM (1, program);
 
   c_objcode = SCM_PROGRAM_DATA (program);
-  return scm_from_ulong ((unsigned long) SCM_C_OBJCODE_BASE (c_objcode));
+  return scm_from_unsigned_integer ((scm_t_bits) SCM_C_OBJCODE_BASE (c_objcode));
 }
 #undef FUNC_NAME
 
index 52ec20d..18047d8 100644 (file)
@@ -69,7 +69,7 @@ scm_t_option scm_read_opts[] = {
     "Record positions of source code expressions." },
   { SCM_OPTION_BOOLEAN, "case-insensitive", 0,
     "Convert symbols to lower case."},
-  { SCM_OPTION_SCM, "keywords", (unsigned long) SCM_BOOL_F,
+  { SCM_OPTION_SCM, "keywords", (scm_t_bits) SCM_BOOL_F,
     "Style of keyword recognition: #f, 'prefix or 'postfix."},
   { SCM_OPTION_BOOLEAN, "r6rs-hex-escapes", 0,
     "Use R6RS variable-length character and string hex escapes."},
index c784f59..e5ecc1a 100644 (file)
@@ -926,7 +926,8 @@ SCM_DEFINE (scm_struct_vtable_tag, "struct-vtable-tag", 1, 0, 0,
 #define FUNC_NAME s_scm_struct_vtable_tag
 {
   SCM_VALIDATE_VTABLE (1, handle);
-  return scm_from_ulong (((unsigned long)SCM_STRUCT_DATA (handle)) >> 3);
+  return scm_from_unsigned_integer
+    (((scm_t_bits)SCM_STRUCT_DATA (handle)) >> 3);
 }
 #undef FUNC_NAME
 
index e1a90e1..c08b084 100644 (file)
@@ -606,7 +606,7 @@ SCM_DEFINE (scm_vm_ip, "vm:ip", 1, 0, 0,
 #define FUNC_NAME s_scm_vm_ip
 {
   SCM_VALIDATE_VM (1, vm);
-  return scm_from_ulong ((unsigned long) SCM_VM_DATA (vm)->ip);
+  return scm_from_unsigned_integer ((scm_t_bits) SCM_VM_DATA (vm)->ip);
 }
 #undef FUNC_NAME
 
@@ -616,7 +616,7 @@ SCM_DEFINE (scm_vm_sp, "vm:sp", 1, 0, 0,
 #define FUNC_NAME s_scm_vm_sp
 {
   SCM_VALIDATE_VM (1, vm);
-  return scm_from_ulong ((unsigned long) SCM_VM_DATA (vm)->sp);
+  return scm_from_unsigned_integer ((scm_t_bits) SCM_VM_DATA (vm)->sp);
 }
 #undef FUNC_NAME
 
@@ -626,7 +626,7 @@ SCM_DEFINE (scm_vm_fp, "vm:fp", 1, 0, 0,
 #define FUNC_NAME s_scm_vm_fp
 {
   SCM_VALIDATE_VM (1, vm);
-  return scm_from_ulong ((unsigned long) SCM_VM_DATA (vm)->fp);
+  return scm_from_unsigned_integer ((scm_t_bits) SCM_VM_DATA (vm)->fp);
 }
 #undef FUNC_NAME