chiark / gitweb /
Move SYM_NAME into the header file. Fix bugs.
authormdw <mdw>
Thu, 26 Nov 1998 19:27:34 +0000 (19:27 +0000)
committermdw <mdw>
Thu, 26 Nov 1998 19:27:34 +0000 (19:27 +0000)
sym.c
sym.h

diff --git a/sym.c b/sym.c
index 2cdbc249e7672f8a7a36ced9e4555148aaca060f..5c18a18f8696915f91d3a6929d9b5e4e3786e5e0 100644 (file)
--- a/sym.c
+++ b/sym.c
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
 /* -*-c-*-
  *
- * $Id: sym.c,v 1.1 1998/06/17 23:44:42 mdw Exp $
+ * $Id: sym.c,v 1.2 1998/11/26 19:27:33 mdw Exp $
  *
  * Symbol table management
  *
  *
  * Symbol table management
  *
 /*----- Revision history --------------------------------------------------*
  *
  * $Log: sym.c,v $
 /*----- Revision history --------------------------------------------------*
  *
  * $Log: sym.c,v $
- * Revision 1.1  1998/06/17 23:44:42  mdw
- * Initial revision
+ * Revision 1.2  1998/11/26 19:27:33  mdw
+ * Move SYM_NAME into the header file.  Fix bugs.
+ *
+ * Revision 1.1.1.1  1998/06/17 23:44:42  mdw
+ * Initial version of mLib
  *
  */
 
  *
  */
 
 
 #define SYM_LIMIT(n) (((n) * 3) >> 2)  /* Load factor for growing table */
 
 
 #define SYM_LIMIT(n) (((n) * 3) >> 2)  /* Load factor for growing table */
 
-/*----- Useful macros -----------------------------------------------------*/
-
-#define SYM_NAME(sy)                                                   \
-  ((sy)->len > SYM_BUFSZ ? (sy)->name.p : (sy)->name.b)
-
 /*----- Main code ---------------------------------------------------------*/
 
 /* --- @sym_createTable@ --- *
 /*----- Main code ---------------------------------------------------------*/
 
 /* --- @sym_createTable@ --- *
@@ -247,7 +245,9 @@ void *sym_find(sym_table *t, const char *n, long l, size_t sz, unsigned *f)
 
   /* --- Consider growing the array --- */
 
 
   /* --- Consider growing the array --- */
 
-  if (!--t->c) {
+  if (t->c)
+    t->c--;
+  if (!t->c) {
     unsigned long m = t->mask + 1;     /* Next set bit in has word */
     sym_base *p, *q, *r;               /* More useful pointers */
     size_t i, lim;                     /* Loop counter and limit */
     unsigned long m = t->mask + 1;     /* Next set bit in has word */
     sym_base *p, *q, *r;               /* More useful pointers */
     size_t i, lim;                     /* Loop counter and limit */
@@ -262,7 +262,7 @@ void *sym_find(sym_table *t, const char *n, long l, size_t sz, unsigned *f)
     } CATCH switch (exc_type) {
       case EXC_NOMEM:
        TRACK_POP;
     } CATCH switch (exc_type) {
       case EXC_NOMEM:
        TRACK_POP;
-       return (p);
+       return (bin->next);
       default:
        TRACK_POP;
        RETHROW;
       default:
        TRACK_POP;
        RETHROW;
diff --git a/sym.h b/sym.h
index 35a3fa6b05cfb8e6c56488b3b95992bd9aa759d9..82668a17ff84d4bdbb318ebed413c7c38d484037 100644 (file)
--- a/sym.h
+++ b/sym.h
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
 /* -*-c-*-
  *
- * $Id: sym.h,v 1.1 1998/06/17 23:44:42 mdw Exp $
+ * $Id: sym.h,v 1.2 1998/11/26 19:27:34 mdw Exp $
  *
  * Symbol table management
  *
  *
  * Symbol table management
  *
 /*----- Revision history --------------------------------------------------*
  *
  * $Log: sym.h,v $
 /*----- Revision history --------------------------------------------------*
  *
  * $Log: sym.h,v $
- * Revision 1.1  1998/06/17 23:44:42  mdw
- * Initial revision
+ * Revision 1.2  1998/11/26 19:27:34  mdw
+ * Move SYM_NAME into the header file.  Fix bugs.
+ *
+ * Revision 1.1.1.1  1998/06/17 23:44:42  mdw
+ * Initial version of mLib
  *
  */
 
  *
  */
 
@@ -81,6 +84,13 @@ typedef struct sym_base {
   size_t len;                          /* Length of the symbol's name */
 } sym_base;
 
   size_t len;                          /* Length of the symbol's name */
 } sym_base;
 
+/* --- A macro to pick a symbol's name out from the mess --- */
+
+#define SYM_NAME(sy)                                                   \
+  (((sym_base *)(sy))->len > SYM_BUFSZ ?                               \
+   ((sym_base *)(sy))->name.p :                                                \
+   ((sym_base *)(sy))->name.b)
+
 /* --- An iterator block --- */
 
 typedef struct sym_iter {
 /* --- An iterator block --- */
 
 typedef struct sym_iter {