OSDN Git Service

- Add TEXFLAG_ADDOFFSET definition, so that all the flags for Line_SetTextureOffset...
[zandronum/zandronum-acc.git] / parse.c
diff --git a/parse.c b/parse.c
index b0b923b..f59daa2 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -12,6 +12,7 @@
 #include <ctype.h>\r
 #include <malloc.h>\r
 #include <stdio.h>\r
+#include <assert.h>\r
 \r
 #include "common.h"\r
 #include "parse.h"\r
@@ -1700,8 +1701,8 @@ static void LeadingFunction()
        }\r
        else\r
        {\r
-               PC_AppendByte(argCount);\r
-               PC_AppendWord(specialValue);\r
+               PC_AppendByte((U_BYTE)argCount);\r
+               PC_AppendWord((U_WORD)specialValue);\r
        }\r
        PC_AppendCmd(PCD_DROP);\r
        TK_NextToken();\r
@@ -3304,7 +3305,7 @@ static void ExprLineSpecial(void)
                        }\r
                        else\r
                        {\r
-                               PC_AppendByte(specialValue);\r
+                               PC_AppendByte((U_BYTE)specialValue);\r
                        }\r
                }\r
                else\r
@@ -3319,8 +3320,8 @@ static void ExprLineSpecial(void)
                        }\r
                        else\r
                        {\r
-                               PC_AppendByte(argCount);\r
-                               PC_AppendWord(-specialValue);\r
+                               PC_AppendByte((U_BYTE)argCount);\r
+                               PC_AppendWord((U_WORD)-specialValue);\r
                        }\r
                }\r
        }\r
@@ -3886,12 +3887,13 @@ static void ParseArrayIndices(symbolNode_t *sym, int requiredIndices)
        }\r
 }\r
 \r
-static int *ProcessArrayLevel(int level, int *entry, int ndim,\r
+static void ProcessArrayLevel(int level, int *entry, int ndim,\r
        int dims[MAX_ARRAY_DIMS], int muls[MAX_ARRAY_DIMS], char *name)\r
 {\r
+       int warned_too_many = NO;\r
        int i;\r
 \r
-       for(i = 0; i < dims[level-1]; ++i)\r
+       for(i = 0; ; ++i)\r
        {\r
                if(tk_Token == TK_COMMA)\r
                {\r
@@ -3901,14 +3903,7 @@ static int *ProcessArrayLevel(int level, int *entry, int ndim,
                else if(tk_Token == TK_RBRACE)\r
                {\r
                        TK_NextToken();\r
-                       if(level > 1)\r
-                       {\r
-                               return entry + muls[level-2] - i;\r
-                       }\r
-                       else\r
-                       {\r
-                               return entry + (muls[0]*dims[0]) - i;\r
-                       }\r
+                       return;\r
                }\r
                else\r
                {\r
@@ -3923,15 +3918,28 @@ static int *ProcessArrayLevel(int level, int *entry, int ndim,
                                }\r
                                else\r
                                {\r
-                                       *entry++ = EvalConstExpression();\r
+                                       int val;\r
+\r
+                                       if (i >= dims[level - 1] && !warned_too_many)\r
+                                       {\r
+                                               warned_too_many = YES;\r
+                                               ERR_Error(ERR_TOO_MANY_ARRAY_INIT, YES);\r
+                                       }\r
+                                       val = EvalConstExpression();\r
                                        ArrayHasStrings |= pa_ConstExprIsString;\r
+                                       if (i < dims[level - 1])\r
+                                       {\r
+                                               entry[i] = val;\r
+                                       }\r
                                }\r
                        }\r
                        else\r
                        {\r
                                TK_TokenMustBe(TK_LBRACE, ERR_MISSING_LBRACE_ARR);\r
                                TK_NextToken();\r
-                               entry = ProcessArrayLevel(level+1, entry, ndim, dims, muls, name);\r
+                               ProcessArrayLevel(level+1, entry, ndim, dims, muls, name);\r
+                               assert(level > 0);\r
+                               entry += muls[level-1];\r
                        }\r
                        if(i < dims[level-1]-1)\r
                        {\r
@@ -3956,7 +3964,6 @@ static int *ProcessArrayLevel(int level, int *entry, int ndim,
        }\r
        TK_TokenMustBe(TK_RBRACE, ERR_MISSING_RBRACE_ARR);\r
        TK_NextToken();\r
-       return entry;\r
 }\r
 \r
 //==========================================================================\r