Browse Source

* more hashing for keyword table

peter 26 years ago
parent
commit
88ca7ef542
1 changed files with 16 additions and 11 deletions
  1. 16 11
      compiler/scanner.pas

+ 16 - 11
compiler/scanner.pas

@@ -136,7 +136,7 @@ implementation
         first,last : ttoken;
       end;
     var
-      tokenidx:array[2..tokenidlen] of tokenidxrec;
+      tokenidx:array[2..tokenidlen,'A'..'Z'] of tokenidxrec;
 
     const
       { use any special name that is an invalid file name to avoid problems }
@@ -149,13 +149,14 @@ implementation
       var
         t : ttoken;
       begin
+        fillchar(tokenidx,sizeof(tokenidx),0);
         for t:=low(ttoken) to high(ttoken) do
          begin
            if not tokeninfo[t].special then
             begin
-              if ord(tokenidx[length(tokeninfo[t].str)].first)=0 then
-               tokenidx[length(tokeninfo[t].str)].first:=t;
-              tokenidx[length(tokeninfo[t].str)].last:=t;
+              if ord(tokenidx[length(tokeninfo[t].str),tokeninfo[t].str[1]].first)=0 then
+               tokenidx[length(tokeninfo[t].str),tokeninfo[t].str[1]].first:=t;
+              tokenidx[length(tokeninfo[t].str),tokeninfo[t].str[1]].last:=t;
             end;
          end;
       end;
@@ -170,8 +171,8 @@ implementation
            is_keyword:=false;
            exit;
          end;
-        low:=ord(tokenidx[length(s)].first);
-        high:=ord(tokenidx[length(s)].last);
+        low:=ord(tokenidx[length(s),s[1]].first);
+        high:=ord(tokenidx[length(s),s[1]].last);
         while low<high do
          begin
            mid:=(high+low+1) shr 1;
@@ -1036,11 +1037,12 @@ implementation
            readstring;
            token:=ID;
            idtoken:=ID;
-         { keyword or any other known token ? }
-           if length(pattern) in [2..tokenidlen] then
+         { keyword or any other known token,
+           pattern is always uppercased }
+           if (pattern[1]<>'_') and (length(pattern) in [2..tokenidlen]) then
             begin
-              low:=ord(tokenidx[length(pattern)].first);
-              high:=ord(tokenidx[length(pattern)].last);
+              low:=ord(tokenidx[length(pattern),pattern[1]].first);
+              high:=ord(tokenidx[length(pattern),pattern[1]].last);
               while low<high do
                begin
                  mid:=(high+low+1) shr 1;
@@ -1637,7 +1639,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.79  1999-04-01 22:05:59  peter
+  Revision 1.80  1999-04-06 11:20:59  peter
+    * more hashing for keyword table
+
+  Revision 1.79  1999/04/01 22:05:59  peter
     * '1.' is now parsed as a real
 
   Revision 1.78  1999/03/26 19:10:06  peter