Incorporated variable length identifiers.
authorsater <none@none>
Fri, 18 May 1984 13:04:34 +0000 (13:04 +0000)
committersater <none@none>
Fri, 18 May 1984 13:04:34 +0000 (13:04 +0000)
Courtesy Johan Stevenson

util/opt/alloc.c
util/opt/lookup.c
util/opt/lookup.h

index 694a056..bcb86d0 100644 (file)
@@ -187,9 +187,12 @@ offset *newrom() {
        return((offset *) newcore(MAXROM*sizeof(offset)));
 }
 
-sym_p newsym() {
-
-       return((sym_p) newcore(sizeof(sym_t)));
+sym_p newsym(len) int len; {
+       /*
+        * sym_t includes a 2 character s_name at the end
+        * extend this structure with len-2 characters
+        */
+       return((sym_p) newcore(sizeof(sym_t) - 2 + len));
 }
 
 argb_p newargb() {
index f924dc0..d6126e3 100644 (file)
@@ -37,6 +37,7 @@ unsigned hash(string) char *string; {
 
 sym_p symlookup(name,status,flags) char *name; int status,flags; {
        register sym_p *spp,sp;
+       register i;
        static short genfrag = 32767;
 
        spp = &symhash[hash(name)%NSYMHASH];
@@ -58,8 +59,13 @@ sym_p symlookup(name,status,flags) char *name; int status,flags; {
         * symbol not found, enter in table
         */
 
-       *spp = sp = newsym();
-       strncpy(sp->s_name,name,IDL);
+       i = strlen(name) + 1;
+       if (i & 1)
+               i++;
+       if (i > IDL)
+               i = IDL;
+       *spp = sp = newsym(i);
+       strncpy(sp->s_name,name,i);
        sp->s_flags = flags;
        if (status == DEFINING)
                sp->s_flags |= SYMDEF;
index 53dc6b6..0d36e3b 100644 (file)
@@ -1,14 +1,14 @@
 /* $Header$ */
 
-#define IDL    8
+#define IDL    100
 
 struct sym {
        sym_p   s_next;
-       char    s_name[IDL];
        offset  *s_rom;
        short   s_flags;
        short   s_frag;
        offset  s_value;
+       char    s_name[2];      /* to be extended up to IDL */
 };
 
 /* contents of .s_flags */