guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 01/01: Register R6RS port and bytevector internals early


From: Andy Wingo
Subject: [Guile-commits] 01/01: Register R6RS port and bytevector internals early
Date: Tue, 28 Feb 2017 08:19:37 -0500 (EST)

wingo pushed a commit to branch master
in repository guile.

commit 94d70684c19f8074baaec83ae2038898ad3e092f
Author: Andy Wingo <address@hidden>
Date:   Thu Jun 23 18:31:55 2016 +0200

    Register R6RS port and bytevector internals early
    
    * libguile/bytevectors.c (sym_big, sym_little): Rename from scm_sym_big
      and scm_sym_little, and don't use the snarf mechanism as we need to
      initialize this value eagerly in case the C API is used before the
      Scheme module is loaded.
      (scm_bootstrap_bytevectors): Initialize the endianness symbols here.
    * libguile/r6rs-ports.c (scm_register_r6rs_ports): Register the R6RS
      port kinds here, for the same reason.
---
 libguile/bytevectors.c | 24 ++++++++++++------------
 libguile/r6rs-ports.c  | 12 ++++++------
 2 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/libguile/bytevectors.c b/libguile/bytevectors.c
index cf247dc..58df018 100644
--- a/libguile/bytevectors.c
+++ b/libguile/bytevectors.c
@@ -430,8 +430,8 @@ scm_i_print_bytevector (SCM bv, SCM port, scm_print_state 
*pstate SCM_UNUSED)
 
 /* General operations.  */
 
-SCM_SYMBOL (scm_sym_big, "big");
-SCM_SYMBOL (scm_sym_little, "little");
+static SCM sym_big;
+static SCM sym_little;
 
 SCM scm_endianness_big, scm_endianness_little;
 
@@ -812,13 +812,13 @@ bytevector_large_ref (const char *c_bv, size_t c_size, 
int signed_p,
 
   if (signed_p)
     {
-      if (scm_is_eq (endianness, scm_sym_big))
+      if (scm_is_eq (endianness, sym_big))
        negative_p = c_bv[0] & 0x80;
       else
        negative_p = c_bv[c_size - 1] & 0x80;
     }
 
-  c_endianness = scm_is_eq (endianness, scm_sym_big) ? 1 : -1;
+  c_endianness = scm_is_eq (endianness, sym_big) ? 1 : -1;
 
   mpz_init (c_mpz);
   mpz_import (c_mpz, 1 /* 1 word */, 1 /* word order doesn't matter */,
@@ -845,7 +845,7 @@ bytevector_large_set (char *c_bv, size_t c_size, int 
signed_p,
   mpz_t c_mpz;
   int c_endianness, c_sign, err = 0;
 
-  c_endianness = scm_is_eq (endianness, scm_sym_big) ? 1 : -1;
+  c_endianness = scm_is_eq (endianness, sym_big) ? 1 : -1;
 
   mpz_init (c_mpz);
   scm_to_mpz (value, c_mpz);
@@ -1881,9 +1881,9 @@ utf_encoding_name (char *name, size_t utf_width, SCM 
endianness)
                       ? "32"
                       : "??"))));
   strcat (name,
-         ((scm_is_eq (endianness, scm_sym_big))
+         ((scm_is_eq (endianness, sym_big))
           ? "BE"
-          : ((scm_is_eq (endianness, scm_sym_little))
+          : ((scm_is_eq (endianness, sym_little))
              ? "LE"
              : "unknown")));
 }
@@ -1901,7 +1901,7 @@ utf_encoding_name (char *name, size_t utf_width, SCM 
endianness)
                                                                         \
   SCM_VALIDATE_STRING (1, str);                                         \
   if (scm_is_eq (endianness, SCM_UNDEFINED))                            \
-    endianness = scm_sym_big;                                           \
+    endianness = sym_big;                                           \
   else                                                                  \
     SCM_VALIDATE_SYMBOL (2, endianness);                                \
                                                                         \
@@ -2018,7 +2018,7 @@ SCM_DEFINE (scm_string_to_utf32, "string->utf32",
                                                                        \
   SCM_VALIDATE_BYTEVECTOR (1, utf);                                    \
   if (scm_is_eq (endianness, SCM_UNDEFINED))                            \
-    endianness = scm_sym_big;                                          \
+    endianness = sym_big;                                              \
   else                                                                 \
     SCM_VALIDATE_SYMBOL (2, endianness);                               \
                                                                        \
@@ -2109,13 +2109,13 @@ scm_bootstrap_bytevectors (void)
   scm_i_register_vector_constructor
     (scm_i_array_element_types[SCM_ARRAY_ELEMENT_TYPE_VU8],
      scm_make_bytevector);
+
+  scm_endianness_big = sym_big = scm_from_latin1_symbol ("big");
+  scm_endianness_little = sym_little = scm_from_latin1_symbol ("little");
 }
 
 void
 scm_init_bytevectors (void)
 {
 #include "libguile/bytevectors.x"
-
-  scm_endianness_big = scm_sym_big;
-  scm_endianness_little = scm_sym_little;
 }
diff --git a/libguile/r6rs-ports.c b/libguile/r6rs-ports.c
index b919b4b..c2f97ff 100644
--- a/libguile/r6rs-ports.c
+++ b/libguile/r6rs-ports.c
@@ -1158,12 +1158,6 @@ scm_register_r6rs_ports (void)
                             "scm_init_r6rs_ports",
                            (scm_t_extension_init_func) scm_init_r6rs_ports,
                            NULL);
-}
-
-void
-scm_init_r6rs_ports (void)
-{
-#include "libguile/r6rs-ports.x"
 
   initialize_bytevector_input_ports ();
   initialize_custom_binary_input_ports ();
@@ -1172,3 +1166,9 @@ scm_init_r6rs_ports (void)
   initialize_custom_binary_input_output_ports ();
   initialize_transcoded_ports ();
 }
+
+void
+scm_init_r6rs_ports (void)
+{
+#include "libguile/r6rs-ports.x"
+}



reply via email to

[Prev in Thread] Current Thread [Next in Thread]