guile-commits
[Top][All Lists]
Advanced

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

[Guile-commits] GNU Guile branch, master, updated. release_1-9-6-134-gc5


From: Michael Gran
Subject: [Guile-commits] GNU Guile branch, master, updated. release_1-9-6-134-gc5661d2
Date: Mon, 11 Jan 2010 02:24:30 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Guile".

http://git.savannah.gnu.org/cgit/guile.git/commit/?id=c5661d2860da05b4666c9f4764509034aa7da693

The branch, master has been updated
       via  c5661d2860da05b4666c9f4764509034aa7da693 (commit)
      from  e63dda67d70eb4cb92cbc406510a0f21337374a4 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit c5661d2860da05b4666c9f4764509034aa7da693
Author: Michael Gran <address@hidden>
Date:   Sun Jan 10 18:24:23 2010 -0800

    Refactor repeated code in scm_read_string
    
    * libguile/read.c (SCM_READ_HEX_ESCAPE): new macro
      (scm_read_string): use new macro SCM_READ_HEX_ESCAPE

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

Summary of changes:
 libguile/read.c |  117 +++++++++++++++++--------------------------------------
 1 files changed, 36 insertions(+), 81 deletions(-)

diff --git a/libguile/read.c b/libguile/read.c
index 25aed54..011684b 100644
--- a/libguile/read.c
+++ b/libguile/read.c
@@ -410,6 +410,36 @@ scm_read_sexp (scm_t_wchar chr, SCM port)
 }
 #undef FUNC_NAME
 
+
+/* Read a hexadecimal number NDIGITS in length.  Put its value into the 
variable
+   C.  */
+#define SCM_READ_HEX_ESCAPE(ndigits)            \
+  do                                            \
+    {                                           \
+      scm_t_wchar a;                            \
+      size_t i = 0;                             \
+      c = 0;                                    \
+      while (i < ndigits)                       \
+        {                                       \
+          a = scm_getc (port);                  \
+          if (a == EOF)                         \
+            goto str_eof;                       \
+          if ('0' <= a && a <= '9')             \
+            a -= '0';                           \
+          else if ('A' <= a && a <= 'F')        \
+            a = a - 'A' + 10;                   \
+          else if ('a' <= a && a <= 'f')        \
+            a = a - 'a' + 10;                   \
+          else                                  \
+            {                                   \
+              c = a;                            \
+              goto bad_escaped;                 \
+            }                                   \
+          c = c * 16 + a;                       \
+          i ++;                                 \
+        }                                       \
+    } while (0)
+
 static SCM
 scm_read_string (int chr, SCM port)
 #define FUNC_NAME "scm_lreadr"
@@ -481,89 +511,14 @@ scm_read_string (int chr, SCM port)
               c = '\010';
               break;
             case 'x':
-              {
-                scm_t_wchar a, b;
-                a = scm_getc (port);
-                if (a == EOF)
-                  goto str_eof;
-                b = scm_getc (port);
-                if (b == EOF)
-                  goto str_eof;
-                if ('0' <= a && a <= '9')
-                  a -= '0';
-                else if ('A' <= a && a <= 'F')
-                  a = a - 'A' + 10;
-                else if ('a' <= a && a <= 'f')
-                  a = a - 'a' + 10;
-                else
-                  {
-                    c = a;
-                    goto bad_escaped;
-                  }
-                if ('0' <= b && b <= '9')
-                  b -= '0';
-                else if ('A' <= b && b <= 'F')
-                  b = b - 'A' + 10;
-                else if ('a' <= b && b <= 'f')
-                  b = b - 'a' + 10;
-                else
-                  {
-                    c = b;
-                    goto bad_escaped;
-                  }
-                c = a * 16 + b;
-                break;
-              }
+              SCM_READ_HEX_ESCAPE (2);
+              break;
             case 'u':
-              {
-                scm_t_wchar a;
-                int i;
-                c = 0;
-                for (i = 0; i < 4; i++)
-                  {
-                    a = scm_getc (port);
-                    if (a == EOF)
-                      goto str_eof;
-                    if ('0' <= a && a <= '9')
-                      a -= '0';
-                    else if ('A' <= a && a <= 'F')
-                      a = a - 'A' + 10;
-                    else if ('a' <= a && a <= 'f')
-                      a = a - 'a' + 10;
-                    else
-                      {
-                        c = a;
-                        goto bad_escaped;
-                      }
-                    c = c * 16 + a;
-                  }
-                break;
-              }
+              SCM_READ_HEX_ESCAPE (4);
+              break;
             case 'U':
-              {
-                scm_t_wchar a;
-                int i;
-                c = 0;
-                for (i = 0; i < 6; i++)
-                  {
-                    a = scm_getc (port);
-                    if (a == EOF)
-                      goto str_eof;
-                    if ('0' <= a && a <= '9')
-                      a -= '0';
-                    else if ('A' <= a && a <= 'F')
-                      a = a - 'A' + 10;
-                    else if ('a' <= a && a <= 'f')
-                      a = a - 'a' + 10;
-                    else
-                      {
-                        c = a;
-                        goto bad_escaped;
-                      }
-                    c = c * 16 + a;
-                  }
-                break;
-              }
+              SCM_READ_HEX_ESCAPE (6);
+              break;
             default:
             bad_escaped:
               scm_i_input_error (FUNC_NAME, port,


hooks/post-receive
-- 
GNU Guile




reply via email to

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