mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-15 17:01:51 +00:00
More minor CON parser cleanup. This commit is not incredibly meaningful.
git-svn-id: https://svn.eduke32.com/eduke32@7248 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
41c33af8e0
commit
8ff047a82e
1 changed files with 127 additions and 129 deletions
|
@ -35,44 +35,52 @@ int32_t g_scriptVersion = 13; // 13 = 1.3D-style CON files, 14 = 1.4/1.5 style C
|
||||||
|
|
||||||
char g_scriptFileName[BMAX_PATH] = "(none)"; // file we're currently compiling
|
char g_scriptFileName[BMAX_PATH] = "(none)"; // file we're currently compiling
|
||||||
|
|
||||||
int32_t g_totalLines, g_lineNumber;
|
int32_t g_totalLines;
|
||||||
|
int32_t g_lineNumber;
|
||||||
uint32_t g_scriptcrc;
|
uint32_t g_scriptcrc;
|
||||||
char g_szBuf[1024];
|
char g_szBuf[1024];
|
||||||
|
|
||||||
#if !defined LUNATIC
|
#if !defined LUNATIC
|
||||||
static char g_szCurrentBlockName[256] = "(none)", g_szLastBlockName[256] = "NULL";
|
static char *textptr;
|
||||||
static int32_t g_checkingIfElse, g_processingState, g_lastKeyword = -1;
|
|
||||||
|
static char g_szCurrentBlockName[64] = "(none)";
|
||||||
|
static char g_szLastBlockName[64] = "NULL";
|
||||||
|
|
||||||
|
static bool g_checkingCase;
|
||||||
|
static bool g_dynamicSoundMapping;
|
||||||
|
static bool g_dynamicTileMapping;
|
||||||
|
static bool g_labelsOnly;
|
||||||
|
static bool g_processingState;
|
||||||
|
static bool g_skipBranch;
|
||||||
|
|
||||||
|
static int g_checkingIfElse;
|
||||||
|
static int g_checkingSwitch;
|
||||||
|
static int g_lastKeyword = -1;
|
||||||
|
static int g_numBraces;
|
||||||
|
static int g_numCases;
|
||||||
|
|
||||||
|
static intptr_t apScriptGameEventEnd[MAXEVENTS];
|
||||||
|
static intptr_t g_scriptActorOffset;
|
||||||
|
static intptr_t g_scriptEventBreakOffset;
|
||||||
|
static intptr_t g_scriptEventChainOffset;
|
||||||
|
static intptr_t g_scriptEventOffset;
|
||||||
|
|
||||||
// The pointer to the start of the case table in a switch statement.
|
// The pointer to the start of the case table in a switch statement.
|
||||||
// First entry is 'default' code.
|
// First entry is 'default' code.
|
||||||
static intptr_t *g_caseScriptPtr;
|
static intptr_t *g_caseTablePtr;
|
||||||
static intptr_t previous_event;
|
|
||||||
static int32_t g_numCases = 0, g_checkingCase = 0;
|
|
||||||
static int32_t g_checkingSwitch = 0;
|
|
||||||
static bool g_labelsOnly = 0, g_dynamicTileMapping = 0, g_dynamicSoundMapping = 0;
|
|
||||||
static int32_t g_numBraces = 0;
|
|
||||||
|
|
||||||
static bool C_ParseCommand(bool loop);
|
static bool C_ParseCommand(bool loop);
|
||||||
static void C_SetScriptSize(int32_t newsize);
|
static void C_SetScriptSize(int32_t newsize);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int32_t g_numXStrings = 0;
|
int32_t g_errorCnt;
|
||||||
|
int32_t g_warningCnt;
|
||||||
|
int32_t g_numXStrings;
|
||||||
|
|
||||||
#ifdef LUNATIC
|
#ifdef LUNATIC
|
||||||
weapondata_t g_playerWeapon[MAXPLAYERS][MAX_WEAPONS];
|
weapondata_t g_playerWeapon[MAXPLAYERS][MAX_WEAPONS];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined LUNATIC
|
|
||||||
static intptr_t g_parsingActorPtr;
|
|
||||||
static intptr_t g_parsingEventPtr;
|
|
||||||
static intptr_t g_parsingEventBreakPtr;
|
|
||||||
static intptr_t apScriptGameEventEnd[MAXEVENTS];
|
|
||||||
static char *textptr;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int32_t g_errorCnt,g_warningCnt;
|
|
||||||
|
|
||||||
|
|
||||||
#if !defined LUNATIC
|
#if !defined LUNATIC
|
||||||
static char *C_GetLabelType(int const type)
|
static char *C_GetLabelType(int const type)
|
||||||
{
|
{
|
||||||
|
@ -830,7 +838,6 @@ hashtable_t h_labels = { 11264 >> 1, NULL };
|
||||||
|
|
||||||
// "magic" number for { and }, overrides line number in compiled code for later detection
|
// "magic" number for { and }, overrides line number in compiled code for later detection
|
||||||
#define IFELSE_MAGIC 31337
|
#define IFELSE_MAGIC 31337
|
||||||
static bool g_ifElseAborted;
|
|
||||||
|
|
||||||
static void C_SetScriptSize(int32_t newsize)
|
static void C_SetScriptSize(int32_t newsize)
|
||||||
{
|
{
|
||||||
|
@ -937,7 +944,7 @@ static void C_SkipComments(void)
|
||||||
initprintf("%s:%d: debug: EOF in comment!\n",g_scriptFileName,g_lineNumber);
|
initprintf("%s:%d: debug: EOF in comment!\n",g_scriptFileName,g_lineNumber);
|
||||||
C_ReportError(-1);
|
C_ReportError(-1);
|
||||||
initprintf("%s:%d: error: found `/*' with no `*/'.\n",g_scriptFileName,g_lineNumber);
|
initprintf("%s:%d: error: found `/*' with no `*/'.\n",g_scriptFileName,g_lineNumber);
|
||||||
g_parsingActorPtr = g_processingState = g_numBraces = 0;
|
g_scriptActorOffset = g_numBraces = g_processingState = 0;
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -1100,8 +1107,8 @@ static int C_GetNextKeyword(void) //Returns its code #
|
||||||
if (EDUKE32_PREDICT_TRUE((i = hash_find(&h_keywords,tempbuf)) >= 0))
|
if (EDUKE32_PREDICT_TRUE((i = hash_find(&h_keywords,tempbuf)) >= 0))
|
||||||
{
|
{
|
||||||
if (i == CON_LEFTBRACE || i == CON_RIGHTBRACE || i == CON_NULLOP)
|
if (i == CON_LEFTBRACE || i == CON_RIGHTBRACE || i == CON_NULLOP)
|
||||||
scriptWriteValue(i + (IFELSE_MAGIC<<12));
|
scriptWriteValue(i | (IFELSE_MAGIC<<12));
|
||||||
else scriptWriteValue(i + (g_lineNumber<<12));
|
else scriptWriteValue(i | (g_lineNumber<<12));
|
||||||
|
|
||||||
textptr += l;
|
textptr += l;
|
||||||
if (!(g_errorCnt || g_warningCnt) && g_scriptDebug)
|
if (!(g_errorCnt || g_warningCnt) && g_scriptDebug)
|
||||||
|
@ -1187,7 +1194,7 @@ static void C_GetNextVarType(int32_t type)
|
||||||
scriptWriteValue(parse_decimal_number());
|
scriptWriteValue(parse_decimal_number());
|
||||||
|
|
||||||
if (!(g_errorCnt || g_warningCnt) && g_scriptDebug)
|
if (!(g_errorCnt || g_warningCnt) && g_scriptDebug)
|
||||||
initprintf("%s:%d: debug: constant %ld in place of gamevar.\n", g_scriptFileName, g_lineNumber, (long)g_scriptPtr[-1]);
|
initprintf("%s:%d: debug: constant %ld in place of gamevar.\n", g_scriptFileName, g_lineNumber, (long)(g_scriptPtr[-1]));
|
||||||
#if 1
|
#if 1
|
||||||
while (!ispecial(*textptr) && *textptr != ']') textptr++;
|
while (!ispecial(*textptr) && *textptr != ']') textptr++;
|
||||||
#else
|
#else
|
||||||
|
@ -1296,9 +1303,7 @@ static void C_GetNextVarType(int32_t type)
|
||||||
{
|
{
|
||||||
while (*textptr != '.')
|
while (*textptr != '.')
|
||||||
{
|
{
|
||||||
if (*textptr == 0xa)
|
if (*textptr == 0xa || !*textptr)
|
||||||
break;
|
|
||||||
if (!*textptr)
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
textptr++;
|
textptr++;
|
||||||
|
@ -1650,7 +1655,7 @@ static bool C_CheckMalformedBranch(intptr_t lastScriptPtr)
|
||||||
case CON_ENDS:
|
case CON_ENDS:
|
||||||
case CON_ELSE:
|
case CON_ELSE:
|
||||||
g_scriptPtr = lastScriptPtr + apScript;
|
g_scriptPtr = lastScriptPtr + apScript;
|
||||||
g_ifElseAborted = 1;
|
g_skipBranch = true;
|
||||||
C_ReportError(-1);
|
C_ReportError(-1);
|
||||||
g_warningCnt++;
|
g_warningCnt++;
|
||||||
initprintf("%s:%d: warning: malformed `%s' branch\n",g_scriptFileName,g_lineNumber,
|
initprintf("%s:%d: warning: malformed `%s' branch\n",g_scriptFileName,g_lineNumber,
|
||||||
|
@ -1667,21 +1672,21 @@ static bool C_CheckEmptyBranch(int tw, intptr_t lastScriptPtr)
|
||||||
tw == CON_IFRND || tw == CON_IFHITWEAPON || tw == CON_IFCANSEE || tw == CON_IFCANSEETARGET ||
|
tw == CON_IFRND || tw == CON_IFHITWEAPON || tw == CON_IFCANSEE || tw == CON_IFCANSEETARGET ||
|
||||||
tw == CON_IFPDISTL || tw == CON_IFPDISTG || tw == CON_IFGOTWEAPONCE)
|
tw == CON_IFPDISTL || tw == CON_IFPDISTG || tw == CON_IFGOTWEAPONCE)
|
||||||
{
|
{
|
||||||
g_ifElseAborted = 0;
|
g_skipBranch = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((*(g_scriptPtr) & VM_INSTMASK) != CON_NULLOP || *(g_scriptPtr)>>12 != IFELSE_MAGIC)
|
if ((*(g_scriptPtr) & VM_INSTMASK) != CON_NULLOP || *(g_scriptPtr)>>12 != IFELSE_MAGIC)
|
||||||
g_ifElseAborted = 0;
|
g_skipBranch = false;
|
||||||
|
|
||||||
if (EDUKE32_PREDICT_FALSE(g_ifElseAborted))
|
if (EDUKE32_PREDICT_FALSE(g_skipBranch))
|
||||||
{
|
{
|
||||||
C_ReportError(-1);
|
C_ReportError(-1);
|
||||||
g_warningCnt++;
|
g_warningCnt++;
|
||||||
g_scriptPtr = lastScriptPtr + apScript;
|
g_scriptPtr = lastScriptPtr + apScript;
|
||||||
initprintf("%s:%d: warning: empty `%s' branch\n",g_scriptFileName,g_lineNumber,
|
initprintf("%s:%d: warning: empty `%s' branch\n",g_scriptFileName,g_lineNumber,
|
||||||
VM_GetKeywordForID(*(g_scriptPtr) & VM_INSTMASK));
|
VM_GetKeywordForID(*(g_scriptPtr) & VM_INSTMASK));
|
||||||
*(g_scriptPtr) = (CON_NULLOP + (IFELSE_MAGIC<<12));
|
scriptWriteAtOffset(CON_NULLOP | (IFELSE_MAGIC<<12), g_scriptPtr);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1693,11 +1698,11 @@ static int C_CountCaseStatements()
|
||||||
char *const temptextptr = textptr;
|
char *const temptextptr = textptr;
|
||||||
int const backupLineNumber = g_lineNumber;
|
int const backupLineNumber = g_lineNumber;
|
||||||
int const backupNumCases = g_numCases;
|
int const backupNumCases = g_numCases;
|
||||||
uint32_t const casePtrOffset = g_caseScriptPtr - apScript;
|
intptr_t const casePtrOffset = g_caseTablePtr - apScript;
|
||||||
uint32_t const scriptPtrOffset = g_scriptPtr - apScript;
|
intptr_t const scriptPtrOffset = g_scriptPtr - apScript;
|
||||||
|
|
||||||
g_numCases = 0;
|
g_numCases = 0;
|
||||||
g_caseScriptPtr = NULL;
|
g_caseTablePtr = NULL;
|
||||||
C_ParseCommand(1);
|
C_ParseCommand(1);
|
||||||
|
|
||||||
// since we processed the endswitch, we need to re-increment g_checkingSwitch
|
// since we processed the endswitch, we need to re-increment g_checkingSwitch
|
||||||
|
@ -1708,8 +1713,8 @@ static int C_CountCaseStatements()
|
||||||
textptr = temptextptr;
|
textptr = temptextptr;
|
||||||
g_lineNumber = backupLineNumber;
|
g_lineNumber = backupLineNumber;
|
||||||
g_numCases = backupNumCases;
|
g_numCases = backupNumCases;
|
||||||
g_caseScriptPtr = (intptr_t *)(apScript + casePtrOffset);
|
g_caseTablePtr = apScript + casePtrOffset;
|
||||||
g_scriptPtr = (intptr_t *)(apScript + scriptPtrOffset);
|
g_scriptPtr = apScript + scriptPtrOffset;
|
||||||
|
|
||||||
return numCases;
|
return numCases;
|
||||||
}
|
}
|
||||||
|
@ -2287,7 +2292,7 @@ static bool C_ParseCommand(bool loop)
|
||||||
if (EDUKE32_PREDICT_FALSE(g_errorCnt > 63 || (*textptr == '\0') || (*(textptr+1) == '\0')))
|
if (EDUKE32_PREDICT_FALSE(g_errorCnt > 63 || (*textptr == '\0') || (*(textptr+1) == '\0')))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if ((g_scriptPtr - apScript) > (g_scriptSize - 4096) && g_caseScriptPtr == NULL)
|
if ((g_scriptPtr - apScript) > (g_scriptSize - 4096) && g_caseTablePtr == NULL)
|
||||||
C_SetScriptSize(g_scriptSize << 1);
|
C_SetScriptSize(g_scriptSize << 1);
|
||||||
|
|
||||||
if (EDUKE32_PREDICT_FALSE(g_scriptDebug))
|
if (EDUKE32_PREDICT_FALSE(g_scriptDebug))
|
||||||
|
@ -2304,7 +2309,7 @@ static bool C_ParseCommand(bool loop)
|
||||||
case -2:
|
case -2:
|
||||||
return 1; //End
|
return 1; //End
|
||||||
case CON_DEFSTATE:
|
case CON_DEFSTATE:
|
||||||
if (EDUKE32_PREDICT_FALSE(g_processingState || g_parsingActorPtr))
|
if (EDUKE32_PREDICT_FALSE(g_processingState || g_scriptActorOffset))
|
||||||
{
|
{
|
||||||
C_ReportError(ERROR_FOUNDWITHIN);
|
C_ReportError(ERROR_FOUNDWITHIN);
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
|
@ -2312,7 +2317,7 @@ static bool C_ParseCommand(bool loop)
|
||||||
}
|
}
|
||||||
goto DO_DEFSTATE;
|
goto DO_DEFSTATE;
|
||||||
case CON_STATE:
|
case CON_STATE:
|
||||||
if (!g_parsingActorPtr && g_processingState == 0)
|
if (!g_scriptActorOffset && g_processingState == 0)
|
||||||
{
|
{
|
||||||
DO_DEFSTATE:
|
DO_DEFSTATE:
|
||||||
C_GetNextLabelName();
|
C_GetNextLabelName();
|
||||||
|
@ -2430,15 +2435,9 @@ DO_DEFSTATE:
|
||||||
|
|
||||||
if (EDUKE32_PREDICT_FALSE(isdigit(*textptr) || (*textptr == '-')))
|
if (EDUKE32_PREDICT_FALSE(isdigit(*textptr) || (*textptr == '-')))
|
||||||
{
|
{
|
||||||
C_GetNextLabelName();
|
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
C_ReportError(ERROR_SYNTAXERROR);
|
C_ReportError(ERROR_SYNTAXERROR);
|
||||||
C_GetNextValue(LABEL_DEFINE);
|
scriptSkipLine();
|
||||||
j = 0;
|
|
||||||
while (C_GetKeyword() == -1)
|
|
||||||
C_BitOrNextValue(&j);
|
|
||||||
C_FinishBitOr(j);
|
|
||||||
g_scriptPtr -= 3; // we complete the process anyways just to skip past the fucked up section
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2485,12 +2484,9 @@ DO_DEFSTATE:
|
||||||
{
|
{
|
||||||
if (EDUKE32_PREDICT_FALSE(isdigit(*textptr) || (*textptr == '-')))
|
if (EDUKE32_PREDICT_FALSE(isdigit(*textptr) || (*textptr == '-')))
|
||||||
{
|
{
|
||||||
C_GetNextLabelName();
|
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
C_ReportError(ERROR_SYNTAXERROR);
|
C_ReportError(ERROR_SYNTAXERROR);
|
||||||
C_GetNextValue(LABEL_DEFINE);
|
scriptSkipLine();
|
||||||
C_GetNextValue(LABEL_DEFINE);
|
|
||||||
g_scriptPtr -= 2; // we complete the process anyways just to skip past the fucked up section
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
C_GetNextLabelName();
|
C_GetNextLabelName();
|
||||||
|
@ -2588,7 +2584,7 @@ DO_DEFSTATE:
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case CON_MOVE:
|
case CON_MOVE:
|
||||||
if (g_parsingActorPtr || g_processingState)
|
if (g_scriptActorOffset || g_processingState)
|
||||||
{
|
{
|
||||||
if (EDUKE32_PREDICT_FALSE((C_GetNextValue(LABEL_MOVE|LABEL_DEFINE) == 0) && (g_scriptPtr[-1] != 0) && (g_scriptPtr[-1] != 1)))
|
if (EDUKE32_PREDICT_FALSE((C_GetNextValue(LABEL_MOVE|LABEL_DEFINE) == 0) && (g_scriptPtr[-1] != 0) && (g_scriptPtr[-1] != 1)))
|
||||||
{
|
{
|
||||||
|
@ -2720,7 +2716,7 @@ DO_DEFSTATE:
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case CON_AI:
|
case CON_AI:
|
||||||
if (g_parsingActorPtr || g_processingState)
|
if (g_scriptActorOffset || g_processingState)
|
||||||
{
|
{
|
||||||
C_GetNextValue(LABEL_AI);
|
C_GetNextValue(LABEL_AI);
|
||||||
}
|
}
|
||||||
|
@ -2793,7 +2789,7 @@ DO_DEFSTATE:
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case CON_ACTION:
|
case CON_ACTION:
|
||||||
if (g_parsingActorPtr || g_processingState)
|
if (g_scriptActorOffset || g_processingState)
|
||||||
{
|
{
|
||||||
C_GetNextValue(LABEL_ACTION);
|
C_GetNextValue(LABEL_ACTION);
|
||||||
}
|
}
|
||||||
|
@ -2846,7 +2842,7 @@ DO_DEFSTATE:
|
||||||
case CON_ACTOR:
|
case CON_ACTOR:
|
||||||
case CON_USERACTOR:
|
case CON_USERACTOR:
|
||||||
case CON_EVENTLOADACTOR:
|
case CON_EVENTLOADACTOR:
|
||||||
if (EDUKE32_PREDICT_FALSE(g_processingState || g_parsingActorPtr))
|
if (EDUKE32_PREDICT_FALSE(g_processingState || g_scriptActorOffset))
|
||||||
{
|
{
|
||||||
C_ReportError(ERROR_FOUNDWITHIN);
|
C_ReportError(ERROR_FOUNDWITHIN);
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
|
@ -2854,7 +2850,7 @@ DO_DEFSTATE:
|
||||||
|
|
||||||
g_numBraces = 0;
|
g_numBraces = 0;
|
||||||
g_scriptPtr--;
|
g_scriptPtr--;
|
||||||
g_parsingActorPtr = g_scriptPtr - apScript;
|
g_scriptActorOffset = g_scriptPtr - apScript;
|
||||||
|
|
||||||
if (tw == CON_USERACTOR)
|
if (tw == CON_USERACTOR)
|
||||||
{
|
{
|
||||||
|
@ -2904,12 +2900,12 @@ DO_DEFSTATE:
|
||||||
|
|
||||||
if (tw == CON_EVENTLOADACTOR)
|
if (tw == CON_EVENTLOADACTOR)
|
||||||
{
|
{
|
||||||
g_tile[*g_scriptPtr].loadPtr = apScript + g_parsingActorPtr;
|
g_tile[*g_scriptPtr].loadPtr = apScript + g_scriptActorOffset;
|
||||||
g_checkingIfElse = 0;
|
g_checkingIfElse = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_tile[*g_scriptPtr].execPtr = apScript + g_parsingActorPtr;
|
g_tile[*g_scriptPtr].execPtr = apScript + g_scriptActorOffset;
|
||||||
|
|
||||||
if (tw == CON_USERACTOR)
|
if (tw == CON_USERACTOR)
|
||||||
{
|
{
|
||||||
|
@ -2920,7 +2916,7 @@ DO_DEFSTATE:
|
||||||
|
|
||||||
for (j=0; j<4; j++)
|
for (j=0; j<4; j++)
|
||||||
{
|
{
|
||||||
scriptWriteAtOffset(0, apScript+g_parsingActorPtr+j);
|
scriptWriteAtOffset(0, apScript+g_scriptActorOffset+j);
|
||||||
if (j == 3)
|
if (j == 3)
|
||||||
{
|
{
|
||||||
j = 0;
|
j = 0;
|
||||||
|
@ -2962,9 +2958,9 @@ DO_DEFSTATE:
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_scriptPtr[-1] >= (intptr_t)apScript && g_scriptPtr[-1] < (intptr_t)&apScript[g_scriptSize])
|
if (g_scriptPtr[-1] >= (intptr_t)apScript && g_scriptPtr[-1] < (intptr_t)&apScript[g_scriptSize])
|
||||||
scriptWritePointer(g_scriptPtr[-1], apScript + g_parsingActorPtr + j);
|
scriptWritePointer(g_scriptPtr[-1], apScript + g_scriptActorOffset + j);
|
||||||
else
|
else
|
||||||
scriptWriteAtOffset(g_scriptPtr[-1], apScript + g_parsingActorPtr + j);
|
scriptWriteAtOffset(g_scriptPtr[-1], apScript + g_scriptActorOffset + j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
g_checkingIfElse = 0;
|
g_checkingIfElse = 0;
|
||||||
|
@ -2972,7 +2968,7 @@ DO_DEFSTATE:
|
||||||
|
|
||||||
case CON_ONEVENT:
|
case CON_ONEVENT:
|
||||||
case CON_APPENDEVENT:
|
case CON_APPENDEVENT:
|
||||||
if (EDUKE32_PREDICT_FALSE(g_processingState || g_parsingActorPtr))
|
if (EDUKE32_PREDICT_FALSE(g_processingState || g_scriptActorOffset))
|
||||||
{
|
{
|
||||||
C_ReportError(ERROR_FOUNDWITHIN);
|
C_ReportError(ERROR_FOUNDWITHIN);
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
|
@ -2980,7 +2976,7 @@ DO_DEFSTATE:
|
||||||
|
|
||||||
g_numBraces = 0;
|
g_numBraces = 0;
|
||||||
g_scriptPtr--;
|
g_scriptPtr--;
|
||||||
g_parsingEventPtr = g_parsingActorPtr = g_scriptPtr - apScript;
|
g_scriptEventOffset = g_scriptActorOffset = g_scriptPtr - apScript;
|
||||||
|
|
||||||
C_SkipComments();
|
C_SkipComments();
|
||||||
j = 0;
|
j = 0;
|
||||||
|
@ -3007,20 +3003,20 @@ DO_DEFSTATE:
|
||||||
// if event has already been declared then store previous script location
|
// if event has already been declared then store previous script location
|
||||||
if (!apScriptEvents[j])
|
if (!apScriptEvents[j])
|
||||||
{
|
{
|
||||||
apScriptEvents[j] = g_parsingEventPtr;
|
apScriptEvents[j] = g_scriptEventOffset;
|
||||||
}
|
}
|
||||||
else if (tw == CON_ONEVENT)
|
else if (tw == CON_ONEVENT)
|
||||||
{
|
{
|
||||||
previous_event = apScriptEvents[j];
|
g_scriptEventChainOffset = apScriptEvents[j];
|
||||||
apScriptEvents[j] = g_parsingEventPtr;
|
apScriptEvents[j] = g_scriptEventOffset;
|
||||||
}
|
}
|
||||||
else // if (tw == CON_APPENDEVENT)
|
else // if (tw == CON_APPENDEVENT)
|
||||||
{
|
{
|
||||||
auto previous_event_end = apScript + apScriptGameEventEnd[j];
|
auto previous_event_end = apScript + apScriptGameEventEnd[j];
|
||||||
scriptWriteAtOffset(CON_JUMP | (g_lineNumber << 12), previous_event_end++);
|
scriptWriteAtOffset(CON_JUMP | (g_lineNumber << 12), previous_event_end++);
|
||||||
scriptWriteAtOffset(GV_FLAG_CONSTANT, previous_event_end++);
|
scriptWriteAtOffset(GV_FLAG_CONSTANT, previous_event_end++);
|
||||||
C_FillEventBreakStackWithJump((intptr_t *)*previous_event_end, g_parsingEventPtr);
|
C_FillEventBreakStackWithJump((intptr_t *)*previous_event_end, g_scriptEventOffset);
|
||||||
scriptWriteAtOffset(g_parsingEventPtr, previous_event_end++);
|
scriptWriteAtOffset(g_scriptEventOffset, previous_event_end++);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_checkingIfElse = 0;
|
g_checkingIfElse = 0;
|
||||||
|
@ -3035,7 +3031,7 @@ DO_DEFSTATE:
|
||||||
while (C_GetKeyword() == -1 && j < 32)
|
while (C_GetKeyword() == -1 && j < 32)
|
||||||
C_GetNextVar(), j++;
|
C_GetNextVar(), j++;
|
||||||
|
|
||||||
scriptWriteValue(CON_NULLOP + (g_lineNumber<<12));
|
scriptWriteValue(CON_NULLOP | (g_lineNumber<<12));
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case CON_CSTAT:
|
case CON_CSTAT:
|
||||||
|
@ -3141,7 +3137,7 @@ DO_DEFSTATE:
|
||||||
|
|
||||||
intptr_t const lastScriptPtr = &g_scriptPtr[-1] - apScript;
|
intptr_t const lastScriptPtr = &g_scriptPtr[-1] - apScript;
|
||||||
|
|
||||||
g_ifElseAborted = 0;
|
g_skipBranch = false;
|
||||||
g_checkingIfElse--;
|
g_checkingIfElse--;
|
||||||
|
|
||||||
if (C_CheckMalformedBranch(lastScriptPtr))
|
if (C_CheckMalformedBranch(lastScriptPtr))
|
||||||
|
@ -3630,7 +3626,9 @@ DO_DEFSTATE:
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#ifdef DYNSOUNDREMAP_ENABLE
|
#ifdef DYNSOUNDREMAP_ENABLE
|
||||||
|
#ifdef DEBUGGINGAIDS
|
||||||
initprintf("Using dynamic sound remapping\n");
|
initprintf("Using dynamic sound remapping\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
g_dynamicSoundMapping = 1;
|
g_dynamicSoundMapping = 1;
|
||||||
#else
|
#else
|
||||||
|
@ -3674,21 +3672,21 @@ DO_DEFSTATE:
|
||||||
|
|
||||||
if (i == -1)
|
if (i == -1)
|
||||||
{
|
{
|
||||||
*inst = CON_INV+(g_lineNumber<<12);
|
*inst = CON_INV | (g_lineNumber<<12);
|
||||||
g_scriptPtr--;
|
g_scriptPtr--;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (C_IntPow2(j))
|
if (C_IntPow2(j))
|
||||||
{
|
{
|
||||||
*inst = ((tw == CON_DIVVAR) ? CON_SHIFTVARR : CON_SHIFTVARL)+(g_lineNumber<<12);
|
*inst = ((tw == CON_DIVVAR) ? CON_SHIFTVARR : CON_SHIFTVARL) | (g_lineNumber<<12);
|
||||||
g_scriptPtr[-1] = C_Pow2IntLogBase2(j);
|
g_scriptPtr[-1] = C_Pow2IntLogBase2(j);
|
||||||
// initprintf("%s:%d: replacing multiply/divide with shift\n",g_szScriptFileName,g_lineNumber);
|
// initprintf("%s:%d: replacing multiply/divide with shift\n",g_szScriptFileName,g_lineNumber);
|
||||||
|
|
||||||
if (i == j)
|
if (i == j)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
scriptWriteValue(CON_INV+(g_lineNumber<<12));
|
scriptWriteValue(CON_INV | (g_lineNumber<<12));
|
||||||
textptr = tptr;
|
textptr = tptr;
|
||||||
C_GetNextVarType(GAMEVAR_READONLY);
|
C_GetNextVarType(GAMEVAR_READONLY);
|
||||||
C_GetNextValue(LABEL_DEFINE);
|
C_GetNextValue(LABEL_DEFINE);
|
||||||
|
@ -3910,7 +3908,7 @@ DO_DEFSTATE:
|
||||||
{
|
{
|
||||||
int32_t y, z;
|
int32_t y, z;
|
||||||
|
|
||||||
if (EDUKE32_PREDICT_FALSE(g_processingState || g_parsingActorPtr))
|
if (EDUKE32_PREDICT_FALSE(g_processingState || g_scriptActorOffset))
|
||||||
{
|
{
|
||||||
C_ReportError(ERROR_FOUNDWITHIN);
|
C_ReportError(ERROR_FOUNDWITHIN);
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
|
@ -3939,7 +3937,7 @@ DO_DEFSTATE:
|
||||||
|
|
||||||
case CON_DAMAGEEVENTTILE:
|
case CON_DAMAGEEVENTTILE:
|
||||||
{
|
{
|
||||||
if (EDUKE32_PREDICT_FALSE(g_processingState || g_parsingActorPtr))
|
if (EDUKE32_PREDICT_FALSE(g_processingState || g_scriptActorOffset))
|
||||||
{
|
{
|
||||||
C_ReportError(ERROR_FOUNDWITHIN);
|
C_ReportError(ERROR_FOUNDWITHIN);
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
|
@ -3964,7 +3962,7 @@ DO_DEFSTATE:
|
||||||
|
|
||||||
case CON_DAMAGEEVENTTILERANGE:
|
case CON_DAMAGEEVENTTILERANGE:
|
||||||
{
|
{
|
||||||
if (EDUKE32_PREDICT_FALSE(g_processingState || g_parsingActorPtr))
|
if (EDUKE32_PREDICT_FALSE(g_processingState || g_scriptActorOffset))
|
||||||
{
|
{
|
||||||
C_ReportError(ERROR_FOUNDWITHIN);
|
C_ReportError(ERROR_FOUNDWITHIN);
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
|
@ -3991,7 +3989,7 @@ DO_DEFSTATE:
|
||||||
}
|
}
|
||||||
|
|
||||||
case CON_SPRITEFLAGS:
|
case CON_SPRITEFLAGS:
|
||||||
if (!g_parsingActorPtr && g_processingState == 0)
|
if (!g_scriptActorOffset && g_processingState == 0)
|
||||||
{
|
{
|
||||||
g_scriptPtr--;
|
g_scriptPtr--;
|
||||||
|
|
||||||
|
@ -4023,7 +4021,7 @@ DO_DEFSTATE:
|
||||||
case CON_SPRITENOSHADE:
|
case CON_SPRITENOSHADE:
|
||||||
case CON_SPRITENVG:
|
case CON_SPRITENVG:
|
||||||
case CON_SPRITESHADOW:
|
case CON_SPRITESHADOW:
|
||||||
if (EDUKE32_PREDICT_FALSE(g_processingState || g_parsingActorPtr))
|
if (EDUKE32_PREDICT_FALSE(g_processingState || g_scriptActorOffset))
|
||||||
{
|
{
|
||||||
C_ReportError(ERROR_FOUNDWITHIN);
|
C_ReportError(ERROR_FOUNDWITHIN);
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
|
@ -4097,7 +4095,7 @@ DO_DEFSTATE:
|
||||||
{
|
{
|
||||||
intptr_t const lastScriptPtr = &g_scriptPtr[-1] - apScript;
|
intptr_t const lastScriptPtr = &g_scriptPtr[-1] - apScript;
|
||||||
|
|
||||||
g_ifElseAborted = 0;
|
g_skipBranch = false;
|
||||||
|
|
||||||
C_GetManyVars(2);
|
C_GetManyVars(2);
|
||||||
|
|
||||||
|
@ -4150,7 +4148,7 @@ DO_DEFSTATE:
|
||||||
{
|
{
|
||||||
intptr_t const lastScriptPtr = &g_scriptPtr[-1] - apScript;
|
intptr_t const lastScriptPtr = &g_scriptPtr[-1] - apScript;
|
||||||
|
|
||||||
g_ifElseAborted = 0;
|
g_skipBranch = false;
|
||||||
// get the ID of the DEF
|
// get the ID of the DEF
|
||||||
C_GetNextVar();
|
C_GetNextVar();
|
||||||
C_GetNextValue(LABEL_DEFINE); // the number to check against...
|
C_GetNextValue(LABEL_DEFINE); // the number to check against...
|
||||||
|
@ -4211,7 +4209,7 @@ DO_DEFSTATE:
|
||||||
|
|
||||||
case CON_ROTATESPRITE16:
|
case CON_ROTATESPRITE16:
|
||||||
case CON_ROTATESPRITE:
|
case CON_ROTATESPRITE:
|
||||||
if (EDUKE32_PREDICT_FALSE(!g_parsingEventPtr && g_processingState == 0))
|
if (EDUKE32_PREDICT_FALSE(!g_scriptEventOffset && g_processingState == 0))
|
||||||
{
|
{
|
||||||
C_ReportError(ERROR_EVENTONLY);
|
C_ReportError(ERROR_EVENTONLY);
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
|
@ -4227,7 +4225,7 @@ DO_DEFSTATE:
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case CON_ROTATESPRITEA:
|
case CON_ROTATESPRITEA:
|
||||||
if (EDUKE32_PREDICT_FALSE(!g_parsingEventPtr && g_processingState == 0))
|
if (EDUKE32_PREDICT_FALSE(!g_scriptEventOffset && g_processingState == 0))
|
||||||
{
|
{
|
||||||
C_ReportError(ERROR_EVENTONLY);
|
C_ReportError(ERROR_EVENTONLY);
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
|
@ -4240,7 +4238,7 @@ DO_DEFSTATE:
|
||||||
case CON_SHOWVIEWUNBIASED:
|
case CON_SHOWVIEWUNBIASED:
|
||||||
case CON_SHOWVIEWQ16:
|
case CON_SHOWVIEWQ16:
|
||||||
case CON_SHOWVIEWQ16UNBIASED:
|
case CON_SHOWVIEWQ16UNBIASED:
|
||||||
if (EDUKE32_PREDICT_FALSE(!g_parsingEventPtr && g_processingState == 0))
|
if (EDUKE32_PREDICT_FALSE(!g_scriptEventOffset && g_processingState == 0))
|
||||||
{
|
{
|
||||||
C_ReportError(ERROR_EVENTONLY);
|
C_ReportError(ERROR_EVENTONLY);
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
|
@ -4313,7 +4311,7 @@ DO_DEFSTATE:
|
||||||
case CON_GAMETEXTZ:
|
case CON_GAMETEXTZ:
|
||||||
case CON_MINITEXT:
|
case CON_MINITEXT:
|
||||||
case CON_SCREENTEXT:
|
case CON_SCREENTEXT:
|
||||||
if (EDUKE32_PREDICT_FALSE(!g_parsingEventPtr && g_processingState == 0))
|
if (EDUKE32_PREDICT_FALSE(!g_scriptEventOffset && g_processingState == 0))
|
||||||
{
|
{
|
||||||
C_ReportError(ERROR_EVENTONLY);
|
C_ReportError(ERROR_EVENTONLY);
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
|
@ -4342,7 +4340,7 @@ DO_DEFSTATE:
|
||||||
case CON_MYOSPAL:
|
case CON_MYOSPAL:
|
||||||
case CON_MYOSX:
|
case CON_MYOSX:
|
||||||
case CON_MYOSPALX:
|
case CON_MYOSPALX:
|
||||||
if (EDUKE32_PREDICT_FALSE(!g_parsingEventPtr && g_processingState == 0))
|
if (EDUKE32_PREDICT_FALSE(!g_scriptEventOffset && g_processingState == 0))
|
||||||
{
|
{
|
||||||
C_ReportError(ERROR_EVENTONLY);
|
C_ReportError(ERROR_EVENTONLY);
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
|
@ -4372,8 +4370,8 @@ DO_DEFSTATE:
|
||||||
scriptWriteValue(0); // leave spot for end location (for after processing)
|
scriptWriteValue(0); // leave spot for end location (for after processing)
|
||||||
scriptWriteValue(0); // count of case statements
|
scriptWriteValue(0); // count of case statements
|
||||||
|
|
||||||
auto const backupCaseScriptPtr = g_caseScriptPtr;
|
auto const backupCaseScriptPtr = g_caseTablePtr;
|
||||||
g_caseScriptPtr=g_scriptPtr; // the first case's pointer.
|
g_caseTablePtr=g_scriptPtr; // the first case's pointer.
|
||||||
|
|
||||||
int const backupNumCases = g_numCases;
|
int const backupNumCases = g_numCases;
|
||||||
|
|
||||||
|
@ -4462,7 +4460,7 @@ DO_DEFSTATE:
|
||||||
//Bsprintf(g_szBuf,"ERROR::%s %d",__FILE__,__LINE__);
|
//Bsprintf(g_szBuf,"ERROR::%s %d",__FILE__,__LINE__);
|
||||||
//AddLog(g_szBuf);
|
//AddLog(g_szBuf);
|
||||||
}
|
}
|
||||||
g_caseScriptPtr=backupCaseScriptPtr;
|
g_caseTablePtr=backupCaseScriptPtr;
|
||||||
g_numCases=backupNumCases;
|
g_numCases=backupNumCases;
|
||||||
//AddLog("End of Switch statement");
|
//AddLog("End of Switch statement");
|
||||||
}
|
}
|
||||||
|
@ -4484,7 +4482,7 @@ DO_DEFSTATE:
|
||||||
intptr_t tempoffset = 0;
|
intptr_t tempoffset = 0;
|
||||||
intptr_t *tempscrptr = g_scriptPtr;
|
intptr_t *tempscrptr = g_scriptPtr;
|
||||||
|
|
||||||
g_checkingCase++;
|
g_checkingCase = true;
|
||||||
repeatcase:
|
repeatcase:
|
||||||
g_scriptPtr--;
|
g_scriptPtr--;
|
||||||
|
|
||||||
|
@ -4504,30 +4502,30 @@ repeatcase:
|
||||||
|
|
||||||
C_SkipComments();
|
C_SkipComments();
|
||||||
|
|
||||||
if (g_caseScriptPtr)
|
if (g_caseTablePtr)
|
||||||
{
|
{
|
||||||
if (tw == CON_DEFAULT)
|
if (tw == CON_DEFAULT)
|
||||||
{
|
{
|
||||||
if (EDUKE32_PREDICT_FALSE(g_caseScriptPtr[0] != 0))
|
if (EDUKE32_PREDICT_FALSE(g_caseTablePtr[0] != 0))
|
||||||
{
|
{
|
||||||
// duplicate default statement
|
// duplicate default statement
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
C_ReportError(-1);
|
C_ReportError(-1);
|
||||||
initprintf("%s:%d: error: multiple `default' statements found in switch\n", g_scriptFileName, g_lineNumber);
|
initprintf("%s:%d: error: multiple `default' statements found in switch\n", g_scriptFileName, g_lineNumber);
|
||||||
}
|
}
|
||||||
g_caseScriptPtr[0]=(intptr_t) (g_scriptPtr-apScript); // save offset
|
g_caseTablePtr[0]=(intptr_t) (g_scriptPtr-apScript); // save offset
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (i=(g_numCases/2)-1; i>=0; i--)
|
for (i=(g_numCases/2)-1; i>=0; i--)
|
||||||
if (EDUKE32_PREDICT_FALSE(g_caseScriptPtr[i*2+1]==j))
|
if (EDUKE32_PREDICT_FALSE(g_caseTablePtr[i*2+1]==j))
|
||||||
{
|
{
|
||||||
g_warningCnt++;
|
g_warningCnt++;
|
||||||
C_ReportError(WARNING_DUPLICATECASE);
|
C_ReportError(WARNING_DUPLICATECASE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
g_caseScriptPtr[g_numCases++]=j;
|
g_caseTablePtr[g_numCases++]=j;
|
||||||
g_caseScriptPtr[g_numCases]=(intptr_t) ((intptr_t *) g_scriptPtr-apScript);
|
g_caseTablePtr[g_numCases]=(intptr_t) ((intptr_t *) g_scriptPtr-apScript);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4561,7 +4559,7 @@ repeatcase:
|
||||||
|
|
||||||
case CON_ENDSWITCH:
|
case CON_ENDSWITCH:
|
||||||
//AddLog("End Switch");
|
//AddLog("End Switch");
|
||||||
if (g_caseScriptPtr)
|
if (g_caseTablePtr)
|
||||||
{
|
{
|
||||||
if (EDUKE32_PREDICT_FALSE(g_checkingCase))
|
if (EDUKE32_PREDICT_FALSE(g_checkingCase))
|
||||||
{
|
{
|
||||||
|
@ -4624,7 +4622,7 @@ repeatcase:
|
||||||
{
|
{
|
||||||
auto const lastScriptPtr = &g_scriptPtr[-1] - apScript;
|
auto const lastScriptPtr = &g_scriptPtr[-1] - apScript;
|
||||||
|
|
||||||
g_ifElseAborted = 0;
|
g_skipBranch = false;
|
||||||
|
|
||||||
switch (tw)
|
switch (tw)
|
||||||
{
|
{
|
||||||
|
@ -4712,7 +4710,7 @@ repeatcase:
|
||||||
{
|
{
|
||||||
auto const lastScriptPtr = &g_scriptPtr[-1] - apScript;
|
auto const lastScriptPtr = &g_scriptPtr[-1] - apScript;
|
||||||
|
|
||||||
g_ifElseAborted = 0;
|
g_skipBranch = false;
|
||||||
|
|
||||||
if (C_CheckMalformedBranch(lastScriptPtr))
|
if (C_CheckMalformedBranch(lastScriptPtr))
|
||||||
continue;
|
continue;
|
||||||
|
@ -4738,7 +4736,7 @@ repeatcase:
|
||||||
}
|
}
|
||||||
|
|
||||||
case CON_LEFTBRACE:
|
case CON_LEFTBRACE:
|
||||||
if (EDUKE32_PREDICT_FALSE(!(g_processingState || g_parsingActorPtr || g_parsingEventPtr)))
|
if (EDUKE32_PREDICT_FALSE(!(g_processingState || g_scriptActorOffset || g_scriptEventOffset)))
|
||||||
{
|
{
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
C_ReportError(ERROR_SYNTAXERROR);
|
C_ReportError(ERROR_SYNTAXERROR);
|
||||||
|
@ -4755,12 +4753,12 @@ repeatcase:
|
||||||
((g_scriptPtr[-2] & VM_INSTMASK) == CON_LEFTBRACE)) // rewrite "{ }" into "nullop"
|
((g_scriptPtr[-2] & VM_INSTMASK) == CON_LEFTBRACE)) // rewrite "{ }" into "nullop"
|
||||||
{
|
{
|
||||||
// initprintf("%s:%d: rewriting empty braces '{ }' as 'nullop' from right\n",g_szScriptFileName,g_lineNumber);
|
// initprintf("%s:%d: rewriting empty braces '{ }' as 'nullop' from right\n",g_szScriptFileName,g_lineNumber);
|
||||||
g_scriptPtr[-2] = CON_NULLOP + (IFELSE_MAGIC<<12);
|
g_scriptPtr[-2] = CON_NULLOP | (IFELSE_MAGIC<<12);
|
||||||
g_scriptPtr -= 2;
|
g_scriptPtr -= 2;
|
||||||
|
|
||||||
if (C_GetKeyword() != CON_ELSE && (g_scriptPtr[-2] & VM_INSTMASK) != CON_ELSE)
|
if (C_GetKeyword() != CON_ELSE && (g_scriptPtr[-2] & VM_INSTMASK) != CON_ELSE)
|
||||||
g_ifElseAborted = 1;
|
g_skipBranch = true;
|
||||||
else g_ifElseAborted = 0;
|
else g_skipBranch = false;
|
||||||
|
|
||||||
j = C_GetKeyword();
|
j = C_GetKeyword();
|
||||||
|
|
||||||
|
@ -5440,7 +5438,7 @@ repeatcase:
|
||||||
|
|
||||||
case CON_ENDEVENT:
|
case CON_ENDEVENT:
|
||||||
|
|
||||||
if (EDUKE32_PREDICT_FALSE(!g_parsingEventPtr))
|
if (EDUKE32_PREDICT_FALSE(!g_scriptEventOffset))
|
||||||
{
|
{
|
||||||
C_ReportError(-1);
|
C_ReportError(-1);
|
||||||
initprintf("%s:%d: error: found `endevent' without open `onevent'.\n",g_scriptFileName,g_lineNumber);
|
initprintf("%s:%d: error: found `endevent' without open `onevent'.\n",g_scriptFileName,g_lineNumber);
|
||||||
|
@ -5452,53 +5450,53 @@ repeatcase:
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
}
|
}
|
||||||
// if event has already been declared then put a jump in instead
|
// if event has already been declared then put a jump in instead
|
||||||
if (previous_event)
|
if (g_scriptEventChainOffset)
|
||||||
{
|
{
|
||||||
g_scriptPtr--;
|
g_scriptPtr--;
|
||||||
scriptWriteValue(CON_JUMP | (g_lineNumber << 12));
|
scriptWriteValue(CON_JUMP | (g_lineNumber << 12));
|
||||||
scriptWriteValue(GV_FLAG_CONSTANT);
|
scriptWriteValue(GV_FLAG_CONSTANT);
|
||||||
scriptWriteValue(previous_event);
|
scriptWriteValue(g_scriptEventChainOffset);
|
||||||
scriptWriteValue(CON_ENDEVENT | (g_lineNumber << 12));
|
scriptWriteValue(CON_ENDEVENT | (g_lineNumber << 12));
|
||||||
|
|
||||||
C_FillEventBreakStackWithJump((intptr_t *)g_parsingEventBreakPtr, previous_event);
|
C_FillEventBreakStackWithJump((intptr_t *)g_scriptEventBreakOffset, g_scriptEventChainOffset);
|
||||||
|
|
||||||
previous_event = 0;
|
g_scriptEventChainOffset = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// pad space for the next potential appendevent
|
// pad space for the next potential appendevent
|
||||||
apScriptGameEventEnd[g_currentEvent] = &g_scriptPtr[-1] - apScript;
|
apScriptGameEventEnd[g_currentEvent] = &g_scriptPtr[-1] - apScript;
|
||||||
scriptWriteValue(CON_ENDEVENT | (g_lineNumber << 12));
|
scriptWriteValue(CON_ENDEVENT | (g_lineNumber << 12));
|
||||||
scriptWriteValue(g_parsingEventBreakPtr);
|
scriptWriteValue(g_scriptEventBreakOffset);
|
||||||
scriptWriteValue(CON_ENDEVENT | (g_lineNumber << 12));
|
scriptWriteValue(CON_ENDEVENT | (g_lineNumber << 12));
|
||||||
}
|
}
|
||||||
|
|
||||||
g_parsingEventBreakPtr = g_parsingEventPtr = g_parsingActorPtr = 0;
|
g_scriptEventBreakOffset = g_scriptEventOffset = g_scriptActorOffset = 0;
|
||||||
g_currentEvent = -1;
|
g_currentEvent = -1;
|
||||||
Bsprintf(g_szCurrentBlockName,"(none)");
|
Bsprintf(g_szCurrentBlockName,"(none)");
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case CON_ENDA:
|
case CON_ENDA:
|
||||||
if (EDUKE32_PREDICT_FALSE(!g_parsingActorPtr || g_parsingEventPtr))
|
if (EDUKE32_PREDICT_FALSE(!g_scriptActorOffset || g_scriptEventOffset))
|
||||||
{
|
{
|
||||||
C_ReportError(-1);
|
C_ReportError(-1);
|
||||||
initprintf("%s:%d: error: found `enda' without open `actor'.\n",g_scriptFileName,g_lineNumber);
|
initprintf("%s:%d: error: found `enda' without open `actor'.\n",g_scriptFileName,g_lineNumber);
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
g_parsingEventPtr = 0;
|
g_scriptEventOffset = 0;
|
||||||
}
|
}
|
||||||
if (EDUKE32_PREDICT_FALSE(g_numBraces > 0))
|
if (EDUKE32_PREDICT_FALSE(g_numBraces > 0))
|
||||||
{
|
{
|
||||||
C_ReportError(ERROR_NOTTOPLEVEL);
|
C_ReportError(ERROR_NOTTOPLEVEL);
|
||||||
g_errorCnt++;
|
g_errorCnt++;
|
||||||
}
|
}
|
||||||
g_parsingActorPtr = 0;
|
g_scriptActorOffset = 0;
|
||||||
Bsprintf(g_szCurrentBlockName,"(none)");
|
Bsprintf(g_szCurrentBlockName,"(none)");
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case CON_RETURN:
|
case CON_RETURN:
|
||||||
if (g_checkingSwitch)
|
if (g_checkingSwitch)
|
||||||
{
|
{
|
||||||
g_checkingCase = 0;
|
g_checkingCase = false;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
@ -5515,16 +5513,16 @@ repeatcase:
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_checkingCase = 0;
|
g_checkingCase = false;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else if (g_parsingEventPtr)
|
else if (g_scriptEventOffset)
|
||||||
{
|
{
|
||||||
g_scriptPtr--;
|
g_scriptPtr--;
|
||||||
scriptWriteValue(CON_JUMP | (g_lineNumber << 12));
|
scriptWriteValue(CON_JUMP | (g_lineNumber << 12));
|
||||||
scriptWriteValue(GV_FLAG_CONSTANT);
|
scriptWriteValue(GV_FLAG_CONSTANT);
|
||||||
scriptWriteValue(g_parsingEventBreakPtr);
|
scriptWriteValue(g_scriptEventBreakOffset);
|
||||||
g_parsingEventBreakPtr = &g_scriptPtr[-1] - apScript;
|
g_scriptEventBreakOffset = &g_scriptPtr[-1] - apScript;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -5577,7 +5575,7 @@ repeatcase:
|
||||||
g_warningCnt++;
|
g_warningCnt++;
|
||||||
initprintf("%s:%d: warning: `nullop' found without `else'\n",g_scriptFileName,g_lineNumber);
|
initprintf("%s:%d: warning: `nullop' found without `else'\n",g_scriptFileName,g_lineNumber);
|
||||||
g_scriptPtr--;
|
g_scriptPtr--;
|
||||||
g_ifElseAborted = 1;
|
g_skipBranch = true;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -6035,8 +6033,8 @@ void C_ReportError(int error)
|
||||||
{
|
{
|
||||||
if (Bstrcmp(g_szCurrentBlockName,g_szLastBlockName))
|
if (Bstrcmp(g_szCurrentBlockName,g_szLastBlockName))
|
||||||
{
|
{
|
||||||
if (g_parsingEventPtr || g_processingState || g_parsingActorPtr)
|
if (g_scriptEventOffset || g_processingState || g_scriptActorOffset)
|
||||||
initprintf("%s: In %s `%s':\n",g_scriptFileName,g_parsingEventPtr?"event":g_parsingActorPtr?"actor":"state",g_szCurrentBlockName);
|
initprintf("%s: In %s `%s':\n",g_scriptFileName,g_scriptEventOffset?"event":g_scriptActorOffset?"actor":"state",g_szCurrentBlockName);
|
||||||
else initprintf("%s: At top level:\n",g_scriptFileName);
|
else initprintf("%s: At top level:\n",g_scriptFileName);
|
||||||
Bstrcpy(g_szLastBlockName,g_szCurrentBlockName);
|
Bstrcpy(g_szLastBlockName,g_szCurrentBlockName);
|
||||||
}
|
}
|
||||||
|
@ -6055,7 +6053,7 @@ void C_ReportError(int error)
|
||||||
initprintf("%s:%d: error: expected a keyword but found `%s'.\n",g_scriptFileName,g_lineNumber,tempbuf);
|
initprintf("%s:%d: error: expected a keyword but found `%s'.\n",g_scriptFileName,g_lineNumber,tempbuf);
|
||||||
break;
|
break;
|
||||||
case ERROR_FOUNDWITHIN:
|
case ERROR_FOUNDWITHIN:
|
||||||
initprintf("%s:%d: error: found `%s' within %s.\n",g_scriptFileName,g_lineNumber,tempbuf,g_parsingEventPtr?"an event":g_parsingActorPtr?"an actor":"a state");
|
initprintf("%s:%d: error: found `%s' within %s.\n",g_scriptFileName,g_lineNumber,tempbuf,g_scriptEventOffset?"an event":g_scriptActorOffset?"an actor":"a state");
|
||||||
break;
|
break;
|
||||||
case ERROR_ISAKEYWORD:
|
case ERROR_ISAKEYWORD:
|
||||||
initprintf("%s:%d: error: symbol `%s' is a keyword.\n",g_scriptFileName,g_lineNumber,LAST_LABEL);
|
initprintf("%s:%d: error: symbol `%s' is a keyword.\n",g_scriptFileName,g_lineNumber,LAST_LABEL);
|
||||||
|
|
Loading…
Reference in a new issue