diff dmd/lexer.c @ 658:50383e476c7e

Upgraded frontend to DMD 1.035
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Mon, 06 Oct 2008 16:22:11 +0200
parents 1d3026702f65
children eef8ac26c66c
line wrap: on
line diff
--- a/dmd/lexer.c	Mon Oct 06 14:37:00 2008 +0200
+++ b/dmd/lexer.c	Mon Oct 06 16:22:11 2008 +0200
@@ -88,7 +88,7 @@
 
 /************************* Token **********************************************/
 
-char *Token::tochars[TOKMAX];
+const char *Token::tochars[TOKMAX];
 
 void *Token::operator new(size_t size)
 {   Token *t;
@@ -110,8 +110,8 @@
 }
 #endif
 
-char *Token::toChars()
-{   char *p;
+const char *Token::toChars()
+{   const char *p;
     static char buffer[3 + 3 * sizeof(value) + 1];
 
     p = buffer;
@@ -239,8 +239,8 @@
     return p;
 }
 
-char *Token::toChars(enum TOK value)
-{   char *p;
+const char *Token::toChars(enum TOK value)
+{   const char *p;
     static char buffer[3 + 3 * sizeof(value) + 1];
 
     p = tochars[value];
@@ -467,7 +467,7 @@
     while (p[idx])
     {   dchar_t dc;
 
-	char *q = utf_decodeChar((unsigned char *)p, len, &idx, &dc);
+	const char *q = utf_decodeChar((unsigned char *)p, len, &idx, &dc);
 	if (q)
 	    goto Linvalid;
 
@@ -718,7 +718,7 @@
 		    {	unsigned major = 0;
 			unsigned minor = 0;
 
-			for (char *p = global.version + 1; 1; p++)
+			for (const char *p = global.version + 1; 1; p++)
 			{
 			    char c = *p;
 			    if (isdigit(c))
@@ -2186,13 +2186,15 @@
 		break;
 	    if (d >= r)
 		break;
-	    if (n && n * r + d <= n)
+	    uinteger_t n2 = n * r;
+	    //printf("n2 / r = %llx, n = %llx\n", n2/r, n);
+	    if (n2 / r != n || n2 + d < n)
 	    {
 		error ("integer overflow");
 		break;
 	    }
 
-	    n = n * r + d;
+	    n = n2 + d;
 	    p++;
 	}
 #endif
@@ -2603,7 +2605,7 @@
     unsigned char *s = p;
     size_t len;
     size_t idx;
-    char *msg;
+    const char *msg;
 
     c = *s;
     assert(c & 0x80);
@@ -2801,7 +2803,7 @@
  */
 
 struct Keyword
-{   char *name;
+{   const char *name;
     enum TOK value;
 };
 
@@ -2928,6 +2930,7 @@
     {	"__overloadset", TOKoverloadset	},
     {	"__FILE__",	TOKfile		},
     {	"__LINE__",	TOKline		},
+    {	"shared",	TOKshared	},
 #endif
 };
 
@@ -2953,7 +2956,7 @@
     cmtable_init();
 
     for (u = 0; u < nkeywords; u++)
-    {	char *s;
+    {	const char *s;
 
 	//printf("keyword[%d] = '%s'\n",u, keywords[u].name);
 	s = keywords[u].name;