OSDN Git Service

- Added NecroMage's submission for bitwise/shift assignment operators for ACS.
authorChristoph Oelckers <coelckers@zdoom.fake>
Sun, 16 Jul 2006 20:13:24 +0000 (20:13 +0000)
committerChristoph Oelckers <coelckers@zdoom.fake>
Sun, 16 Jul 2006 20:13:24 +0000 (20:13 +0000)
SVN r261 (trunk)

acc.c
parse.c
pcode.c
pcode.h
token.c
token.h

diff --git a/acc.c b/acc.c
index 1c44b06..3567612 100644 (file)
--- a/acc.c
+++ b/acc.c
@@ -22,7 +22,7 @@
 \r
 // MACROS ------------------------------------------------------------------\r
 \r
-#define VERSION_TEXT "1.40"\r
+#define VERSION_TEXT "1.42"\r
 #define COPYRIGHT_YEARS_TEXT "1995"\r
 \r
 // TYPES -------------------------------------------------------------------\r
@@ -125,6 +125,7 @@ static void DisplayBanner(void)
        fprintf(stderr, "ZDoom changes and language extensions by Randy Heit\n");\r
        fprintf(stderr, "Further changes by Brad Carney\n");\r
        fprintf(stderr, "Even more changes by James Bentler\n");\r
+       fprintf(stderr, "Some additions by Michael \"Necromage\" Weber\n");\r
        fprintf(stderr, "Error reporting improvements and limit expansion by Ty Halderman\n");\r
 }\r
 \r
diff --git a/parse.c b/parse.c
index e46a807..06c7a14 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -310,6 +310,11 @@ static tokenType_t AssignOps[] =
        TK_MULASSIGN,\r
        TK_DIVASSIGN,\r
        TK_MODASSIGN,\r
+       TK_ANDASSIGN,\r
+       TK_EORASSIGN,\r
+       TK_ORASSIGN,\r
+       TK_LSASSIGN,\r
+       TK_RSASSIGN,\r
        TK_NONE\r
 };\r
 \r
@@ -2906,21 +2911,28 @@ static pcd_t GetAssignPCD(tokenType_t token, symbolType_t symbol)
        static tokenType_t tokenLookup[] =\r
        {\r
                TK_ASSIGN, TK_ADDASSIGN, TK_SUBASSIGN,\r
-               TK_MULASSIGN, TK_DIVASSIGN, TK_MODASSIGN\r
+               TK_MULASSIGN, TK_DIVASSIGN, TK_MODASSIGN,\r
+               TK_ANDASSIGN, TK_EORASSIGN, TK_ORASSIGN,\r
+               TK_LSASSIGN, TK_RSASSIGN\r
        };\r
        static symbolType_t symbolLookup[] =\r
        {\r
                SY_SCRIPTVAR, SY_MAPVAR, SY_WORLDVAR, SY_GLOBALVAR, SY_MAPARRAY,\r
                SY_WORLDARRAY, SY_GLOBALARRAY\r
        };\r
-       static pcd_t assignmentLookup[6][7] =\r
+       static pcd_t assignmentLookup[11][7] =\r
        {\r
                { PCD_ASSIGNSCRIPTVAR, PCD_ASSIGNMAPVAR, PCD_ASSIGNWORLDVAR, PCD_ASSIGNGLOBALVAR, PCD_ASSIGNMAPARRAY, PCD_ASSIGNWORLDARRAY, PCD_ASSIGNGLOBALARRAY },\r
                { PCD_ADDSCRIPTVAR, PCD_ADDMAPVAR, PCD_ADDWORLDVAR, PCD_ADDGLOBALVAR, PCD_ADDMAPARRAY, PCD_ADDWORLDARRAY, PCD_ADDGLOBALARRAY },\r
                { PCD_SUBSCRIPTVAR, PCD_SUBMAPVAR, PCD_SUBWORLDVAR, PCD_SUBGLOBALVAR, PCD_SUBMAPARRAY, PCD_SUBWORLDARRAY, PCD_SUBGLOBALARRAY },\r
                { PCD_MULSCRIPTVAR, PCD_MULMAPVAR, PCD_MULWORLDVAR, PCD_MULGLOBALVAR, PCD_MULMAPARRAY, PCD_MULWORLDARRAY, PCD_MULGLOBALARRAY },\r
                { PCD_DIVSCRIPTVAR, PCD_DIVMAPVAR, PCD_DIVWORLDVAR, PCD_DIVGLOBALVAR, PCD_DIVMAPARRAY, PCD_DIVWORLDARRAY, PCD_DIVGLOBALARRAY },\r
-               { PCD_MODSCRIPTVAR, PCD_MODMAPVAR, PCD_MODWORLDVAR, PCD_MODGLOBALVAR, PCD_MODMAPARRAY, PCD_MODWORLDARRAY, PCD_MODGLOBALARRAY }\r
+               { PCD_MODSCRIPTVAR, PCD_MODMAPVAR, PCD_MODWORLDVAR, PCD_MODGLOBALVAR, PCD_MODMAPARRAY, PCD_MODWORLDARRAY, PCD_MODGLOBALARRAY },\r
+               { PCD_ANDSCRIPTVAR, PCD_ANDMAPVAR, PCD_ANDWORLDVAR, PCD_ANDGLOBALVAR, PCD_ANDMAPARRAY, PCD_ANDWORLDARRAY, PCD_ANDGLOBALARRAY },\r
+               { PCD_EORSCRIPTVAR, PCD_EORMAPVAR, PCD_EORWORLDVAR, PCD_EORGLOBALVAR, PCD_EORMAPARRAY, PCD_EORWORLDARRAY, PCD_EORGLOBALARRAY },\r
+               { PCD_ORSCRIPTVAR, PCD_ORMAPVAR, PCD_ORWORLDVAR, PCD_ORGLOBALVAR, PCD_ORMAPARRAY, PCD_ORWORLDARRAY, PCD_ORGLOBALARRAY },\r
+               { PCD_LSSCRIPTVAR, PCD_LSMAPVAR, PCD_LSWORLDVAR, PCD_LSGLOBALVAR, PCD_LSMAPARRAY, PCD_LSWORLDARRAY, PCD_LSGLOBALARRAY },\r
+               { PCD_RSSCRIPTVAR, PCD_RSMAPVAR, PCD_RSWORLDVAR, PCD_RSGLOBALVAR, PCD_RSMAPARRAY, PCD_RSWORLDARRAY, PCD_RSGLOBALARRAY }\r
        };\r
 \r
        for(i = 0; i < ARRAY_SIZE(tokenLookup); ++i)\r
diff --git a/pcode.c b/pcode.c
index b94154f..e7e1c9e 100644 (file)
--- a/pcode.c
+++ b/pcode.c
@@ -399,6 +399,43 @@ static char *PCDNames[PCODE_COMMAND_COUNT] =
        "PCD_THINGCOUNTNAME",\r
        "PCD_SPAWNSPOTFACING",\r
        "PCD_PLAYERCLASS",\r
+       //[MW] start my p-codes\r
+       "PCD_ANDSCRIPTVAR",\r
+       "PCD_ANDMAPVAR", \r
+       "PCD_ANDWORLDVAR", \r
+       "PCD_ANDGLOBALVAR", \r
+       "PCD_ANDMAPARRAY", \r
+       "PCD_ANDWORLDARRAY", \r
+       "PCD_ANDGLOBALARRAY",\r
+       "PCD_EORSCRIPTVAR", \r
+       "PCD_EORMAPVAR", \r
+       "PCD_EORWORLDVAR", \r
+       "PCD_EORGLOBALVAR", \r
+       "PCD_EORMAPARRAY", \r
+       "PCD_EORWORLDARRAY", \r
+       "PCD_EORGLOBALARRAY",\r
+       "PCD_ORSCRIPTVAR", \r
+       "PCD_ORMAPVAR", \r
+       "PCD_ORWORLDVAR", \r
+       "PCD_ORGLOBALVAR", \r
+       "PCD_ORMAPARRAY", \r
+       "PCD_ORWORLDARRAY", \r
+       "PCD_ORGLOBALARRAY",\r
+       "PCD_LSSCRIPTVAR", \r
+       "PCD_LSMAPVAR", \r
+       "PCD_LSWORLDVAR", \r
+       "PCD_LSGLOBALVAR", \r
+       "PCD_LSMAPARRAY", \r
+       "PCD_LSWORLDARRAY", \r
+       "PCD_LSGLOBALARRAY",\r
+       "PCD_RSSCRIPTVAR", \r
+       "PCD_RSMAPVAR", \r
+       "PCD_RSWORLDVAR", \r
+       "PCD_RSGLOBALVAR", \r
+       "PCD_RSMAPARRAY", \r
+       "PCD_RSWORLDARRAY", \r
+       "PCD_RSGLOBALARRAY", \r
+       //[MW] end my p-codes\r
        \r
 };\r
 \r
diff --git a/pcode.h b/pcode.h
index f7473cd..d01b0f3 100644 (file)
--- a/pcode.h
+++ b/pcode.h
@@ -349,6 +349,43 @@ typedef enum
        PCD_THINGCOUNTNAME,\r
        PCD_SPAWNSPOTFACING,\r
        PCD_PLAYERCLASS,\r
+       //[MW] start my p-codes\r
+       PCD_ANDSCRIPTVAR,\r
+       PCD_ANDMAPVAR, \r
+       PCD_ANDWORLDVAR, \r
+       PCD_ANDGLOBALVAR, \r
+       PCD_ANDMAPARRAY, \r
+       PCD_ANDWORLDARRAY, \r
+       PCD_ANDGLOBALARRAY,\r
+       PCD_EORSCRIPTVAR, \r
+       PCD_EORMAPVAR, \r
+       PCD_EORWORLDVAR, \r
+       PCD_EORGLOBALVAR, \r
+       PCD_EORMAPARRAY, \r
+       PCD_EORWORLDARRAY, \r
+       PCD_EORGLOBALARRAY,\r
+       PCD_ORSCRIPTVAR, \r
+       PCD_ORMAPVAR, \r
+       PCD_ORWORLDVAR, \r
+       PCD_ORGLOBALVAR, \r
+       PCD_ORMAPARRAY, \r
+       PCD_ORWORLDARRAY, \r
+       PCD_ORGLOBALARRAY,\r
+       PCD_LSSCRIPTVAR, \r
+       PCD_LSMAPVAR, \r
+       PCD_LSWORLDVAR, \r
+       PCD_LSGLOBALVAR, \r
+       PCD_LSMAPARRAY, \r
+       PCD_LSWORLDARRAY, \r
+       PCD_LSGLOBALARRAY,\r
+       PCD_RSSCRIPTVAR, \r
+       PCD_RSMAPVAR, \r
+       PCD_RSWORLDVAR, \r
+       PCD_RSGLOBALVAR, \r
+       PCD_RSMAPARRAY, \r
+       PCD_RSWORLDARRAY, \r
+       PCD_RSGLOBALARRAY, \r
+       //[MW] end my p-codes\r
 \r
        PCODE_COMMAND_COUNT\r
 } pcd_t;\r
diff --git a/token.c b/token.c
index 282df06..e0b3590 100644 (file)
--- a/token.c
+++ b/token.c
@@ -1056,8 +1056,17 @@ static void ProcessSpecialToken(void)
                        }\r
                        else if(Chr == '<')\r
                        {\r
-                               tk_Token = TK_LSHIFT;\r
                                NextChr();\r
+                               if(Chr == '=')\r
+                               {\r
+                                       tk_Token = TK_LSASSIGN;\r
+                                       NextChr();\r
+                               }\r
+                               else\r
+                               {\r
+                                       tk_Token = TK_LSHIFT;\r
+                               }\r
+                               \r
                        }\r
                        else\r
                        {\r
@@ -1072,8 +1081,16 @@ static void ProcessSpecialToken(void)
                        }\r
                        else if(Chr == '>')\r
                        {\r
-                               tk_Token = TK_RSHIFT;\r
                                NextChr();\r
+                               if(Chr == '=')\r
+                               {\r
+                                       tk_Token = TK_RSASSIGN;\r
+                                       NextChr();\r
+                               }\r
+                               else\r
+                               {\r
+                                       tk_Token = TK_RSHIFT;\r
+                               }\r
                        }\r
                        else\r
                        {\r
@@ -1097,6 +1114,11 @@ static void ProcessSpecialToken(void)
                                tk_Token = TK_ANDLOGICAL;\r
                                NextChr();\r
                        }\r
+                       else if(Chr == '=')\r
+                       {\r
+                               tk_Token = TK_ANDASSIGN;\r
+                               NextChr();\r
+                       }\r
                        else\r
                        {\r
                                tk_Token = TK_ANDBITWISE;\r
@@ -1108,6 +1130,11 @@ static void ProcessSpecialToken(void)
                                tk_Token = TK_ORLOGICAL;\r
                                NextChr();\r
                        }\r
+                       else if(Chr == '=')\r
+                       {\r
+                               tk_Token = TK_ORASSIGN;\r
+                               NextChr();\r
+                       }\r
                        else\r
                        {\r
                                tk_Token = TK_ORBITWISE;\r
@@ -1147,7 +1174,15 @@ static void ProcessSpecialToken(void)
                        tk_Token = TK_NUMBERSIGN;\r
                        break;\r
                case '^':\r
-                       tk_Token = TK_EORBITWISE;\r
+                       if(Chr == '=')\r
+                       {\r
+                               tk_Token = TK_EORASSIGN;\r
+                               NextChr();\r
+                       }\r
+                       else\r
+                       {\r
+                               tk_Token = TK_EORBITWISE;\r
+                       }\r
                        break;\r
                case '~':\r
                        tk_Token = TK_TILDE;\r
diff --git a/token.h b/token.h
index 3cd1700..122c58a 100644 (file)
--- a/token.h
+++ b/token.h
@@ -122,6 +122,11 @@ typedef enum
        TK_DISCONNECT,          // 'disconnect'\r
        TK_UNLOADING,           // 'unloading'\r
        TK_STATIC,                      // 'static'\r
+       TK_ANDASSIGN,           // '&='\r
+       TK_ORASSIGN,            // '|='\r
+       TK_EORASSIGN,           // '^='\r
+       TK_LSASSIGN,            // '<<='\r
+       TK_RSASSIGN,            // '>>='\r
 } tokenType_t;\r
 \r
 // PUBLIC FUNCTION PROTOTYPES ----------------------------------------------\r