dotgnu-pnet-commits
[Top][All Lists]
Advanced

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

[dotgnu-pnet-commits] pnet ChangeLog include/il_utils.h support/inter...


From: Klaus Treichel
Subject: [dotgnu-pnet-commits] pnet ChangeLog include/il_utils.h support/inter...
Date: Thu, 03 May 2007 20:08:46 +0000

CVSROOT:        /cvsroot/dotgnu-pnet
Module name:    pnet
Changes by:     Klaus Treichel <ktreichel>      07/05/03 20:08:46

Modified files:
        .              : ChangeLog 
        include        : il_utils.h 
        support        : intern.c 
        codegen        : cg_decls.tc cg_lvalue.tc 
        cscc/csharp    : cs_cast.tc 

Log message:
        2007-05-03  Klaus Treichel  <address@hidden>
        
                * include/il_utils.h, support/intern.c: Add the function
                ILInternStringConcat3 to concatenate three interned strings.
        
                * codegen/cg_decls.c, codegen/cg-lvalue.tc, 
cscc/csharp/cs_cast.c: Replace
                multiple concatenations by a call to the new function.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pnet/ChangeLog?cvsroot=dotgnu-pnet&r1=1.3449&r2=1.3450
http://cvs.savannah.gnu.org/viewcvs/pnet/include/il_utils.h?cvsroot=dotgnu-pnet&r1=1.28&r2=1.29
http://cvs.savannah.gnu.org/viewcvs/pnet/support/intern.c?cvsroot=dotgnu-pnet&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/pnet/codegen/cg_decls.tc?cvsroot=dotgnu-pnet&r1=1.55&r2=1.56
http://cvs.savannah.gnu.org/viewcvs/pnet/codegen/cg_lvalue.tc?cvsroot=dotgnu-pnet&r1=1.25&r2=1.26
http://cvs.savannah.gnu.org/viewcvs/pnet/cscc/csharp/cs_cast.tc?cvsroot=dotgnu-pnet&r1=1.12&r2=1.13

Patches:
Index: ChangeLog
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/ChangeLog,v
retrieving revision 1.3449
retrieving revision 1.3450
diff -u -b -r1.3449 -r1.3450
--- ChangeLog   24 Apr 2007 19:43:25 -0000      1.3449
+++ ChangeLog   3 May 2007 20:08:46 -0000       1.3450
@@ -1,3 +1,11 @@
+2007-05-03  Klaus Treichel  <address@hidden>
+
+       * include/il_utils.h, support/intern.c: Add the function
+       ILInternStringConcat3 to concatenate three interned strings.
+
+       * codegen/cg_decls.c, codegen/cg-lvalue.tc, cscc/csharp/cs_cast.c: 
Replace
+       multiple concatenations by a call to the new function.
+
 2007-04-24  Klaus Treichel  <address@hidden>
 
        * Makefile.am: remove the coremul dir if pnet is built without tools.

Index: include/il_utils.h
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/include/il_utils.h,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- include/il_utils.h  9 Apr 2007 09:10:47 -0000       1.28
+++ include/il_utils.h  3 May 2007 20:08:46 -0000       1.29
@@ -57,6 +57,13 @@
 ILIntString ILInternAppendedString(ILIntString str1, ILIntString str2);
 
 /*
+ * Concatenate three internalised strings and internalise the result.
+ */
+ILIntString ILInternStringConcat3(ILIntString str1,
+                                 ILIntString str2,
+                                 ILIntString str3);
+
+/*
  * Generate a GUID value.  The "guid" buffer must be at
  * least 16 bytes in length.
  */

Index: support/intern.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/support/intern.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- support/intern.c    9 Apr 2007 09:10:47 -0000       1.4
+++ support/intern.c    3 May 2007 20:08:46 -0000       1.5
@@ -162,6 +162,127 @@
        return result;
 }
 
+ILIntString ILInternStringConcat3(ILIntString str1, ILIntString str2, 
ILIntString str3)
+{
+       unsigned long hash = 0;
+       int len = 0;
+       InternEntry *entry;
+       ILIntString result;
+
+       /* Bail out early for the easy cases */
+       if(str1.len == 0)
+       {
+               if(str2.len == 0)
+               {
+                       return str3;
+               }
+               if(str3.len == 0)
+               {
+                       return str2;
+               }
+       }
+       if(str2.len == 0)
+       {
+               if(str3.len == 0)
+               {
+                       return str1;
+               }
+       }
+
+       /* Hash the combined string */
+       if(str1.len > 0)
+       {
+               hash = ILHashString(hash, str1.string, str1.len);
+               len += str1.len;
+       }
+       else
+       {
+               str1.len = 0;
+       }
+       if(str2.len > 0)
+       {
+               hash = ILHashString(hash, str2.string, str2.len);
+               len += str2.len;
+       }
+       else
+       {
+               str2.len = 0;
+       }
+       if(str3.len > 0)
+       {
+               hash = ILHashString(hash, str3.string, str3.len);
+               len += str3.len;
+       }
+       else
+       {
+               str3.len = 0;
+       }
+       hash %= INTERN_HASH_SIZE;
+
+       /* Look in the hash table to see if we already have the combined string 
*/
+       entry = hashTable[hash];
+       while(entry != 0)
+       {
+               if(len == entry->len)
+               {
+                       if((str1.len > 0) && ILMemCmp(entry->str, str1.string, 
str1.len))
+                       {
+                               /* No match */
+                       }
+                       else if((str2.len > 0) && ILMemCmp(entry->str + 
str1.len, str2.string, str2.len))
+                       {
+                               /* No match */
+                       }
+                       else if((str3.len > 0) && ILMemCmp(entry->str + 
str1.len + str2.len, str3.string, str3.len))
+                       {
+                               /* No match */
+                       }
+                       else
+                       {
+                               result.string = entry->str;
+                               result.len = entry->len;
+                               return result;
+                       }
+               }
+               entry = entry->next;
+       }
+
+       /* Add a new item to the hash table */
+       entry = (InternEntry *)ILMalloc(sizeof(InternEntry) + len);
+       if(!entry)
+       {
+       #ifndef REDUCED_STDIO
+               fprintf(stderr, "virtual memory exhausted - cannot intern \"");
+               fwrite(str1.string, 1, str1.len, stderr);
+               fwrite(str2.string, 1, str2.len, stderr);
+               fprintf(stderr, "\"\n");
+               exit(1);
+       #endif
+               result.string = emptyString;
+               result.len = 0;
+               return result;
+       }
+       entry->next = hashTable[hash];
+       entry->len = len;
+       if(str1.len > 0)
+       {
+               ILMemCpy(entry->str, str1.string, str1.len);
+       }
+       if(str2.len > 0)
+       {
+               ILMemCpy(entry->str + str1.len, str2.string, str2.len);
+       }
+       if(str3.len > 0)
+       {
+               ILMemCpy(entry->str + str1.len + str2.len, str3.string, 
str3.len);
+       }
+       entry->str[entry->len] = '\0';
+       hashTable[hash] = entry;
+       result.string = entry->str;
+       result.len = entry->len;
+       return result;
+}
+
 #ifdef __cplusplus
 };
 #endif

Index: codegen/cg_decls.tc
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/codegen/cg_decls.tc,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -b -r1.55 -r1.56
--- codegen/cg_decls.tc 21 Mar 2007 08:37:04 -0000      1.55
+++ codegen/cg_decls.tc 3 May 2007 20:08:46 -0000       1.56
@@ -304,12 +304,11 @@
        }
        
        /* Create a name for the proxy method */
-       name = ILInternAppendedString
-               (ILInternAppendedString
+       name = ILInternStringConcat3
                        (ILInternString
                                ((char 
*)ILClass_Name(ILMethod_Owner(node->interfaceMethod)),
                                 -1),
-                        ILInternString(".", 1)),
+                ILInternString(".", 1),
                 ILInternString((char *)ILMethod_Name(node->interfaceMethod), 
-1))
                                .string;
 

Index: codegen/cg_lvalue.tc
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/codegen/cg_lvalue.tc,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -b -r1.25 -r1.26
--- codegen/cg_lvalue.tc        26 Jul 2004 06:54:54 -0000      1.25
+++ codegen/cg_lvalue.tc        3 May 2007 20:08:46 -0000       1.26
@@ -1615,8 +1615,8 @@
                        ILIntString name;
                        name.string = ident->name;
                        name.len = strlen(ident->name);
-                       return (ILInternAppendedString
-                                               (quote, 
ILInternAppendedString(name, quote))).string;
+                       return (ILInternStringConcat3
+                                               (quote, name, quote)).string;
                }
                return ident->name;
        }
@@ -1669,8 +1669,8 @@
        str2.len = 1;
        str3.string = name2;
        str3.len = strlen(name2);
-       return (ILInternAppendedString
-                               (str1, ILInternAppendedString(str2, 
str3))).string;
+       return (ILInternStringConcat3
+                               (str1, str2, str3)).string;
 }
 
 int ILIsQualIdent(ILNode *node)

Index: cscc/csharp/cs_cast.tc
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/cscc/csharp/cs_cast.tc,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- cscc/csharp/cs_cast.tc      8 Jun 2004 14:48:35 -0000       1.12
+++ cscc/csharp/cs_cast.tc      3 May 2007 20:08:46 -0000       1.13
@@ -164,10 +164,9 @@
                const char *finalName;
                if(namespace)
                {
-                       finalName = ILInternAppendedString
-                                               (ILInternAppendedString
+                       finalName = ILInternStringConcat3
                                                        (ILInternString((char 
*)namespace, -1),
-                                                        ILInternString((char 
*)".", 1)),
+                                                        ILInternString((char 
*)".", 1),
                                                 ILInternString((char *)name, 
-1)).string;
                }
                else
@@ -179,10 +178,9 @@
                        /* Prepend the name of the enclosing nesting class */
                        const char *parentName = CSTypeToName
                                
(ILType_FromClass(ILClass_NestedParent(classInfo)));
-                       finalName = ILInternAppendedString
-                                               (ILInternAppendedString
+                       finalName = ILInternStringConcat3
                                                        (ILInternString((char 
*)parentName, -1),
-                                                        ILInternString((char 
*)".", 1)),
+                                                        ILInternString((char 
*)".", 1),
                                                 ILInternString((char 
*)finalName, -1)).string;
                }
                return finalName;




reply via email to

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