diff --git a/docs/rh-log.txt b/docs/rh-log.txt index c20dfee8c..bc82a4ea5 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,3 +1,8 @@ +November 28, 2006 +- Started adding action function declarations to objects. +- Added integer constant declarations to objects. +- Added a simple symbol table to PClass. + November 27, 2006 (Changes by Graf Zahl) - Changed: When playing a shareware game no external WADs are loaded at all, not even zvox.wad or the skins directory. diff --git a/src/cmdlib.cpp b/src/cmdlib.cpp index 0ea2eacfc..9e64353b0 100644 --- a/src/cmdlib.cpp +++ b/src/cmdlib.cpp @@ -380,3 +380,92 @@ void CreatePath(const char * fn) } else DoCreatePath(fn); } + +// [RH] Replaces the escape sequences in a string with actual escaped characters. +// This operation is done in-place. + +void strbin (char *str) +{ + char *p = str, c; + int i; + + while ( (c = *p++) ) { + if (c != '\\') { + *str++ = c; + } else { + switch (*p) { + case 'a': + *str++ = '\a'; + break; + case 'b': + *str++ = '\b'; + break; + case 'c': + *str++ = '\034'; // TEXTCOLOR_ESCAPE + break; + case 'f': + *str++ = '\f'; + break; + case 'n': + *str++ = '\n'; + break; + case 't': + *str++ = '\t'; + break; + case 'r': + *str++ = '\r'; + break; + case 'v': + *str++ = '\v'; + break; + case '?': + *str++ = '\?'; + break; + case '\n': + break; + case 'x': + case 'X': + c = 0; + p++; + for (i = 0; i < 2; i++) { + c <<= 4; + if (*p >= '0' && *p <= '9') + c += *p-'0'; + else if (*p >= 'a' && *p <= 'f') + c += 10 + *p-'a'; + else if (*p >= 'A' && *p <= 'F') + c += 10 + *p-'A'; + else + break; + p++; + } + *str++ = c; + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + c = 0; + for (i = 0; i < 3; i++) { + c <<= 3; + if (*p >= '0' && *p <= '7') + c += *p-'0'; + else + break; + p++; + } + *str++ = c; + break; + default: + *str++ = *p; + break; + } + p++; + } + } + *str = 0; +} diff --git a/src/cmdlib.h b/src/cmdlib.h index 33fc20615..6c65b0610 100644 --- a/src/cmdlib.h +++ b/src/cmdlib.h @@ -51,6 +51,8 @@ void FormatGUID (char *text, const GUID &guid); char *myasctime (); +void strbin (char *str); + void CreatePath(const char * fn); #endif diff --git a/src/decallib.cpp b/src/decallib.cpp index fcc7c4d87..857ee609e 100644 --- a/src/decallib.cpp +++ b/src/decallib.cpp @@ -1394,5 +1394,5 @@ DThinker *FDecalColorerAnim::CreateThinker (DBaseDecal *actor, side_t *wall) con static fixed_t ReadScale () { SC_MustGetFloat (); - return fixed_t(clamp (sc_Float * FRACUNIT, 256.f, 256.f*FRACUNIT)); + return fixed_t(clamp (sc_Float * FRACUNIT, 256.0, 256.0*FRACUNIT)); } diff --git a/src/decorations.cpp b/src/decorations.cpp index a3ff8ebb3..cb13927bd 100644 --- a/src/decorations.cpp +++ b/src/decorations.cpp @@ -664,7 +664,7 @@ static void ParseInsideDecoration (FActorInfo *info, AActor *defaults, else if (SC_Compare ("Alpha")) { SC_MustGetFloat (); - defaults->alpha = int(clamp (sc_Float, 0.f, 1.f) * OPAQUE); + defaults->alpha = int(clamp (sc_Float, 0.0, 1.0) * OPAQUE); } else if (SC_Compare ("Scale")) { diff --git a/src/dobjtype.cpp b/src/dobjtype.cpp index f3c38fcff..b00a38897 100644 --- a/src/dobjtype.cpp +++ b/src/dobjtype.cpp @@ -221,6 +221,7 @@ PClass *PClass::CreateDerivedClass (FName name, unsigned int size) type->FlatPointers = NULL; type->bRuntimeClass = true; type->ActorInfo = NULL; + type->Symbols.SetParentTable (&this->Symbols); type->InsertIntoHash(); // If this class has an actor info, then any classes derived from it @@ -302,3 +303,86 @@ void PClass::FreeStateList () } } +// Symbol tables ------------------------------------------------------------ + +PSymbolTable::PSymbolTable () +: ParentSymbolTable(NULL) +{ +} + +PSymbolTable::~PSymbolTable () +{ + for (unsigned int i = 0; i < Symbols.Size(); ++i) + { + delete Symbols[i]; + } +} + +void PSymbolTable::SetParentTable (PSymbolTable *parent) +{ + ParentSymbolTable = parent; +} + +PSymbol *PSymbolTable::FindSymbol (FName symname, bool searchparents) const +{ + int min, max; + + min = 0; + max = (int)Symbols.Size() - 1; + + while (min <= max) + { + unsigned int mid = (min + max) / 2; + PSymbol *sym = Symbols[mid]; + + if (sym->SymbolName == symname) + { + return sym; + } + else if (sym->SymbolName < symname) + { + min = mid + 1; + } + else + { + max = mid - 1; + } + } + if (searchparents && ParentSymbolTable != NULL) + { + return ParentSymbolTable->FindSymbol (symname, true); + } + return NULL; +} + +PSymbol *PSymbolTable::AddSymbol (PSymbol *sym) +{ + // Insert it in sorted order. + int min, max, mid; + + min = 0; + max = (int)Symbols.Size() - 1; + + while (min <= max) + { + mid = (min + max) / 2; + PSymbol *tsym = Symbols[mid]; + + if (tsym->SymbolName == sym->SymbolName) + { // A symbol with this name already exists in the table + return NULL; + } + else if (tsym->SymbolName < sym->SymbolName) + { + min = mid + 1; + } + else + { + max = mid - 1; + } + } + + // Good. The symbol is not in the table yet. + Symbols.Insert (MAX(min, max), sym); + return sym; +} diff --git a/src/dobjtype.h b/src/dobjtype.h index 53b5dff73..65efafc1b 100644 --- a/src/dobjtype.h +++ b/src/dobjtype.h @@ -5,6 +5,80 @@ #error You must #include "dobject.h" to get dobjtype.h #endif +// Symbol information ------------------------------------------------------- + +enum ESymbolType +{ + SYM_Const, + SYM_ActionFunction +}; + +struct PSymbol +{ + ESymbolType SymbolType; + FName SymbolName; +}; + +// A constant value --------------------------------------------------------- + +struct PSymbolConst : public PSymbol +{ + int Value; +}; + +// An action function ------------------------------------------------------- +// +// The Arguments string is a string of characters as understood by +// the DECORATE parser: +// +// If the letter is uppercase, it is required. Lowercase letters are optional. +// i = integer +// f = fixed point +// s = sound name +// m = actor name +// t = string +// l = jump label +// c = color +// x = expression +// y = expression +// If the final character is a +, the previous parameter is repeated indefinitely, +// and an "imaginary" first parameter is inserted containing the total number of +// parameters passed. + +struct PSymbolActionFunction : public PSymbol +{ + FString Arguments; + void (*Function)(AActor*); +}; + +// A symbol table ----------------------------------------------------------- + +class PSymbolTable +{ +public: + PSymbolTable(); + ~PSymbolTable(); + + // Sets the table to use for searches if this one doesn't contain the + // requested symbol. + void SetParentTable (PSymbolTable *parent); + + // Finds a symbol in the table, optionally searching parent tables + // as well. + PSymbol *FindSymbol (FName symname, bool searchparents) const; + + // Places the symbol in the table and returns a pointer to it or NULL if + // a symbol with the same name is already in the table. This symbol is + // not copied and will be freed when the symbol table is destroyed. + PSymbol *AddSymbol (PSymbol *sym); + +private: + PSymbolTable *ParentSymbolTable; + TArray Symbols; +}; + +// Meta-info for every class derived from DObject --------------------------- + struct PClass { static void StaticInit (); @@ -23,6 +97,7 @@ struct PClass BYTE *Defaults; bool bRuntimeClass; // class was defined at run-time, not compile-time unsigned short ClassIndex; + PSymbolTable Symbols; void (*ConstructNative)(void *); diff --git a/src/namedef.h b/src/namedef.h index 3b95d34d2..519c9a415 100644 --- a/src/namedef.h +++ b/src/namedef.h @@ -3,6 +3,7 @@ xx(None) xx(Super) xx(Object) +xx(Actor) xx(Untranslated) @@ -178,4 +179,22 @@ xx(Massacre) // For death by a cheater! // a damage type if you wanted to force an extreme death. xx(Extreme) - +// Special names for thingdef_exp.cpp +xx(Random) +xx(Random2) +xx(Cos) +xx(Sin) +xx(Alpha) +xx(Angle) +xx(Args) +xx(CeilingZ) +xx(FloorZ) +xx(Health) +xx(Pitch) +xx(Special) +xx(TID) +xx(TIDtoHate) +xx(WaterLevel) +xx(X) +xx(Y) +xx(Z) diff --git a/src/p_acs.cpp b/src/p_acs.cpp index d23abcd40..f15b21ca5 100644 --- a/src/p_acs.cpp +++ b/src/p_acs.cpp @@ -1479,8 +1479,6 @@ void FBehavior::StaticStopMyScripts (AActor *actor) //---- The ACS Interpreter ----// -void strbin (char *str); - IMPLEMENT_CLASS (DACSThinker) DACSThinker *DACSThinker::ActiveThinker = NULL; @@ -5288,77 +5286,6 @@ void P_TerminateScript (int script, char *map) SetScriptState (script, DLevelScript::SCRIPT_PleaseRemove); } -void strbin (char *str) -{ - char *p = str, c; - int i; - - while ( (c = *p++) ) { - if (c != '\\') { - *str++ = c; - } else { - switch (*p) { - case 'c': - *str++ = TEXTCOLOR_ESCAPE; - break; - case 'n': - *str++ = '\n'; - break; - case 't': - *str++ = '\t'; - break; - case 'r': - *str++ = '\r'; - break; - case '\n': - break; - case 'x': - case 'X': - c = 0; - p++; - for (i = 0; i < 2; i++) { - c <<= 4; - if (*p >= '0' && *p <= '9') - c += *p-'0'; - else if (*p >= 'a' && *p <= 'f') - c += 10 + *p-'a'; - else if (*p >= 'A' && *p <= 'F') - c += 10 + *p-'A'; - else - break; - p++; - } - *str++ = c; - break; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - c = 0; - for (i = 0; i < 3; i++) { - c <<= 3; - if (*p >= '0' && *p <= '7') - c += *p-'0'; - else - break; - p++; - } - *str++ = c; - break; - default: - *str++ = *p; - break; - } - p++; - } - } - *str = 0; -} - FArchive &operator<< (FArchive &arc, acsdefered_s *&defertop) { BYTE more; diff --git a/src/s_environment.cpp b/src/s_environment.cpp index fe96e15d7..999af699b 100644 --- a/src/s_environment.cpp +++ b/src/s_environment.cpp @@ -491,8 +491,8 @@ static void ReadEAX () { SC_MustGetFloat (); props.*EAXFields[i].Float = clamp (sc_Float, - float(EAXFields[i].Min)/1000.f, - float(EAXFields[i].Max)/1000.f); + double(EAXFields[i].Min)/1000, + double(EAXFields[i].Max)/1000); } else if (EAXFields[i].Int) { diff --git a/src/sc_man.cpp b/src/sc_man.cpp index 5d980bbd2..9f1ad207c 100644 --- a/src/sc_man.cpp +++ b/src/sc_man.cpp @@ -45,16 +45,19 @@ // PRIVATE FUNCTION PROTOTYPES --------------------------------------------- static void SC_PrepareScript (void); +static bool SC_ScanString (bool tokens); static void CheckOpen (void); // EXTERNAL DATA DECLARATIONS ---------------------------------------------- // PUBLIC DATA DEFINITIONS ------------------------------------------------- +int sc_TokenType; char *sc_String; -int sc_StringLen; +unsigned int sc_StringLen; int sc_Number; -float sc_Float; +double sc_Float; +FName sc_Name; int sc_Line; bool sc_End; bool sc_Crossed; @@ -71,6 +74,8 @@ static char StringBuffer[MAX_STRING_SIZE]; static bool ScriptOpen = false; static int ScriptSize; static bool AlreadyGot = false; +static bool LastGotToken = false; +static char *LastGotPtr; static bool FreeScript = false; static char *SavedScriptPtr; static int SavedScriptLine; @@ -108,7 +113,10 @@ void SC_OpenFile (const char *name) SC_Close (); ScriptSize = M_ReadFile (name, &filebuf); - ScriptBuffer = (char *)filebuf; + ScriptBuffer = new char[ScriptSize + 1]; + memcpy (ScriptBuffer, filebuf, ScriptSize); + ScriptBuffer[ScriptSize++] = '\n'; + delete[] filebuf; ScriptName = name; // This is used for error messages so the full file name is preferable FreeScript = true; SC_PrepareScript (); @@ -119,7 +127,8 @@ void SC_OpenFile (const char *name) // SC_OpenMem // // Prepares a script that is already in memory for parsing. The caller is -// responsible for freeing it, if needed. +// responsible for freeing it, if needed. You MUST ensure that the script +// ends with the newline character '\n'. // //========================================================================== @@ -145,8 +154,9 @@ void SC_OpenLumpNum (int lump, const char *name) { SC_Close (); ScriptSize = Wads.LumpLength (lump); - ScriptBuffer = new char[ScriptSize]; + ScriptBuffer = new char[ScriptSize + 1]; Wads.ReadLump (lump, ScriptBuffer); + ScriptBuffer[ScriptSize++] = '\n'; ScriptName = name; FreeScript = true; SC_PrepareScript (); @@ -169,6 +179,8 @@ static void SC_PrepareScript (void) ScriptOpen = true; sc_String = StringBuffer; AlreadyGot = false; + LastGotToken = false; + LastGotPtr = NULL; SavedScriptPtr = NULL; CMode = false; Escape = true; @@ -234,6 +246,7 @@ void SC_RestorePos (void) sc_Line = SavedScriptLine; sc_End = false; AlreadyGot = false; + LastGotToken = false; } } @@ -267,20 +280,28 @@ void SC_SetEscape (bool esc) //========================================================================== // -// SC_GetString +// SC_ScanString +// +// Set tokens true if you want sc_TokenType to be set. // //========================================================================== -bool SC_GetString () +static bool SC_ScanString (bool tokens) { char *marker, *tok; + bool return_val; CheckOpen(); if (AlreadyGot) { AlreadyGot = false; - return true; + if (!tokens || LastGotToken) + { + return true; + } + ScriptPtr = LastGotPtr; } + sc_Crossed = false; if (ScriptPtr >= ScriptEndPtr) { @@ -288,9 +309,24 @@ bool SC_GetString () return false; } + LastGotPtr = ScriptPtr; + // In case the generated scanner does not use marker, avoid compiler warnings. marker; #include "sc_man_scanner.h" + LastGotToken = tokens; + return return_val; +} + +//========================================================================== +// +// SC_GetString +// +//========================================================================== + +bool SC_GetString () +{ + return SC_ScanString (false); } //========================================================================== @@ -343,6 +379,93 @@ bool SC_CheckString (const char *name) return false; } +//========================================================================== +// +// SC_GetToken +// +// Sets sc_Float, sc_Number, and sc_Name based on sc_TokenType. +// +//========================================================================== + +bool SC_GetToken () +{ + if (SC_ScanString (true)) + { + if (sc_TokenType == TK_Identifier || sc_TokenType == TK_NameConst) + { + sc_Name = FName(sc_String); + } + else if (sc_TokenType == TK_IntConst) + { + char *stopper; + sc_Number = strtol(sc_String, &stopper, 0); + sc_Float = sc_Number; + } + else if (sc_TokenType == TK_FloatConst) + { + char *stopper; + sc_Float = strtod(sc_String, &stopper); + } + else if (sc_TokenType == TK_StringConst) + { + strbin (sc_String); + } + return true; + } + return false; +} + +//========================================================================== +// +// SC_MustGetAnyToken +// +//========================================================================== + +void SC_MustGetAnyToken (void) +{ + if (SC_GetToken () == false) + { + SC_ScriptError ("Missing token (unexpected end of file)."); + } +} + +//========================================================================== +// +// SC_MustGetToken +// +//========================================================================== + +void SC_MustGetToken (int token) +{ + SC_MustGetAnyToken (); + if (sc_TokenType != token) + { + SC_ScriptError ("Expected %s but got %s instead.", + SC_TokenName(token), SC_TokenName(sc_TokenType, sc_String)); + } +} + +//========================================================================== +// +// SC_CheckToken +// +// Checks if the next token matches the specified token. Returns true if +// it does. If it doesn't, it ungets it and returns false. +//========================================================================== + +bool SC_CheckToken (int token) +{ + if (SC_GetToken ()) + { + if (sc_TokenType == token) + { + return true; + } + SC_UnGet (); + } + return false; +} + //========================================================================== // // SC_GetNumber @@ -603,6 +726,153 @@ bool SC_Compare (const char *text) return (stricmp (text, sc_String) == 0); } +//========================================================================== +// +// SC_TokenName +// +// Returns the name of a token. +// +//========================================================================== + +FString SC_TokenName (int token, const char *string) +{ + static const char *const names[] = + { + "an identifier", + "a string constant", + "a name constant", + "an integer constant", + "a float constant", + "'...'", + "'>>='", + "'<<='", + "'+='", + "'-='", + "'*='", + "'/='", + "'%='", + "'&='", + "'^='", + "'|='", + "'>>'", + "'<<'", + "'++'", + "'--'", + "'&&'", + "'||'", + "'<='", + "'>='", + "'=='", + "'!=" + "'break'", + "'case'", + "'const'", + "'continue'", + "'default'", + "'do'", + "'else'", + "'for'", + "'if'", + "'return'", + "'states'", + "'switch'", + "'until'", + "'while'", + "'bool'", + "'float'", + "'double'", + "'char'", + "'byte'", + "'sbyte'", + "'short'", + "'ushort'", + "'int'", + "'uint'", + "'long'", + "'ulong'", + "'void'", + "'struct'", + "'class'", + "'mode'", + "'enum'", + "'name'", + "'string'", + "'sound'", + "'state'", + "'color'", + "'goto'", + "'abstract'", + "'foreach'", + "'true'", + "'false'", + "'none'", + "'new'", + "'instanceof'", + "'auto'", + "'exec'", + "'defaultproperties'", + "'native'", + "'out'", + "'ref'", + "'event'", + "'static'", + "'transient'", + "'volatile'", + "'final'", + "'throws'", + "'extends'", + "'public'", + "'protected'", + "'private'", + "'dot'", + "'cross'", + "'ignores'", + "'localized'", + "'latent'", + "'singular'", + "'config'", + "'coerce'", + "'iterator'", + "'optional'", + "'export'", + "'virtual'", + "'super'", + "'global'", + "'self'", + "'stop'", + "'eval'", + "'evalnot'", + }; + + FString work; + + if (token > ' ' && token < 256) + { + work = '\''; + work += token; + work += '\''; + } + else if (token >= TK_Identifier && token < TK_LastToken) + { + work = names[token - TK_Identifier]; + if (string != NULL && token >= TK_Identifier && token <= TK_FloatConst) + { + work += ' '; + char quote = (token == TK_StringConst) ? '"' : '\''; + work += quote; + work += string; + work += quote; + } + } + else + { + FString work; + work.Format ("Unknown(%d)", token); + return work; + } + return work; +} + //========================================================================== // // SC_ScriptError @@ -723,5 +993,6 @@ void SC_RestoreScriptState() Escape = ss.Escape; SavedScripts.ShrinkToFit(); AlreadyGot = false; + LastGotToken = false; } } diff --git a/src/sc_man.h b/src/sc_man.h index 5cca3fe33..0523177c0 100644 --- a/src/sc_man.h +++ b/src/sc_man.h @@ -10,10 +10,16 @@ void SC_SetCMode (bool cmode); void SC_SetEscape (bool esc); void SC_SavePos (void); void SC_RestorePos (void); +FString SC_TokenName (int token, const char *string=NULL); bool SC_GetString (void); void SC_MustGetString (void); void SC_MustGetStringName (const char *name); bool SC_CheckString (const char *name); +bool SC_GetToken (void); +void SC_MustGetAnyToken (void); +void SC_MustGetToken (int token); +bool SC_CheckToken (int token); +bool SC_CheckTokenId (ENamedName id); bool SC_GetNumber (void); void SC_MustGetNumber (void); bool SC_CheckNumber (void); @@ -29,10 +35,122 @@ void STACK_ARGS SC_ScriptError (const char *message, ...); void SC_SaveScriptState(); void SC_RestoreScriptState(); +enum +{ + TK_Identifier = 257, + TK_StringConst, + TK_NameConst, + TK_IntConst, + TK_FloatConst, + TK_Ellipsis, // ... + TK_RShiftEq, // >>= + TK_LShiftEq, // <<= + TK_AddEq, // += + TK_SubEq, // -= + TK_MulEq, // *= + TK_DivEq, // /= + TK_ModEq, // %= + TK_AndEq, // &= + TK_XorEq, // ^= + TK_OrEq, // |= + TK_RShift, // >> + TK_LShift, // << + TK_Incr, // ++ + TK_Decr, // -- + TK_AndAnd, // && + TK_OrOr, // || + TK_Leq, // <= + TK_Geq, // >= + TK_Eq, // == + TK_Neq, // != + TK_Break, + TK_Case, + TK_Const, + TK_Continue, + TK_Default, + TK_Do, + TK_Else, + TK_For, + TK_If, + TK_Return, + TK_States, + TK_Switch, + TK_Until, + TK_While, + TK_Bool, + TK_Float, + TK_Double, + TK_Char, + TK_Byte, + TK_SByte, + TK_Short, + TK_UShort, + TK_Int, + TK_UInt, + TK_Long, + TK_ULong, + TK_Void, + TK_Struct, + TK_Class, + TK_Mode, + TK_Enum, + TK_Name, + TK_String, + TK_Sound, + TK_State, + TK_Color, + TK_Goto, + TK_Abstract, + TK_ForEach, + TK_True, + TK_False, + TK_None, + TK_New, + TK_InstanceOf, + TK_Auto, + TK_Exec, + TK_DefaultProperties, + TK_Native, + TK_Out, + TK_Ref, + TK_Event, + TK_Static, + TK_Transient, + TK_Volatile, + TK_Final, + TK_Throws, + TK_Extends, + TK_Public, + TK_Protected, + TK_Private, + TK_Dot, + TK_Cross, + TK_Ignores, + TK_Localized, + TK_Latent, + TK_Singular, + TK_Config, + TK_Coerce, + TK_Iterator, + TK_Optional, + TK_Export, + TK_Virtual, + TK_Super, + TK_Global, + TK_Self, + TK_Stop, + TK_Eval, + TK_EvalNot, + + TK_LastToken +}; + +extern int sc_TokenType; extern char *sc_String; -extern int sc_StringLen; +extern unsigned int sc_StringLen; extern int sc_Number; -extern float sc_Float; +extern double sc_Float; +extern FName sc_Name; extern int sc_Line; extern bool sc_End; extern bool sc_Crossed; diff --git a/src/sc_man_scanner.h b/src/sc_man_scanner.h index 5eba1e683..2b65e17c0 100644 --- a/src/sc_man_scanner.h +++ b/src/sc_man_scanner.h @@ -4,19 +4,21 @@ #define YYCURSOR cursor #define YYLIMIT limit #define YYMARKER marker - +#define YYFILL(n) {} +#if 0 // As long as the buffer ends with '\n', we need do nothing special for YYFILL. // This buffer must be as large as the largest YYFILL call - YYCTYPE eofbuf[3]; + YYCTYPE eofbuf[9]; #define YYFILL(n) \ { if(!sc_End) { \ if(n == 2) { eofbuf[0] = *cursor; } \ - else if(n == 3) { eofbuf[0] = *cursor; eofbuf[1] = *(cursor + 1); } \ + else if(n >= 3 && n <= 9) { memcpy(eofbuf, cursor, n-1); } \ eofbuf[n-1] = '\n'; \ cursor = eofbuf; \ limit = eofbuf + n - 1; \ sc_End = true; } \ } \ - assert(n <= 3) // Semicolon intentionally omitted + assert(n <= sizeof eofbuf) // Semicolon intentionally omitted +#endif //#define YYDEBUG(s,c) { Printf ("%d: %02x\n", s, c); } #define YYDEBUG(s,c) @@ -27,202 +29,4030 @@ std1: tok = YYCURSOR; std2: -#line 43 "src/sc_man_scanner.re" +#line 51 "src/sc_man_scanner.re" - if (!CMode) + if (tokens) // A well-defined scanner, based on the c.re example. { +#define RET(x) sc_TokenType = x; goto normal_token; -#line 36 "src/sc_man_scanner.h" +#line 39 "src/sc_man_scanner.h" { YYCTYPE yych; unsigned int yyaccept = 0; + if((YYLIMIT - YYCURSOR) < 18) YYFILL(18); + yych = *YYCURSOR; + switch(yych){ + case 0x09: + case 0x0B: + case 0x0C: + case 0x0D: + case ' ': goto yy78; + case 0x0A: goto yy80; + case '!': goto yy54; + case '"': goto yy31; + case '%': goto yy44; + case '&': goto yy46; + case '\'': goto yy33; + case '(': goto yy66; + case ')': goto yy68; + case '*': goto yy42; + case '+': goto yy38; + case ',': goto yy62; + case '-': goto yy40; + case '.': goto yy29; + case '/': goto yy2; + case '0': goto yy26; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy28; + case ':': goto yy64; + case ';': goto yy56; + case '<': goto yy36; + case '=': goto yy52; + case '>': goto yy34; + case '?': goto yy76; + case 'A': + case 'a': goto yy21; + case 'B': + case 'b': goto yy4; + case 'C': + case 'c': goto yy6; + case 'D': + case 'd': goto yy7; + case 'E': goto yy8; + case 'F': + case 'f': goto yy10; + case 'G': + case 'g': goto yy11; + case 'H': + case 'J': + case 'K': + case 'Q': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'h': + case 'j': + case 'k': + case 'q': + case 'x': + case 'y': + case 'z': goto yy25; + case 'I': + case 'i': goto yy12; + case 'L': + case 'l': goto yy18; + case 'M': + case 'm': goto yy19; + case 'N': + case 'n': goto yy20; + case 'O': + case 'o': goto yy23; + case 'P': + case 'p': goto yy24; + case 'R': + case 'r': goto yy13; + case 'S': + case 's': goto yy14; + case 'T': + case 't': goto yy22; + case 'U': + case 'u': goto yy15; + case 'V': + case 'v': goto yy16; + case 'W': + case 'w': goto yy17; + case '[': goto yy70; + case ']': goto yy72; + case '^': goto yy48; + case 'e': goto yy9; + case '{': goto yy58; + case '|': goto yy50; + case '}': goto yy60; + case '~': goto yy74; + default: goto yy82; + } +yy2: + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if(yych <= '.') { + if(yych == '*') goto yy569; + } else { + if(yych <= '/') goto yy567; + if(yych == '=') goto yy565; + } +yy3: +#line 197 "src/sc_man_scanner.re" + { RET('/'); } +#line 156 "src/sc_man_scanner.h" +yy4: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Y') { + if(yych <= 'Q') { + if(yych == 'O') goto yy552; + goto yy173; + } else { + if(yych <= 'R') goto yy553; + if(yych <= 'X') goto yy173; + goto yy554; + } + } else { + if(yych <= 'q') { + if(yych == 'o') goto yy552; + goto yy173; + } else { + if(yych <= 'r') goto yy553; + if(yych == 'y') goto yy554; + goto yy173; + } + } +yy5: +#line 145 "src/sc_man_scanner.re" + { RET(TK_Identifier); } +#line 181 "src/sc_man_scanner.h" +yy6: + yych = *++YYCURSOR; + switch(yych){ + case 'A': + case 'a': goto yy510; + case 'H': + case 'h': goto yy511; + case 'L': + case 'l': goto yy512; + case 'O': + case 'o': goto yy513; + case 'R': + case 'r': goto yy514; + default: goto yy173; + } +yy7: + yych = *++YYCURSOR; + if(yych <= 'O') { + if(yych == 'E') goto yy483; + if(yych <= 'N') goto yy173; + goto yy484; + } else { + if(yych <= 'e') { + if(yych <= 'd') goto yy173; + goto yy483; + } else { + if(yych == 'o') goto yy484; + goto yy173; + } + } +yy8: + yych = *++YYCURSOR; + if(yych <= 'X') { + if(yych <= 'N') { + if(yych == 'L') goto yy447; + if(yych <= 'M') goto yy173; + goto yy448; + } else { + if(yych == 'V') goto yy449; + if(yych <= 'W') goto yy173; + goto yy450; + } + } else { + if(yych <= 'n') { + if(yych == 'l') goto yy447; + if(yych <= 'm') goto yy173; + goto yy448; + } else { + if(yych <= 'v') { + if(yych <= 'u') goto yy173; + goto yy449; + } else { + if(yych == 'x') goto yy450; + goto yy173; + } + } + } +yy9: + yych = *++YYCURSOR; + if(yych <= 'X') { + if(yych <= 'N') { + if(yych == 'L') goto yy447; + if(yych <= 'M') goto yy173; + goto yy448; + } else { + if(yych == 'V') goto yy449; + if(yych <= 'W') goto yy173; + goto yy450; + } + } else { + if(yych <= 'n') { + if(yych == 'l') goto yy447; + if(yych <= 'm') goto yy173; + goto yy448; + } else { + if(yych <= 'v') { + if(yych <= 'u') goto yy173; + goto yy451; + } else { + if(yych == 'x') goto yy450; + goto yy173; + } + } + } +yy10: + yych = *++YYCURSOR; + if(yych <= 'O') { + if(yych <= 'I') { + if(yych == 'A') goto yy424; + if(yych <= 'H') goto yy173; + goto yy425; + } else { + if(yych == 'L') goto yy426; + if(yych <= 'N') goto yy173; + goto yy427; + } + } else { + if(yych <= 'i') { + if(yych == 'a') goto yy424; + if(yych <= 'h') goto yy173; + goto yy425; + } else { + if(yych <= 'l') { + if(yych <= 'k') goto yy173; + goto yy426; + } else { + if(yych == 'o') goto yy427; + goto yy173; + } + } + } +yy11: + yych = *++YYCURSOR; + if(yych <= 'O') { + if(yych == 'L') goto yy414; + if(yych <= 'N') goto yy173; + goto yy415; + } else { + if(yych <= 'l') { + if(yych <= 'k') goto yy173; + goto yy414; + } else { + if(yych == 'o') goto yy415; + goto yy173; + } + } +yy12: + yych = *++YYCURSOR; + if(yych <= 'T') { + if(yych <= 'G') { + if(yych <= 'E') goto yy173; + if(yych <= 'F') goto yy385; + goto yy387; + } else { + if(yych == 'N') goto yy388; + if(yych <= 'S') goto yy173; + goto yy389; + } + } else { + if(yych <= 'm') { + if(yych <= 'e') goto yy173; + if(yych <= 'f') goto yy385; + if(yych <= 'g') goto yy387; + goto yy173; + } else { + if(yych <= 'n') goto yy388; + if(yych == 't') goto yy389; + goto yy173; + } + } +yy13: + yych = *++YYCURSOR; + if(yych == 'E') goto yy377; + if(yych == 'e') goto yy377; + goto yy173; +yy14: + yych = *++YYCURSOR; + switch(yych){ + case 'B': + case 'b': goto yy317; + case 'E': + case 'e': goto yy318; + case 'H': + case 'h': goto yy319; + case 'I': + case 'i': goto yy320; + case 'O': + case 'o': goto yy321; + case 'T': + case 't': goto yy322; + case 'U': + case 'u': goto yy323; + case 'W': + case 'w': goto yy324; + default: goto yy173; + } +yy15: + yych = *++YYCURSOR; + switch(yych){ + case 'I': + case 'i': goto yy297; + case 'L': + case 'l': goto yy298; + case 'N': + case 'n': goto yy299; + case 'S': + case 's': goto yy300; + default: goto yy173; + } +yy16: + yych = *++YYCURSOR; + if(yych <= 'O') { + if(yych == 'I') goto yy279; + if(yych <= 'N') goto yy173; + goto yy280; + } else { + if(yych <= 'i') { + if(yych <= 'h') goto yy173; + goto yy279; + } else { + if(yych == 'o') goto yy280; + goto yy173; + } + } +yy17: + yych = *++YYCURSOR; + if(yych == 'H') goto yy274; + if(yych == 'h') goto yy274; + goto yy173; +yy18: + yych = *++YYCURSOR; + if(yych <= 'O') { + if(yych == 'A') goto yy256; + if(yych <= 'N') goto yy173; + goto yy257; + } else { + if(yych <= 'a') { + if(yych <= '`') goto yy173; + goto yy256; + } else { + if(yych == 'o') goto yy257; + goto yy173; + } + } +yy19: + yych = *++YYCURSOR; + if(yych == 'O') goto yy252; + if(yych == 'o') goto yy252; + goto yy173; +yy20: + yych = *++YYCURSOR; + if(yych <= 'O') { + if(yych <= 'D') { + if(yych == 'A') goto yy236; + goto yy173; + } else { + if(yych <= 'E') goto yy237; + if(yych <= 'N') goto yy173; + goto yy238; + } + } else { + if(yych <= 'd') { + if(yych == 'a') goto yy236; + goto yy173; + } else { + if(yych <= 'e') goto yy237; + if(yych == 'o') goto yy238; + goto yy173; + } + } +yy21: + yych = *++YYCURSOR; + if(yych <= 'U') { + if(yych == 'B') goto yy224; + if(yych <= 'T') goto yy173; + goto yy225; + } else { + if(yych <= 'b') { + if(yych <= 'a') goto yy173; + goto yy224; + } else { + if(yych == 'u') goto yy225; + goto yy173; + } + } +yy22: + yych = *++YYCURSOR; + if(yych <= 'R') { + if(yych == 'H') goto yy206; + if(yych <= 'Q') goto yy173; + goto yy207; + } else { + if(yych <= 'h') { + if(yych <= 'g') goto yy173; + goto yy206; + } else { + if(yych == 'r') goto yy207; + goto yy173; + } + } +yy23: + yych = *++YYCURSOR; + if(yych <= 'U') { + if(yych == 'P') goto yy195; + if(yych <= 'T') goto yy173; + goto yy196; + } else { + if(yych <= 'p') { + if(yych <= 'o') goto yy173; + goto yy195; + } else { + if(yych == 'u') goto yy196; + goto yy173; + } + } +yy24: + yych = *++YYCURSOR; + if(yych <= 'U') { + if(yych == 'R') goto yy174; + if(yych <= 'T') goto yy173; + goto yy175; + } else { + if(yych <= 'r') { + if(yych <= 'q') goto yy173; + goto yy174; + } else { + if(yych == 'u') goto yy175; + goto yy173; + } + } +yy25: + yych = *++YYCURSOR; + goto yy173; +yy26: + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if(yych == 'X') goto yy169; + if(yych == 'x') goto yy169; + goto yy168; +yy27: +#line 148 "src/sc_man_scanner.re" + { RET(TK_IntConst); } +#line 504 "src/sc_man_scanner.h" +yy28: + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + goto yy151; +yy29: + yyaccept = 2; + yych = *(YYMARKER = ++YYCURSOR); + if(yych == '.') goto yy138; + if(yych <= '/') goto yy30; + if(yych <= '9') goto yy139; +yy30: +#line 190 "src/sc_man_scanner.re" + { RET('.'); } +#line 518 "src/sc_man_scanner.h" +yy31: + yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + if(yych != 0x0A) goto yy129; +yy32: +#line 208 "src/sc_man_scanner.re" + { + SC_ScriptError ("Unexpected character: %c (ASCII %d)\n", *tok, *tok); + goto std1; + } +#line 529 "src/sc_man_scanner.h" +yy33: + yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + if(yych == 0x0A) goto yy32; + goto yy124; +yy34: + ++YYCURSOR; + if((yych = *YYCURSOR) <= '<') goto yy35; + if(yych <= '=') goto yy117; + if(yych <= '>') goto yy119; +yy35: +#line 200 "src/sc_man_scanner.re" + { RET('>'); } +#line 543 "src/sc_man_scanner.h" +yy36: + ++YYCURSOR; + if((yych = *YYCURSOR) <= ';') goto yy37; + if(yych <= '<') goto yy113; + if(yych <= '=') goto yy111; +yy37: +#line 199 "src/sc_man_scanner.re" + { RET('<'); } +#line 552 "src/sc_man_scanner.h" +yy38: + ++YYCURSOR; + if((yych = *YYCURSOR) == '+') goto yy107; + if(yych == '=') goto yy109; +#line 195 "src/sc_man_scanner.re" + { RET('+'); } +#line 559 "src/sc_man_scanner.h" +yy40: + ++YYCURSOR; + if((yych = *YYCURSOR) == '-') goto yy103; + if(yych == '=') goto yy105; +#line 194 "src/sc_man_scanner.re" + { RET('-'); } +#line 566 "src/sc_man_scanner.h" +yy42: + ++YYCURSOR; + if((yych = *YYCURSOR) == '=') goto yy101; +#line 196 "src/sc_man_scanner.re" + { RET('*'); } +#line 572 "src/sc_man_scanner.h" +yy44: + ++YYCURSOR; + if((yych = *YYCURSOR) == '=') goto yy99; +#line 198 "src/sc_man_scanner.re" + { RET('%'); } +#line 578 "src/sc_man_scanner.h" +yy46: + ++YYCURSOR; + if((yych = *YYCURSOR) == '&') goto yy95; + if(yych == '=') goto yy97; +#line 191 "src/sc_man_scanner.re" + { RET('&'); } +#line 585 "src/sc_man_scanner.h" +yy48: + ++YYCURSOR; + if((yych = *YYCURSOR) == '=') goto yy93; +#line 201 "src/sc_man_scanner.re" + { RET('^'); } +#line 591 "src/sc_man_scanner.h" +yy50: + ++YYCURSOR; + if((yych = *YYCURSOR) == '=') goto yy91; + if(yych == '|') goto yy89; +#line 202 "src/sc_man_scanner.re" + { RET('|'); } +#line 598 "src/sc_man_scanner.h" +yy52: + ++YYCURSOR; + if((yych = *YYCURSOR) == '=') goto yy87; +#line 185 "src/sc_man_scanner.re" + { RET('='); } +#line 604 "src/sc_man_scanner.h" +yy54: + ++YYCURSOR; + if((yych = *YYCURSOR) == '=') goto yy85; +#line 192 "src/sc_man_scanner.re" + { RET('!'); } +#line 610 "src/sc_man_scanner.h" +yy56: + ++YYCURSOR; +#line 180 "src/sc_man_scanner.re" + { RET(';'); } +#line 615 "src/sc_man_scanner.h" +yy58: + ++YYCURSOR; +#line 181 "src/sc_man_scanner.re" + { RET('{'); } +#line 620 "src/sc_man_scanner.h" +yy60: + ++YYCURSOR; +#line 182 "src/sc_man_scanner.re" + { RET('}'); } +#line 625 "src/sc_man_scanner.h" +yy62: + ++YYCURSOR; +#line 183 "src/sc_man_scanner.re" + { RET(','); } +#line 630 "src/sc_man_scanner.h" +yy64: + ++YYCURSOR; +#line 184 "src/sc_man_scanner.re" + { RET(':'); } +#line 635 "src/sc_man_scanner.h" +yy66: + ++YYCURSOR; +#line 186 "src/sc_man_scanner.re" + { RET('('); } +#line 640 "src/sc_man_scanner.h" +yy68: + ++YYCURSOR; +#line 187 "src/sc_man_scanner.re" + { RET(')'); } +#line 645 "src/sc_man_scanner.h" +yy70: + ++YYCURSOR; +#line 188 "src/sc_man_scanner.re" + { RET('['); } +#line 650 "src/sc_man_scanner.h" +yy72: + ++YYCURSOR; +#line 189 "src/sc_man_scanner.re" + { RET(']'); } +#line 655 "src/sc_man_scanner.h" +yy74: + ++YYCURSOR; +#line 193 "src/sc_man_scanner.re" + { RET('~'); } +#line 660 "src/sc_man_scanner.h" +yy76: + ++YYCURSOR; +#line 203 "src/sc_man_scanner.re" + { RET('?'); } +#line 665 "src/sc_man_scanner.h" +yy78: + ++YYCURSOR; + yych = *YYCURSOR; + goto yy84; +yy79: +#line 205 "src/sc_man_scanner.re" + { goto std1; } +#line 673 "src/sc_man_scanner.h" +yy80: + ++YYCURSOR; +#line 206 "src/sc_man_scanner.re" + { goto newline; } +#line 678 "src/sc_man_scanner.h" +yy82: + yych = *++YYCURSOR; + goto yy32; +yy83: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; +yy84: + if(yych <= 0x0A) { + if(yych == 0x09) goto yy83; + goto yy79; + } else { + if(yych <= 0x0D) goto yy83; + if(yych == ' ') goto yy83; + goto yy79; + } +yy85: + ++YYCURSOR; +#line 179 "src/sc_man_scanner.re" + { RET(TK_Neq); } +#line 699 "src/sc_man_scanner.h" +yy87: + ++YYCURSOR; +#line 178 "src/sc_man_scanner.re" + { RET(TK_Eq); } +#line 704 "src/sc_man_scanner.h" +yy89: + ++YYCURSOR; +#line 175 "src/sc_man_scanner.re" + { RET(TK_OrOr); } +#line 709 "src/sc_man_scanner.h" +yy91: + ++YYCURSOR; +#line 169 "src/sc_man_scanner.re" + { RET(TK_OrEq); } +#line 714 "src/sc_man_scanner.h" +yy93: + ++YYCURSOR; +#line 168 "src/sc_man_scanner.re" + { RET(TK_XorEq); } +#line 719 "src/sc_man_scanner.h" +yy95: + ++YYCURSOR; +#line 174 "src/sc_man_scanner.re" + { RET(TK_AndAnd); } +#line 724 "src/sc_man_scanner.h" +yy97: + ++YYCURSOR; +#line 167 "src/sc_man_scanner.re" + { RET(TK_AndEq); } +#line 729 "src/sc_man_scanner.h" +yy99: + ++YYCURSOR; +#line 166 "src/sc_man_scanner.re" + { RET(TK_ModEq); } +#line 734 "src/sc_man_scanner.h" +yy101: + ++YYCURSOR; +#line 164 "src/sc_man_scanner.re" + { RET(TK_MulEq); } +#line 739 "src/sc_man_scanner.h" +yy103: + ++YYCURSOR; +#line 173 "src/sc_man_scanner.re" + { RET(TK_Decr); } +#line 744 "src/sc_man_scanner.h" +yy105: + ++YYCURSOR; +#line 163 "src/sc_man_scanner.re" + { RET(TK_SubEq); } +#line 749 "src/sc_man_scanner.h" +yy107: + ++YYCURSOR; +#line 172 "src/sc_man_scanner.re" + { RET(TK_Incr); } +#line 754 "src/sc_man_scanner.h" +yy109: + ++YYCURSOR; +#line 162 "src/sc_man_scanner.re" + { RET(TK_AddEq); } +#line 759 "src/sc_man_scanner.h" +yy111: + ++YYCURSOR; +#line 176 "src/sc_man_scanner.re" + { RET(TK_Leq); } +#line 764 "src/sc_man_scanner.h" +yy113: + ++YYCURSOR; + if((yych = *YYCURSOR) == '=') goto yy115; +#line 171 "src/sc_man_scanner.re" + { RET(TK_LShift); } +#line 770 "src/sc_man_scanner.h" +yy115: + ++YYCURSOR; +#line 161 "src/sc_man_scanner.re" + { RET(TK_LShiftEq); } +#line 775 "src/sc_man_scanner.h" +yy117: + ++YYCURSOR; +#line 177 "src/sc_man_scanner.re" + { RET(TK_Geq); } +#line 780 "src/sc_man_scanner.h" +yy119: + ++YYCURSOR; + if((yych = *YYCURSOR) == '=') goto yy121; +#line 170 "src/sc_man_scanner.re" + { RET(TK_RShift); } +#line 786 "src/sc_man_scanner.h" +yy121: + ++YYCURSOR; +#line 160 "src/sc_man_scanner.re" + { RET(TK_RShiftEq); } +#line 791 "src/sc_man_scanner.h" +yy123: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; +yy124: + if(yych == 0x0A) goto yy125; + if(yych == '\'') goto yy126; + goto yy123; +yy125: + YYCURSOR = YYMARKER; + if(yyaccept <= 2) { + if(yyaccept <= 1) { + if(yyaccept <= 0) { + goto yy3; + } else { + goto yy27; + } + } else { + goto yy30; + } + } else { + if(yyaccept <= 3) { + goto yy32; + } else { + goto yy141; + } + } +yy126: + ++YYCURSOR; +#line 157 "src/sc_man_scanner.re" + { RET(TK_NameConst); } +#line 823 "src/sc_man_scanner.h" +yy128: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; +yy129: + if(yych <= '!') { + if(yych == 0x0A) goto yy125; + goto yy128; + } else { + if(yych <= '"') goto yy131; + if(yych != '\\') goto yy128; + } +yy130: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych <= 'c') { + if(yych <= '7') { + if(yych <= '&') { + if(yych == '"') goto yy128; + goto yy125; + } else { + if(yych <= '\'') goto yy128; + if(yych <= '/') goto yy125; + goto yy134; + } + } else { + if(yych <= '[') { + if(yych == '?') goto yy128; + goto yy125; + } else { + if(yych <= '\\') goto yy128; + if(yych <= '`') goto yy125; + goto yy128; + } + } + } else { + if(yych <= 'r') { + if(yych <= 'm') { + if(yych == 'f') goto yy128; + goto yy125; + } else { + if(yych <= 'n') goto yy128; + if(yych <= 'q') goto yy125; + goto yy128; + } + } else { + if(yych <= 'u') { + if(yych == 't') goto yy128; + goto yy125; + } else { + if(yych <= 'v') goto yy128; + if(yych == 'x') goto yy133; + goto yy125; + } + } + } +yy131: + ++YYCURSOR; +#line 154 "src/sc_man_scanner.re" + { RET(TK_StringConst); } +#line 885 "src/sc_man_scanner.h" +yy133: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych <= '@') { + if(yych <= '/') goto yy125; + if(yych <= '9') goto yy136; + goto yy125; + } else { + if(yych <= 'F') goto yy136; + if(yych <= '`') goto yy125; + if(yych <= 'f') goto yy136; + goto yy125; + } +yy134: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych <= '"') { + if(yych == 0x0A) goto yy125; + if(yych <= '!') goto yy128; + goto yy131; + } else { + if(yych <= '7') { + if(yych <= '/') goto yy128; + goto yy134; + } else { + if(yych == '\\') goto yy130; + goto yy128; + } + } +yy136: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych <= '9') { + if(yych <= '!') { + if(yych == 0x0A) goto yy125; + goto yy128; + } else { + if(yych <= '"') goto yy131; + if(yych <= '/') goto yy128; + goto yy136; + } + } else { + if(yych <= '[') { + if(yych <= '@') goto yy128; + if(yych <= 'F') goto yy136; + goto yy128; + } else { + if(yych <= '\\') goto yy130; + if(yych <= '`') goto yy128; + if(yych <= 'f') goto yy136; + goto yy128; + } + } +yy138: + yych = *++YYCURSOR; + if(yych == '.') goto yy147; + goto yy125; +yy139: + yyaccept = 4; + YYMARKER = ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); + yych = *YYCURSOR; + if(yych <= 'K') { + if(yych <= 'D') { + if(yych <= '/') goto yy141; + if(yych <= '9') goto yy139; + } else { + if(yych <= 'E') goto yy142; + if(yych <= 'F') goto yy143; + } + } else { + if(yych <= 'e') { + if(yych <= 'L') goto yy143; + if(yych >= 'e') goto yy142; + } else { + if(yych <= 'f') goto yy143; + if(yych == 'l') goto yy143; + } + } +yy141: +#line 151 "src/sc_man_scanner.re" + { RET(TK_FloatConst); } +#line 971 "src/sc_man_scanner.h" +yy142: + yych = *++YYCURSOR; + if(yych <= ',') { + if(yych == '+') goto yy144; + goto yy125; + } else { + if(yych <= '-') goto yy144; + if(yych <= '/') goto yy125; + if(yych <= '9') goto yy145; + goto yy125; + } +yy143: + yych = *++YYCURSOR; + goto yy141; +yy144: + yych = *++YYCURSOR; + if(yych <= '/') goto yy125; + if(yych >= ':') goto yy125; +yy145: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych <= 'K') { + if(yych <= '9') { + if(yych <= '/') goto yy141; + goto yy145; + } else { + if(yych == 'F') goto yy143; + goto yy141; + } + } else { + if(yych <= 'f') { + if(yych <= 'L') goto yy143; + if(yych <= 'e') goto yy141; + goto yy143; + } else { + if(yych == 'l') goto yy143; + goto yy141; + } + } +yy147: + ++YYCURSOR; +#line 159 "src/sc_man_scanner.re" + { RET(TK_Ellipsis); } +#line 1016 "src/sc_man_scanner.h" +yy149: + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if(yych == 'E') goto yy159; + if(yych == 'e') goto yy159; + goto yy158; +yy150: + yyaccept = 1; + YYMARKER = ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); + yych = *YYCURSOR; +yy151: + if(yych <= 'L') { + if(yych <= '9') { + if(yych == '.') goto yy149; + if(yych <= '/') goto yy27; + goto yy150; + } else { + if(yych == 'E') goto yy152; + if(yych <= 'K') goto yy27; + goto yy153; + } + } else { + if(yych <= 'e') { + if(yych == 'U') goto yy153; + if(yych <= 'd') goto yy27; + } else { + if(yych <= 'l') { + if(yych <= 'k') goto yy27; + goto yy153; + } else { + if(yych == 'u') goto yy153; + goto yy27; + } + } + } +yy152: + yych = *++YYCURSOR; + if(yych <= ',') { + if(yych == '+') goto yy154; + goto yy125; + } else { + if(yych <= '-') goto yy154; + if(yych <= '/') goto yy125; + if(yych <= '9') goto yy155; + goto yy125; + } +yy153: + yych = *++YYCURSOR; + goto yy27; +yy154: + yych = *++YYCURSOR; + if(yych <= '/') goto yy125; + if(yych >= ':') goto yy125; +yy155: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych <= 'K') { + if(yych <= '9') { + if(yych <= '/') goto yy141; + goto yy155; + } else { + if(yych == 'F') goto yy143; + goto yy141; + } + } else { + if(yych <= 'f') { + if(yych <= 'L') goto yy143; + if(yych <= 'e') goto yy141; + goto yy143; + } else { + if(yych == 'l') goto yy143; + goto yy141; + } + } +yy157: + yyaccept = 4; + YYMARKER = ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); + yych = *YYCURSOR; +yy158: + if(yych <= 'K') { + if(yych <= 'D') { + if(yych <= '/') goto yy141; + if(yych <= '9') goto yy157; + goto yy141; + } else { + if(yych <= 'E') goto yy163; + if(yych <= 'F') goto yy143; + goto yy141; + } + } else { + if(yych <= 'e') { + if(yych <= 'L') goto yy143; + if(yych <= 'd') goto yy141; + goto yy163; + } else { + if(yych <= 'f') goto yy143; + if(yych == 'l') goto yy143; + goto yy141; + } + } +yy159: + yych = *++YYCURSOR; + if(yych <= ',') { + if(yych != '+') goto yy125; + } else { + if(yych <= '-') goto yy160; + if(yych <= '/') goto yy125; + if(yych <= '9') goto yy161; + goto yy125; + } +yy160: + yych = *++YYCURSOR; + if(yych <= '/') goto yy125; + if(yych >= ':') goto yy125; +yy161: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych <= 'K') { + if(yych <= '9') { + if(yych <= '/') goto yy141; + goto yy161; + } else { + if(yych == 'F') goto yy143; + goto yy141; + } + } else { + if(yych <= 'f') { + if(yych <= 'L') goto yy143; + if(yych <= 'e') goto yy141; + goto yy143; + } else { + if(yych == 'l') goto yy143; + goto yy141; + } + } +yy163: + yych = *++YYCURSOR; + if(yych <= ',') { + if(yych != '+') goto yy125; + } else { + if(yych <= '-') goto yy164; + if(yych <= '/') goto yy125; + if(yych <= '9') goto yy165; + goto yy125; + } +yy164: + yych = *++YYCURSOR; + if(yych <= '/') goto yy125; + if(yych >= ':') goto yy125; +yy165: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych <= 'K') { + if(yych <= '9') { + if(yych <= '/') goto yy141; + goto yy165; + } else { + if(yych == 'F') goto yy143; + goto yy141; + } + } else { + if(yych <= 'f') { + if(yych <= 'L') goto yy143; + if(yych <= 'e') goto yy141; + goto yy143; + } else { + if(yych == 'l') goto yy143; + goto yy141; + } + } +yy167: + yyaccept = 1; + YYMARKER = ++YYCURSOR; + if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); + yych = *YYCURSOR; +yy168: + if(yych <= 'L') { + if(yych <= '9') { + if(yych == '.') goto yy149; + if(yych <= '/') goto yy27; + goto yy167; + } else { + if(yych == 'E') goto yy152; + if(yych <= 'K') goto yy27; + goto yy153; + } + } else { + if(yych <= 'e') { + if(yych == 'U') goto yy153; + if(yych <= 'd') goto yy27; + goto yy152; + } else { + if(yych <= 'l') { + if(yych <= 'k') goto yy27; + goto yy153; + } else { + if(yych == 'u') goto yy153; + goto yy27; + } + } + } +yy169: + yych = *++YYCURSOR; + if(yych <= '@') { + if(yych <= '/') goto yy125; + if(yych >= ':') goto yy125; + } else { + if(yych <= 'F') goto yy170; + if(yych <= '`') goto yy125; + if(yych >= 'g') goto yy125; + } +yy170: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych <= 'T') { + if(yych <= '@') { + if(yych <= '/') goto yy27; + if(yych <= '9') goto yy170; + goto yy27; + } else { + if(yych <= 'F') goto yy170; + if(yych == 'L') goto yy153; + goto yy27; + } + } else { + if(yych <= 'k') { + if(yych <= 'U') goto yy153; + if(yych <= '`') goto yy27; + if(yych <= 'f') goto yy170; + goto yy27; + } else { + if(yych <= 'l') goto yy153; + if(yych == 'u') goto yy153; + goto yy27; + } + } +yy172: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; +yy173: + if(yych <= 'Z') { + if(yych <= '/') goto yy5; + if(yych <= '9') goto yy172; + if(yych <= '@') goto yy5; + goto yy172; + } else { + if(yych <= '_') { + if(yych <= '^') goto yy5; + goto yy172; + } else { + if(yych <= '`') goto yy5; + if(yych <= 'z') goto yy172; + goto yy5; + } + } +yy174: + yych = *++YYCURSOR; + if(yych <= 'O') { + if(yych == 'I') goto yy182; + if(yych <= 'N') goto yy173; + goto yy181; + } else { + if(yych <= 'i') { + if(yych <= 'h') goto yy173; + goto yy182; + } else { + if(yych == 'o') goto yy181; + goto yy173; + } + } +yy175: + yych = *++YYCURSOR; + if(yych == 'B') goto yy176; + if(yych != 'b') goto yy173; +yy176: + yych = *++YYCURSOR; + if(yych == 'L') goto yy177; + if(yych != 'l') goto yy173; +yy177: + yych = *++YYCURSOR; + if(yych == 'I') goto yy178; + if(yych != 'i') goto yy173; +yy178: + yych = *++YYCURSOR; + if(yych == 'C') goto yy179; + if(yych != 'c') goto yy173; +yy179: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy180; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy180; + if(yych <= 'z') goto yy172; + } + } +yy180: +#line 121 "src/sc_man_scanner.re" + { RET(TK_Public); } +#line 1327 "src/sc_man_scanner.h" +yy181: + yych = *++YYCURSOR; + if(yych == 'T') goto yy188; + if(yych == 't') goto yy188; + goto yy173; +yy182: + yych = *++YYCURSOR; + if(yych == 'V') goto yy183; + if(yych != 'v') goto yy173; +yy183: + yych = *++YYCURSOR; + if(yych == 'A') goto yy184; + if(yych != 'a') goto yy173; +yy184: + yych = *++YYCURSOR; + if(yych == 'T') goto yy185; + if(yych != 't') goto yy173; +yy185: + yych = *++YYCURSOR; + if(yych == 'E') goto yy186; + if(yych != 'e') goto yy173; +yy186: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy187; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy187; + if(yych <= 'z') goto yy172; + } + } +yy187: +#line 123 "src/sc_man_scanner.re" + { RET(TK_Private); } +#line 1366 "src/sc_man_scanner.h" +yy188: + yych = *++YYCURSOR; + if(yych == 'E') goto yy189; + if(yych != 'e') goto yy173; +yy189: + yych = *++YYCURSOR; + if(yych == 'C') goto yy190; + if(yych != 'c') goto yy173; +yy190: + yych = *++YYCURSOR; + if(yych == 'T') goto yy191; + if(yych != 't') goto yy173; +yy191: + yych = *++YYCURSOR; + if(yych == 'E') goto yy192; + if(yych != 'e') goto yy173; +yy192: + yych = *++YYCURSOR; + if(yych == 'D') goto yy193; + if(yych != 'd') goto yy173; +yy193: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy194; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy194; + if(yych <= 'z') goto yy172; + } + } +yy194: +#line 122 "src/sc_man_scanner.re" + { RET(TK_Protected); } +#line 1404 "src/sc_man_scanner.h" +yy195: + yych = *++YYCURSOR; + if(yych == 'T') goto yy199; + if(yych == 't') goto yy199; + goto yy173; +yy196: + yych = *++YYCURSOR; + if(yych == 'T') goto yy197; + if(yych != 't') goto yy173; +yy197: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy198; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy198; + if(yych <= 'z') goto yy172; + } + } +yy198: +#line 113 "src/sc_man_scanner.re" + { RET(TK_Out); } +#line 1431 "src/sc_man_scanner.h" +yy199: + yych = *++YYCURSOR; + if(yych == 'I') goto yy200; + if(yych != 'i') goto yy173; +yy200: + yych = *++YYCURSOR; + if(yych == 'O') goto yy201; + if(yych != 'o') goto yy173; +yy201: + yych = *++YYCURSOR; + if(yych == 'N') goto yy202; + if(yych != 'n') goto yy173; +yy202: + yych = *++YYCURSOR; + if(yych == 'A') goto yy203; + if(yych != 'a') goto yy173; +yy203: + yych = *++YYCURSOR; + if(yych == 'L') goto yy204; + if(yych != 'l') goto yy173; +yy204: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy205; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy205; + if(yych <= 'z') goto yy172; + } + } +yy205: +#line 133 "src/sc_man_scanner.re" + { RET(TK_Optional); } +#line 1469 "src/sc_man_scanner.h" +yy206: + yych = *++YYCURSOR; + if(yych == 'R') goto yy219; + if(yych == 'r') goto yy219; + goto yy173; +yy207: + yych = *++YYCURSOR; + if(yych <= 'U') { + if(yych == 'A') goto yy209; + if(yych <= 'T') goto yy173; + } else { + if(yych <= 'a') { + if(yych <= '`') goto yy173; + goto yy209; + } else { + if(yych != 'u') goto yy173; + } + } + yych = *++YYCURSOR; + if(yych == 'E') goto yy217; + if(yych == 'e') goto yy217; + goto yy173; +yy209: + yych = *++YYCURSOR; + if(yych == 'N') goto yy210; + if(yych != 'n') goto yy173; +yy210: + yych = *++YYCURSOR; + if(yych == 'S') goto yy211; + if(yych != 's') goto yy173; +yy211: + yych = *++YYCURSOR; + if(yych == 'I') goto yy212; + if(yych != 'i') goto yy173; +yy212: + yych = *++YYCURSOR; + if(yych == 'E') goto yy213; + if(yych != 'e') goto yy173; +yy213: + yych = *++YYCURSOR; + if(yych == 'N') goto yy214; + if(yych != 'n') goto yy173; +yy214: + yych = *++YYCURSOR; + if(yych == 'T') goto yy215; + if(yych != 't') goto yy173; +yy215: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy216; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy216; + if(yych <= 'z') goto yy172; + } + } +yy216: +#line 117 "src/sc_man_scanner.re" + { RET(TK_Transient); } +#line 1533 "src/sc_man_scanner.h" +yy217: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy218; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy218; + if(yych <= 'z') goto yy172; + } + } +yy218: +#line 104 "src/sc_man_scanner.re" + { RET(TK_True); } +#line 1551 "src/sc_man_scanner.h" +yy219: + yych = *++YYCURSOR; + if(yych == 'O') goto yy220; + if(yych != 'o') goto yy173; +yy220: + yych = *++YYCURSOR; + if(yych == 'W') goto yy221; + if(yych != 'w') goto yy173; +yy221: + yych = *++YYCURSOR; + if(yych == 'S') goto yy222; + if(yych != 's') goto yy173; +yy222: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy223; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy223; + if(yych <= 'z') goto yy172; + } + } +yy223: +#line 119 "src/sc_man_scanner.re" + { RET(TK_Throws); } +#line 1581 "src/sc_man_scanner.h" +yy224: + yych = *++YYCURSOR; + if(yych == 'S') goto yy229; + if(yych == 's') goto yy229; + goto yy173; +yy225: + yych = *++YYCURSOR; + if(yych == 'T') goto yy226; + if(yych != 't') goto yy173; +yy226: + yych = *++YYCURSOR; + if(yych == 'O') goto yy227; + if(yych != 'o') goto yy173; +yy227: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy228; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy228; + if(yych <= 'z') goto yy172; + } + } +yy228: +#line 109 "src/sc_man_scanner.re" + { RET(TK_Auto); } +#line 1612 "src/sc_man_scanner.h" +yy229: + yych = *++YYCURSOR; + if(yych == 'T') goto yy230; + if(yych != 't') goto yy173; +yy230: + yych = *++YYCURSOR; + if(yych == 'R') goto yy231; + if(yych != 'r') goto yy173; +yy231: + yych = *++YYCURSOR; + if(yych == 'A') goto yy232; + if(yych != 'a') goto yy173; +yy232: + yych = *++YYCURSOR; + if(yych == 'C') goto yy233; + if(yych != 'c') goto yy173; +yy233: + yych = *++YYCURSOR; + if(yych == 'T') goto yy234; + if(yych != 't') goto yy173; +yy234: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy235; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy235; + if(yych <= 'z') goto yy172; + } + } +yy235: +#line 102 "src/sc_man_scanner.re" + { RET(TK_Abstract); } +#line 1650 "src/sc_man_scanner.h" +yy236: + yych = *++YYCURSOR; + if(yych <= 'T') { + if(yych == 'M') goto yy244; + if(yych <= 'S') goto yy173; + goto yy245; + } else { + if(yych <= 'm') { + if(yych <= 'l') goto yy173; + goto yy244; + } else { + if(yych == 't') goto yy245; + goto yy173; + } + } +yy237: + yych = *++YYCURSOR; + if(yych == 'W') goto yy242; + if(yych == 'w') goto yy242; + goto yy173; +yy238: + yych = *++YYCURSOR; + if(yych == 'N') goto yy239; + if(yych != 'n') goto yy173; +yy239: + yych = *++YYCURSOR; + if(yych == 'E') goto yy240; + if(yych != 'e') goto yy173; +yy240: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy241; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy241; + if(yych <= 'z') goto yy172; + } + } +yy241: +#line 106 "src/sc_man_scanner.re" + { RET(TK_None); } +#line 1696 "src/sc_man_scanner.h" +yy242: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy243; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy243; + if(yych <= 'z') goto yy172; + } + } +yy243: +#line 107 "src/sc_man_scanner.re" + { RET(TK_New); } +#line 1714 "src/sc_man_scanner.h" +yy244: + yych = *++YYCURSOR; + if(yych == 'E') goto yy250; + if(yych == 'e') goto yy250; + goto yy173; +yy245: + yych = *++YYCURSOR; + if(yych == 'I') goto yy246; + if(yych != 'i') goto yy173; +yy246: + yych = *++YYCURSOR; + if(yych == 'V') goto yy247; + if(yych != 'v') goto yy173; +yy247: + yych = *++YYCURSOR; + if(yych == 'E') goto yy248; + if(yych != 'e') goto yy173; +yy248: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy249; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy249; + if(yych <= 'z') goto yy172; + } + } +yy249: +#line 112 "src/sc_man_scanner.re" + { RET(TK_Native); } +#line 1749 "src/sc_man_scanner.h" +yy250: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy251; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy251; + if(yych <= 'z') goto yy172; + } + } +yy251: +#line 95 "src/sc_man_scanner.re" + { RET(TK_Name); } +#line 1767 "src/sc_man_scanner.h" +yy252: + yych = *++YYCURSOR; + if(yych == 'D') goto yy253; + if(yych != 'd') goto yy173; +yy253: + yych = *++YYCURSOR; + if(yych == 'E') goto yy254; + if(yych != 'e') goto yy173; +yy254: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy255; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy255; + if(yych <= 'z') goto yy172; + } + } +yy255: +#line 93 "src/sc_man_scanner.re" + { RET(TK_Mode); } +#line 1793 "src/sc_man_scanner.h" +yy256: + yych = *++YYCURSOR; + if(yych == 'T') goto yy269; + if(yych == 't') goto yy269; + goto yy173; +yy257: + yych = *++YYCURSOR; + if(yych <= 'N') { + if(yych == 'C') goto yy259; + if(yych <= 'M') goto yy173; + } else { + if(yych <= 'c') { + if(yych <= 'b') goto yy173; + goto yy259; + } else { + if(yych != 'n') goto yy173; + } + } + yych = *++YYCURSOR; + if(yych == 'G') goto yy267; + if(yych == 'g') goto yy267; + goto yy173; +yy259: + yych = *++YYCURSOR; + if(yych == 'A') goto yy260; + if(yych != 'a') goto yy173; +yy260: + yych = *++YYCURSOR; + if(yych == 'L') goto yy261; + if(yych != 'l') goto yy173; +yy261: + yych = *++YYCURSOR; + if(yych == 'I') goto yy262; + if(yych != 'i') goto yy173; +yy262: + yych = *++YYCURSOR; + if(yych == 'Z') goto yy263; + if(yych != 'z') goto yy173; +yy263: + yych = *++YYCURSOR; + if(yych == 'E') goto yy264; + if(yych != 'e') goto yy173; +yy264: + yych = *++YYCURSOR; + if(yych == 'D') goto yy265; + if(yych != 'd') goto yy173; +yy265: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy266; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy266; + if(yych <= 'z') goto yy172; + } + } +yy266: +#line 127 "src/sc_man_scanner.re" + { RET(TK_Localized); } +#line 1857 "src/sc_man_scanner.h" +yy267: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy268; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy268; + if(yych <= 'z') goto yy172; + } + } +yy268: +#line 88 "src/sc_man_scanner.re" + { RET(TK_Long); } +#line 1875 "src/sc_man_scanner.h" +yy269: + yych = *++YYCURSOR; + if(yych == 'E') goto yy270; + if(yych != 'e') goto yy173; +yy270: + yych = *++YYCURSOR; + if(yych == 'N') goto yy271; + if(yych != 'n') goto yy173; +yy271: + yych = *++YYCURSOR; + if(yych == 'T') goto yy272; + if(yych != 't') goto yy173; +yy272: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy273; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy273; + if(yych <= 'z') goto yy172; + } + } +yy273: +#line 128 "src/sc_man_scanner.re" + { RET(TK_Latent); } +#line 1905 "src/sc_man_scanner.h" +yy274: + yych = *++YYCURSOR; + if(yych == 'I') goto yy275; + if(yych != 'i') goto yy173; +yy275: + yych = *++YYCURSOR; + if(yych == 'L') goto yy276; + if(yych != 'l') goto yy173; +yy276: + yych = *++YYCURSOR; + if(yych == 'E') goto yy277; + if(yych != 'e') goto yy173; +yy277: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy278; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy278; + if(yych <= 'z') goto yy172; + } + } +yy278: +#line 75 "src/sc_man_scanner.re" + { RET(TK_While); } +#line 1935 "src/sc_man_scanner.h" +yy279: + yych = *++YYCURSOR; + if(yych == 'R') goto yy291; + if(yych == 'r') goto yy291; + goto yy173; +yy280: + yych = *++YYCURSOR; + if(yych <= 'L') { + if(yych == 'I') goto yy282; + if(yych <= 'K') goto yy173; + } else { + if(yych <= 'i') { + if(yych <= 'h') goto yy173; + goto yy282; + } else { + if(yych != 'l') goto yy173; + } + } + yych = *++YYCURSOR; + if(yych == 'A') goto yy285; + if(yych == 'a') goto yy285; + goto yy173; +yy282: + yych = *++YYCURSOR; + if(yych == 'D') goto yy283; + if(yych != 'd') goto yy173; +yy283: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy284; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy284; + if(yych <= 'z') goto yy172; + } + } +yy284: +#line 90 "src/sc_man_scanner.re" + { RET(TK_Void); } +#line 1979 "src/sc_man_scanner.h" +yy285: + yych = *++YYCURSOR; + if(yych == 'T') goto yy286; + if(yych != 't') goto yy173; +yy286: + yych = *++YYCURSOR; + if(yych == 'I') goto yy287; + if(yych != 'i') goto yy173; +yy287: + yych = *++YYCURSOR; + if(yych == 'L') goto yy288; + if(yych != 'l') goto yy173; +yy288: + yych = *++YYCURSOR; + if(yych == 'E') goto yy289; + if(yych != 'e') goto yy173; +yy289: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy290; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy290; + if(yych <= 'z') goto yy172; + } + } +yy290: +#line 74 "src/sc_man_scanner.re" + { RET(TK_Volatile); } +#line 2013 "src/sc_man_scanner.h" +yy291: + yych = *++YYCURSOR; + if(yych == 'T') goto yy292; + if(yych != 't') goto yy173; +yy292: + yych = *++YYCURSOR; + if(yych == 'U') goto yy293; + if(yych != 'u') goto yy173; +yy293: + yych = *++YYCURSOR; + if(yych == 'A') goto yy294; + if(yych != 'a') goto yy173; +yy294: + yych = *++YYCURSOR; + if(yych == 'L') goto yy295; + if(yych != 'l') goto yy173; +yy295: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy296; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy296; + if(yych <= 'z') goto yy172; + } + } +yy296: +#line 135 "src/sc_man_scanner.re" + { RET(TK_Virtual); } +#line 2047 "src/sc_man_scanner.h" +yy297: + yych = *++YYCURSOR; + if(yych == 'N') goto yy314; + if(yych == 'n') goto yy314; + goto yy173; +yy298: + yych = *++YYCURSOR; + if(yych == 'O') goto yy310; + if(yych == 'o') goto yy310; + goto yy173; +yy299: + yych = *++YYCURSOR; + if(yych == 'T') goto yy306; + if(yych == 't') goto yy306; + goto yy173; +yy300: + yych = *++YYCURSOR; + if(yych == 'H') goto yy301; + if(yych != 'h') goto yy173; +yy301: + yych = *++YYCURSOR; + if(yych == 'O') goto yy302; + if(yych != 'o') goto yy173; +yy302: + yych = *++YYCURSOR; + if(yych == 'R') goto yy303; + if(yych != 'r') goto yy173; +yy303: + yych = *++YYCURSOR; + if(yych == 'T') goto yy304; + if(yych != 't') goto yy173; +yy304: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy305; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy305; + if(yych <= 'z') goto yy172; + } + } +yy305: +#line 85 "src/sc_man_scanner.re" + { RET(TK_UShort); } +#line 2096 "src/sc_man_scanner.h" +yy306: + yych = *++YYCURSOR; + if(yych == 'I') goto yy307; + if(yych != 'i') goto yy173; +yy307: + yych = *++YYCURSOR; + if(yych == 'L') goto yy308; + if(yych != 'l') goto yy173; +yy308: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy309; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy309; + if(yych <= 'z') goto yy172; + } + } +yy309: +#line 73 "src/sc_man_scanner.re" + { RET(TK_Until); } +#line 2122 "src/sc_man_scanner.h" +yy310: + yych = *++YYCURSOR; + if(yych == 'N') goto yy311; + if(yych != 'n') goto yy173; +yy311: + yych = *++YYCURSOR; + if(yych == 'G') goto yy312; + if(yych != 'g') goto yy173; +yy312: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy313; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy313; + if(yych <= 'z') goto yy172; + } + } +yy313: +#line 89 "src/sc_man_scanner.re" + { RET(TK_ULong); } +#line 2148 "src/sc_man_scanner.h" +yy314: + yych = *++YYCURSOR; + if(yych == 'T') goto yy315; + if(yych != 't') goto yy173; +yy315: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy316; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy316; + if(yych <= 'z') goto yy172; + } + } +yy316: +#line 87 "src/sc_man_scanner.re" + { RET(TK_UInt); } +#line 2170 "src/sc_man_scanner.h" +yy317: + yych = *++YYCURSOR; + if(yych == 'Y') goto yy373; + if(yych == 'y') goto yy373; + goto yy173; +yy318: + yych = *++YYCURSOR; + if(yych == 'L') goto yy370; + if(yych == 'l') goto yy370; + goto yy173; +yy319: + yych = *++YYCURSOR; + if(yych == 'O') goto yy366; + if(yych == 'o') goto yy366; + goto yy173; +yy320: + yych = *++YYCURSOR; + if(yych == 'N') goto yy359; + if(yych == 'n') goto yy359; + goto yy173; +yy321: + yych = *++YYCURSOR; + if(yych == 'U') goto yy355; + if(yych == 'u') goto yy355; + goto yy173; +yy322: + yych = *++YYCURSOR; + if(yych <= 'R') { + if(yych <= 'N') { + if(yych == 'A') goto yy334; + goto yy173; + } else { + if(yych <= 'O') goto yy336; + if(yych <= 'Q') goto yy173; + goto yy335; + } + } else { + if(yych <= 'n') { + if(yych == 'a') goto yy334; + goto yy173; + } else { + if(yych <= 'o') goto yy336; + if(yych == 'r') goto yy335; + goto yy173; + } + } +yy323: + yych = *++YYCURSOR; + if(yych == 'P') goto yy330; + if(yych == 'p') goto yy330; + goto yy173; +yy324: + yych = *++YYCURSOR; + if(yych == 'I') goto yy325; + if(yych != 'i') goto yy173; +yy325: + yych = *++YYCURSOR; + if(yych == 'T') goto yy326; + if(yych != 't') goto yy173; +yy326: + yych = *++YYCURSOR; + if(yych == 'C') goto yy327; + if(yych != 'c') goto yy173; +yy327: + yych = *++YYCURSOR; + if(yych == 'H') goto yy328; + if(yych != 'h') goto yy173; +yy328: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy329; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy329; + if(yych <= 'z') goto yy172; + } + } +yy329: +#line 72 "src/sc_man_scanner.re" + { RET(TK_Switch); } +#line 2255 "src/sc_man_scanner.h" +yy330: + yych = *++YYCURSOR; + if(yych == 'E') goto yy331; + if(yych != 'e') goto yy173; +yy331: + yych = *++YYCURSOR; + if(yych == 'R') goto yy332; + if(yych != 'r') goto yy173; +yy332: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy333; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy333; + if(yych <= 'z') goto yy172; + } + } +yy333: +#line 136 "src/sc_man_scanner.re" + { RET(TK_Super); } +#line 2281 "src/sc_man_scanner.h" +yy334: + yych = *++YYCURSOR; + if(yych == 'T') goto yy347; + if(yych == 't') goto yy347; + goto yy173; +yy335: + yych = *++YYCURSOR; + if(yych <= 'U') { + if(yych == 'I') goto yy339; + if(yych <= 'T') goto yy173; + goto yy340; + } else { + if(yych <= 'i') { + if(yych <= 'h') goto yy173; + goto yy339; + } else { + if(yych == 'u') goto yy340; + goto yy173; + } + } +yy336: + yych = *++YYCURSOR; + if(yych == 'P') goto yy337; + if(yych != 'p') goto yy173; +yy337: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy338; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy338; + if(yych <= 'z') goto yy172; + } + } +yy338: +#line 139 "src/sc_man_scanner.re" + { RET(TK_Stop); } +#line 2323 "src/sc_man_scanner.h" +yy339: + yych = *++YYCURSOR; + if(yych == 'N') goto yy344; + if(yych == 'n') goto yy344; + goto yy173; +yy340: + yych = *++YYCURSOR; + if(yych == 'C') goto yy341; + if(yych != 'c') goto yy173; +yy341: + yych = *++YYCURSOR; + if(yych == 'T') goto yy342; + if(yych != 't') goto yy173; +yy342: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy343; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy343; + if(yych <= 'z') goto yy172; + } + } +yy343: +#line 91 "src/sc_man_scanner.re" + { RET(TK_Struct); } +#line 2354 "src/sc_man_scanner.h" +yy344: + yych = *++YYCURSOR; + if(yych == 'G') goto yy345; + if(yych != 'g') goto yy173; +yy345: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy346; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy346; + if(yych <= 'z') goto yy172; + } + } +yy346: +#line 96 "src/sc_man_scanner.re" + { RET(TK_String); } +#line 2376 "src/sc_man_scanner.h" +yy347: + yych = *++YYCURSOR; + if(yych <= 'I') { + if(yych == 'E') goto yy348; + if(yych <= 'H') goto yy173; + goto yy350; + } else { + if(yych <= 'e') { + if(yych <= 'd') goto yy173; + } else { + if(yych == 'i') goto yy350; + goto yy173; + } + } +yy348: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '@') { + if(yych <= '/') goto yy349; + if(yych <= '9') goto yy172; + } else { + if(yych == 'S') goto yy353; + goto yy172; + } + } else { + if(yych <= '`') { + if(yych == '_') goto yy172; + } else { + if(yych == 's') goto yy353; + if(yych <= 'z') goto yy172; + } + } +yy349: +#line 98 "src/sc_man_scanner.re" + { RET(TK_State); } +#line 2412 "src/sc_man_scanner.h" +yy350: + yych = *++YYCURSOR; + if(yych == 'C') goto yy351; + if(yych != 'c') goto yy173; +yy351: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy352; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy352; + if(yych <= 'z') goto yy172; + } + } +yy352: +#line 116 "src/sc_man_scanner.re" + { RET(TK_Static); } +#line 2434 "src/sc_man_scanner.h" +yy353: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy354; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy354; + if(yych <= 'z') goto yy172; + } + } +yy354: +#line 71 "src/sc_man_scanner.re" + { RET(TK_States); } +#line 2452 "src/sc_man_scanner.h" +yy355: + yych = *++YYCURSOR; + if(yych == 'N') goto yy356; + if(yych != 'n') goto yy173; +yy356: + yych = *++YYCURSOR; + if(yych == 'D') goto yy357; + if(yych != 'd') goto yy173; +yy357: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy358; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy358; + if(yych <= 'z') goto yy172; + } + } +yy358: +#line 97 "src/sc_man_scanner.re" + { RET(TK_Sound); } +#line 2478 "src/sc_man_scanner.h" +yy359: + yych = *++YYCURSOR; + if(yych == 'G') goto yy360; + if(yych != 'g') goto yy173; +yy360: + yych = *++YYCURSOR; + if(yych == 'U') goto yy361; + if(yych != 'u') goto yy173; +yy361: + yych = *++YYCURSOR; + if(yych == 'L') goto yy362; + if(yych != 'l') goto yy173; +yy362: + yych = *++YYCURSOR; + if(yych == 'A') goto yy363; + if(yych != 'a') goto yy173; +yy363: + yych = *++YYCURSOR; + if(yych == 'R') goto yy364; + if(yych != 'r') goto yy173; +yy364: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy365; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy365; + if(yych <= 'z') goto yy172; + } + } +yy365: +#line 129 "src/sc_man_scanner.re" + { RET(TK_Singular); } +#line 2516 "src/sc_man_scanner.h" +yy366: + yych = *++YYCURSOR; + if(yych == 'R') goto yy367; + if(yych != 'r') goto yy173; +yy367: + yych = *++YYCURSOR; + if(yych == 'T') goto yy368; + if(yych != 't') goto yy173; +yy368: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy369; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy369; + if(yych <= 'z') goto yy172; + } + } +yy369: +#line 84 "src/sc_man_scanner.re" + { RET(TK_Short); } +#line 2542 "src/sc_man_scanner.h" +yy370: + yych = *++YYCURSOR; + if(yych == 'F') goto yy371; + if(yych != 'f') goto yy173; +yy371: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy372; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy372; + if(yych <= 'z') goto yy172; + } + } +yy372: +#line 138 "src/sc_man_scanner.re" + { RET(TK_Self); } +#line 2564 "src/sc_man_scanner.h" +yy373: + yych = *++YYCURSOR; + if(yych == 'T') goto yy374; + if(yych != 't') goto yy173; +yy374: + yych = *++YYCURSOR; + if(yych == 'E') goto yy375; + if(yych != 'e') goto yy173; +yy375: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy376; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy376; + if(yych <= 'z') goto yy172; + } + } +yy376: +#line 83 "src/sc_man_scanner.re" + { RET(TK_SByte); } +#line 2590 "src/sc_man_scanner.h" +yy377: + yych = *++YYCURSOR; + if(yych <= 'T') { + if(yych == 'F') goto yy379; + if(yych <= 'S') goto yy173; + } else { + if(yych <= 'f') { + if(yych <= 'e') goto yy173; + goto yy379; + } else { + if(yych != 't') goto yy173; + } + } + yych = *++YYCURSOR; + if(yych == 'U') goto yy381; + if(yych == 'u') goto yy381; + goto yy173; +yy379: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy380; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy380; + if(yych <= 'z') goto yy172; + } + } +yy380: +#line 114 "src/sc_man_scanner.re" + { RET(TK_Ref); } +#line 2625 "src/sc_man_scanner.h" +yy381: + yych = *++YYCURSOR; + if(yych == 'R') goto yy382; + if(yych != 'r') goto yy173; +yy382: + yych = *++YYCURSOR; + if(yych == 'N') goto yy383; + if(yych != 'n') goto yy173; +yy383: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy384; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy384; + if(yych <= 'z') goto yy172; + } + } +yy384: +#line 70 "src/sc_man_scanner.re" + { RET(TK_Return); } +#line 2651 "src/sc_man_scanner.h" +yy385: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy386; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy386; + if(yych <= 'z') goto yy172; + } + } +yy386: +#line 69 "src/sc_man_scanner.re" + { RET(TK_If); } +#line 2669 "src/sc_man_scanner.h" +yy387: + yych = *++YYCURSOR; + if(yych == 'N') goto yy408; + if(yych == 'n') goto yy408; + goto yy173; +yy388: + yych = *++YYCURSOR; + if(yych <= 'T') { + if(yych <= 'R') goto yy173; + if(yych <= 'S') goto yy399; + goto yy397; + } else { + if(yych <= 'r') goto yy173; + if(yych <= 's') goto yy399; + if(yych <= 't') goto yy397; + goto yy173; + } +yy389: + yych = *++YYCURSOR; + if(yych == 'E') goto yy390; + if(yych != 'e') goto yy173; +yy390: + yych = *++YYCURSOR; + if(yych == 'R') goto yy391; + if(yych != 'r') goto yy173; +yy391: + yych = *++YYCURSOR; + if(yych == 'A') goto yy392; + if(yych != 'a') goto yy173; +yy392: + yych = *++YYCURSOR; + if(yych == 'T') goto yy393; + if(yych != 't') goto yy173; +yy393: + yych = *++YYCURSOR; + if(yych == 'O') goto yy394; + if(yych != 'o') goto yy173; +yy394: + yych = *++YYCURSOR; + if(yych == 'R') goto yy395; + if(yych != 'r') goto yy173; +yy395: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy396; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy396; + if(yych <= 'z') goto yy172; + } + } +yy396: +#line 132 "src/sc_man_scanner.re" + { RET(TK_Iterator); } +#line 2728 "src/sc_man_scanner.h" +yy397: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy398; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy398; + if(yych <= 'z') goto yy172; + } + } +yy398: +#line 86 "src/sc_man_scanner.re" + { RET(TK_Int); } +#line 2746 "src/sc_man_scanner.h" +yy399: + yych = *++YYCURSOR; + if(yych == 'T') goto yy400; + if(yych != 't') goto yy173; +yy400: + yych = *++YYCURSOR; + if(yych == 'A') goto yy401; + if(yych != 'a') goto yy173; +yy401: + yych = *++YYCURSOR; + if(yych == 'N') goto yy402; + if(yych != 'n') goto yy173; +yy402: + yych = *++YYCURSOR; + if(yych == 'C') goto yy403; + if(yych != 'c') goto yy173; +yy403: + yych = *++YYCURSOR; + if(yych == 'E') goto yy404; + if(yych != 'e') goto yy173; +yy404: + yych = *++YYCURSOR; + if(yych == 'O') goto yy405; + if(yych != 'o') goto yy173; +yy405: + yych = *++YYCURSOR; + if(yych == 'F') goto yy406; + if(yych != 'f') goto yy173; +yy406: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy407; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy407; + if(yych <= 'z') goto yy172; + } + } +yy407: +#line 108 "src/sc_man_scanner.re" + { RET(TK_InstanceOf); } +#line 2792 "src/sc_man_scanner.h" +yy408: + yych = *++YYCURSOR; + if(yych == 'O') goto yy409; + if(yych != 'o') goto yy173; +yy409: + yych = *++YYCURSOR; + if(yych == 'R') goto yy410; + if(yych != 'r') goto yy173; +yy410: + yych = *++YYCURSOR; + if(yych == 'E') goto yy411; + if(yych != 'e') goto yy173; +yy411: + yych = *++YYCURSOR; + if(yych == 'S') goto yy412; + if(yych != 's') goto yy173; +yy412: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy413; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy413; + if(yych <= 'z') goto yy172; + } + } +yy413: +#line 126 "src/sc_man_scanner.re" + { RET(TK_Ignores); } +#line 2826 "src/sc_man_scanner.h" +yy414: + yych = *++YYCURSOR; + if(yych == 'O') goto yy419; + if(yych == 'o') goto yy419; + goto yy173; +yy415: + yych = *++YYCURSOR; + if(yych == 'T') goto yy416; + if(yych != 't') goto yy173; +yy416: + yych = *++YYCURSOR; + if(yych == 'O') goto yy417; + if(yych != 'o') goto yy173; +yy417: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy418; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy418; + if(yych <= 'z') goto yy172; + } + } +yy418: +#line 68 "src/sc_man_scanner.re" + { RET(TK_Goto); } +#line 2857 "src/sc_man_scanner.h" +yy419: + yych = *++YYCURSOR; + if(yych == 'B') goto yy420; + if(yych != 'b') goto yy173; +yy420: + yych = *++YYCURSOR; + if(yych == 'A') goto yy421; + if(yych != 'a') goto yy173; +yy421: + yych = *++YYCURSOR; + if(yych == 'L') goto yy422; + if(yych != 'l') goto yy173; +yy422: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy423; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy423; + if(yych <= 'z') goto yy172; + } + } +yy423: +#line 137 "src/sc_man_scanner.re" + { RET(TK_Global); } +#line 2887 "src/sc_man_scanner.h" +yy424: + yych = *++YYCURSOR; + if(yych == 'L') goto yy443; + if(yych == 'l') goto yy443; + goto yy173; +yy425: + yych = *++YYCURSOR; + if(yych == 'N') goto yy439; + if(yych == 'n') goto yy439; + goto yy173; +yy426: + yych = *++YYCURSOR; + if(yych == 'O') goto yy435; + if(yych == 'o') goto yy435; + goto yy173; +yy427: + yych = *++YYCURSOR; + if(yych == 'R') goto yy428; + if(yych != 'r') goto yy173; +yy428: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '@') { + if(yych <= '/') goto yy429; + if(yych <= '9') goto yy172; + } else { + if(yych == 'E') goto yy430; + goto yy172; + } + } else { + if(yych <= '`') { + if(yych == '_') goto yy172; + } else { + if(yych == 'e') goto yy430; + if(yych <= 'z') goto yy172; + } + } +yy429: +#line 67 "src/sc_man_scanner.re" + { RET(TK_For); } +#line 2928 "src/sc_man_scanner.h" +yy430: + yych = *++YYCURSOR; + if(yych == 'A') goto yy431; + if(yych != 'a') goto yy173; +yy431: + yych = *++YYCURSOR; + if(yych == 'C') goto yy432; + if(yych != 'c') goto yy173; +yy432: + yych = *++YYCURSOR; + if(yych == 'H') goto yy433; + if(yych != 'h') goto yy173; +yy433: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy434; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy434; + if(yych <= 'z') goto yy172; + } + } +yy434: +#line 103 "src/sc_man_scanner.re" + { RET(TK_ForEach); } +#line 2958 "src/sc_man_scanner.h" +yy435: + yych = *++YYCURSOR; + if(yych == 'A') goto yy436; + if(yych != 'a') goto yy173; +yy436: + yych = *++YYCURSOR; + if(yych == 'T') goto yy437; + if(yych != 't') goto yy173; +yy437: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy438; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy438; + if(yych <= 'z') goto yy172; + } + } +yy438: +#line 79 "src/sc_man_scanner.re" + { RET(TK_Float); } +#line 2984 "src/sc_man_scanner.h" +yy439: + yych = *++YYCURSOR; + if(yych == 'A') goto yy440; + if(yych != 'a') goto yy173; +yy440: + yych = *++YYCURSOR; + if(yych == 'L') goto yy441; + if(yych != 'l') goto yy173; +yy441: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy442; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy442; + if(yych <= 'z') goto yy172; + } + } +yy442: +#line 118 "src/sc_man_scanner.re" + { RET(TK_Final); } +#line 3010 "src/sc_man_scanner.h" +yy443: + yych = *++YYCURSOR; + if(yych == 'S') goto yy444; + if(yych != 's') goto yy173; +yy444: + yych = *++YYCURSOR; + if(yych == 'E') goto yy445; + if(yych != 'e') goto yy173; +yy445: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy446; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy446; + if(yych <= 'z') goto yy172; + } + } +yy446: +#line 105 "src/sc_man_scanner.re" + { RET(TK_False); } +#line 3036 "src/sc_man_scanner.h" +yy447: + yych = *++YYCURSOR; + if(yych == 'S') goto yy480; + if(yych == 's') goto yy480; + goto yy173; +yy448: + yych = *++YYCURSOR; + if(yych == 'U') goto yy477; + if(yych == 'u') goto yy477; + goto yy173; +yy449: + yych = *++YYCURSOR; + if(yych == 'E') goto yy452; + if(yych == 'e') goto yy452; + goto yy173; +yy450: + yych = *++YYCURSOR; + if(yych <= 'T') { + if(yych <= 'O') { + if(yych == 'E') goto yy463; + goto yy173; + } else { + if(yych <= 'P') goto yy465; + if(yych <= 'S') goto yy173; + goto yy464; + } + } else { + if(yych <= 'o') { + if(yych == 'e') goto yy463; + goto yy173; + } else { + if(yych <= 'p') goto yy465; + if(yych == 't') goto yy464; + goto yy173; + } + } +yy451: + yych = *++YYCURSOR; + if(yych <= '`') { + if(yych != 'E') goto yy173; + } else { + if(yych <= 'a') goto yy453; + if(yych != 'e') goto yy173; + } +yy452: + yych = *++YYCURSOR; + if(yych == 'N') goto yy460; + if(yych == 'n') goto yy460; + goto yy173; +yy453: + yych = *++YYCURSOR; + if(yych != 'l') goto yy173; + ++YYCURSOR; + if((yych = *YYCURSOR) <= '^') { + if(yych <= '9') { + if(yych >= '0') goto yy172; + } else { + if(yych <= '@') goto yy455; + if(yych <= 'Z') goto yy172; + } + } else { + if(yych <= 'm') { + if(yych != '`') goto yy172; + } else { + if(yych <= 'n') goto yy456; + if(yych <= 'z') goto yy172; + } + } +yy455: +#line 142 "src/sc_man_scanner.re" + { RET(TK_Eval); } +#line 3108 "src/sc_man_scanner.h" +yy456: + yych = *++YYCURSOR; + if(yych != 'o') goto yy173; + yych = *++YYCURSOR; + if(yych != 't') goto yy173; + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy459; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy459; + if(yych <= 'z') goto yy172; + } + } +yy459: +#line 143 "src/sc_man_scanner.re" + { RET(TK_EvalNot); } +#line 3130 "src/sc_man_scanner.h" +yy460: + yych = *++YYCURSOR; + if(yych == 'T') goto yy461; + if(yych != 't') goto yy173; +yy461: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy462; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy462; + if(yych <= 'z') goto yy172; + } + } +yy462: +#line 115 "src/sc_man_scanner.re" + { RET(TK_Event); } +#line 3152 "src/sc_man_scanner.h" +yy463: + yych = *++YYCURSOR; + if(yych == 'C') goto yy475; + if(yych == 'c') goto yy475; + goto yy173; +yy464: + yych = *++YYCURSOR; + if(yych == 'E') goto yy470; + if(yych == 'e') goto yy470; + goto yy173; +yy465: + yych = *++YYCURSOR; + if(yych == 'O') goto yy466; + if(yych != 'o') goto yy173; +yy466: + yych = *++YYCURSOR; + if(yych == 'R') goto yy467; + if(yych != 'r') goto yy173; +yy467: + yych = *++YYCURSOR; + if(yych == 'T') goto yy468; + if(yych != 't') goto yy173; +yy468: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy469; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy469; + if(yych <= 'z') goto yy172; + } + } +yy469: +#line 134 "src/sc_man_scanner.re" + { RET(TK_Export); } +#line 3192 "src/sc_man_scanner.h" +yy470: + yych = *++YYCURSOR; + if(yych == 'N') goto yy471; + if(yych != 'n') goto yy173; +yy471: + yych = *++YYCURSOR; + if(yych == 'D') goto yy472; + if(yych != 'd') goto yy173; +yy472: + yych = *++YYCURSOR; + if(yych == 'S') goto yy473; + if(yych != 's') goto yy173; +yy473: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy474; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy474; + if(yych <= 'z') goto yy172; + } + } +yy474: +#line 120 "src/sc_man_scanner.re" + { RET(TK_Extends); } +#line 3222 "src/sc_man_scanner.h" +yy475: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy476; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy476; + if(yych <= 'z') goto yy172; + } + } +yy476: +#line 110 "src/sc_man_scanner.re" + { RET(TK_Exec); } +#line 3240 "src/sc_man_scanner.h" +yy477: + yych = *++YYCURSOR; + if(yych == 'M') goto yy478; + if(yych != 'm') goto yy173; +yy478: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy479; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy479; + if(yych <= 'z') goto yy172; + } + } +yy479: +#line 94 "src/sc_man_scanner.re" + { RET(TK_Enum); } +#line 3262 "src/sc_man_scanner.h" +yy480: + yych = *++YYCURSOR; + if(yych == 'E') goto yy481; + if(yych != 'e') goto yy173; +yy481: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy482; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy482; + if(yych <= 'z') goto yy172; + } + } +yy482: +#line 66 "src/sc_man_scanner.re" + { RET(TK_Else); } +#line 3284 "src/sc_man_scanner.h" +yy483: + yych = *++YYCURSOR; + if(yych == 'F') goto yy493; + if(yych == 'f') goto yy493; + goto yy173; +yy484: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '@') { + if(yych <= '/') goto yy485; + if(yych <= '9') goto yy172; + } else { + if(yych <= 'S') goto yy172; + if(yych <= 'T') goto yy487; + if(yych <= 'U') goto yy486; + goto yy172; + } + } else { + if(yych <= 's') { + if(yych == '_') goto yy172; + if(yych >= 'a') goto yy172; + } else { + if(yych <= 't') goto yy487; + if(yych <= 'u') goto yy486; + if(yych <= 'z') goto yy172; + } + } +yy485: +#line 65 "src/sc_man_scanner.re" + { RET(TK_Do); } +#line 3315 "src/sc_man_scanner.h" +yy486: + yych = *++YYCURSOR; + if(yych == 'B') goto yy489; + if(yych == 'b') goto yy489; + goto yy173; +yy487: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy488; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy488; + if(yych <= 'z') goto yy172; + } + } +yy488: +#line 124 "src/sc_man_scanner.re" + { RET(TK_Dot); } +#line 3338 "src/sc_man_scanner.h" +yy489: + yych = *++YYCURSOR; + if(yych == 'L') goto yy490; + if(yych != 'l') goto yy173; +yy490: + yych = *++YYCURSOR; + if(yych == 'E') goto yy491; + if(yych != 'e') goto yy173; +yy491: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy492; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy492; + if(yych <= 'z') goto yy172; + } + } +yy492: +#line 80 "src/sc_man_scanner.re" + { RET(TK_Double); } +#line 3364 "src/sc_man_scanner.h" +yy493: + yych = *++YYCURSOR; + if(yych == 'A') goto yy494; + if(yych != 'a') goto yy173; +yy494: + yych = *++YYCURSOR; + if(yych == 'U') goto yy495; + if(yych != 'u') goto yy173; +yy495: + yych = *++YYCURSOR; + if(yych == 'L') goto yy496; + if(yych != 'l') goto yy173; +yy496: + yych = *++YYCURSOR; + if(yych == 'T') goto yy497; + if(yych != 't') goto yy173; +yy497: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '@') { + if(yych <= '/') goto yy498; + if(yych <= '9') goto yy172; + } else { + if(yych == 'P') goto yy499; + goto yy172; + } + } else { + if(yych <= '`') { + if(yych == '_') goto yy172; + } else { + if(yych == 'p') goto yy499; + if(yych <= 'z') goto yy172; + } + } +yy498: +#line 64 "src/sc_man_scanner.re" + { RET(TK_Default); } +#line 3402 "src/sc_man_scanner.h" +yy499: + yych = *++YYCURSOR; + if(yych == 'R') goto yy500; + if(yych != 'r') goto yy173; +yy500: + yych = *++YYCURSOR; + if(yych == 'O') goto yy501; + if(yych != 'o') goto yy173; +yy501: + yych = *++YYCURSOR; + if(yych == 'P') goto yy502; + if(yych != 'p') goto yy173; +yy502: + yych = *++YYCURSOR; + if(yych == 'E') goto yy503; + if(yych != 'e') goto yy173; +yy503: + yych = *++YYCURSOR; + if(yych == 'R') goto yy504; + if(yych != 'r') goto yy173; +yy504: + yych = *++YYCURSOR; + if(yych == 'T') goto yy505; + if(yych != 't') goto yy173; +yy505: + yych = *++YYCURSOR; + if(yych == 'I') goto yy506; + if(yych != 'i') goto yy173; +yy506: + yych = *++YYCURSOR; + if(yych == 'E') goto yy507; + if(yych != 'e') goto yy173; +yy507: + yych = *++YYCURSOR; + if(yych == 'S') goto yy508; + if(yych != 's') goto yy173; +yy508: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy509; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy509; + if(yych <= 'z') goto yy172; + } + } +yy509: +#line 111 "src/sc_man_scanner.re" + { RET(TK_DefaultProperties); } +#line 3456 "src/sc_man_scanner.h" +yy510: + yych = *++YYCURSOR; + if(yych == 'S') goto yy549; + if(yych == 's') goto yy549; + goto yy173; +yy511: + yych = *++YYCURSOR; + if(yych == 'A') goto yy546; + if(yych == 'a') goto yy546; + goto yy173; +yy512: + yych = *++YYCURSOR; + if(yych == 'A') goto yy542; + if(yych == 'a') goto yy542; + goto yy173; +yy513: + yych = *++YYCURSOR; + if(yych <= 'N') { + if(yych <= 'K') { + if(yych == 'E') goto yy521; + goto yy173; + } else { + if(yych <= 'L') goto yy520; + if(yych <= 'M') goto yy173; + goto yy519; + } + } else { + if(yych <= 'k') { + if(yych == 'e') goto yy521; + goto yy173; + } else { + if(yych <= 'l') goto yy520; + if(yych == 'n') goto yy519; + goto yy173; + } + } +yy514: + yych = *++YYCURSOR; + if(yych == 'O') goto yy515; + if(yych != 'o') goto yy173; +yy515: + yych = *++YYCURSOR; + if(yych == 'S') goto yy516; + if(yych != 's') goto yy173; +yy516: + yych = *++YYCURSOR; + if(yych == 'S') goto yy517; + if(yych != 's') goto yy173; +yy517: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy518; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy518; + if(yych <= 'z') goto yy172; + } + } +yy518: +#line 125 "src/sc_man_scanner.re" + { RET(TK_Cross); } +#line 3522 "src/sc_man_scanner.h" +yy519: + yych = *++YYCURSOR; + if(yych <= 'T') { + if(yych <= 'F') { + if(yych <= 'E') goto yy173; + goto yy529; + } else { + if(yych <= 'R') goto yy173; + if(yych <= 'S') goto yy530; + goto yy531; + } + } else { + if(yych <= 'r') { + if(yych == 'f') goto yy529; + goto yy173; + } else { + if(yych <= 's') goto yy530; + if(yych <= 't') goto yy531; + goto yy173; + } + } +yy520: + yych = *++YYCURSOR; + if(yych == 'O') goto yy526; + if(yych == 'o') goto yy526; + goto yy173; +yy521: + yych = *++YYCURSOR; + if(yych == 'R') goto yy522; + if(yych != 'r') goto yy173; +yy522: + yych = *++YYCURSOR; + if(yych == 'C') goto yy523; + if(yych != 'c') goto yy173; +yy523: + yych = *++YYCURSOR; + if(yych == 'E') goto yy524; + if(yych != 'e') goto yy173; +yy524: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy525; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy525; + if(yych <= 'z') goto yy172; + } + } +yy525: +#line 131 "src/sc_man_scanner.re" + { RET(TK_Coerce); } +#line 3578 "src/sc_man_scanner.h" +yy526: + yych = *++YYCURSOR; + if(yych == 'R') goto yy527; + if(yych != 'r') goto yy173; +yy527: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy528; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy528; + if(yych <= 'z') goto yy172; + } + } +yy528: +#line 99 "src/sc_man_scanner.re" + { RET(TK_Color); } +#line 3600 "src/sc_man_scanner.h" +yy529: + yych = *++YYCURSOR; + if(yych == 'I') goto yy539; + if(yych == 'i') goto yy539; + goto yy173; +yy530: + yych = *++YYCURSOR; + if(yych == 'T') goto yy537; + if(yych == 't') goto yy537; + goto yy173; +yy531: + yych = *++YYCURSOR; + if(yych == 'I') goto yy532; + if(yych != 'i') goto yy173; +yy532: + yych = *++YYCURSOR; + if(yych == 'N') goto yy533; + if(yych != 'n') goto yy173; +yy533: + yych = *++YYCURSOR; + if(yych == 'U') goto yy534; + if(yych != 'u') goto yy173; +yy534: + yych = *++YYCURSOR; + if(yych == 'E') goto yy535; + if(yych != 'e') goto yy173; +yy535: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy536; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy536; + if(yych <= 'z') goto yy172; + } + } +yy536: +#line 63 "src/sc_man_scanner.re" + { RET(TK_Continue); } +#line 3644 "src/sc_man_scanner.h" +yy537: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy538; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy538; + if(yych <= 'z') goto yy172; + } + } +yy538: +#line 62 "src/sc_man_scanner.re" + { RET(TK_Const); } +#line 3662 "src/sc_man_scanner.h" +yy539: + yych = *++YYCURSOR; + if(yych == 'G') goto yy540; + if(yych != 'g') goto yy173; +yy540: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy541; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy541; + if(yych <= 'z') goto yy172; + } + } +yy541: +#line 130 "src/sc_man_scanner.re" + { RET(TK_Config); } +#line 3684 "src/sc_man_scanner.h" +yy542: + yych = *++YYCURSOR; + if(yych == 'S') goto yy543; + if(yych != 's') goto yy173; +yy543: + yych = *++YYCURSOR; + if(yych == 'S') goto yy544; + if(yych != 's') goto yy173; +yy544: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy545; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy545; + if(yych <= 'z') goto yy172; + } + } +yy545: +#line 92 "src/sc_man_scanner.re" + { RET(TK_Class); } +#line 3710 "src/sc_man_scanner.h" +yy546: + yych = *++YYCURSOR; + if(yych == 'R') goto yy547; + if(yych != 'r') goto yy173; +yy547: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy548; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy548; + if(yych <= 'z') goto yy172; + } + } +yy548: +#line 81 "src/sc_man_scanner.re" + { RET(TK_Char); } +#line 3732 "src/sc_man_scanner.h" +yy549: + yych = *++YYCURSOR; + if(yych == 'E') goto yy550; + if(yych != 'e') goto yy173; +yy550: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy551; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy551; + if(yych <= 'z') goto yy172; + } + } +yy551: +#line 61 "src/sc_man_scanner.re" + { RET(TK_Case); } +#line 3754 "src/sc_man_scanner.h" +yy552: + yych = *++YYCURSOR; + if(yych == 'O') goto yy562; + if(yych == 'o') goto yy562; + goto yy173; +yy553: + yych = *++YYCURSOR; + if(yych == 'E') goto yy558; + if(yych == 'e') goto yy558; + goto yy173; +yy554: + yych = *++YYCURSOR; + if(yych == 'T') goto yy555; + if(yych != 't') goto yy173; +yy555: + yych = *++YYCURSOR; + if(yych == 'E') goto yy556; + if(yych != 'e') goto yy173; +yy556: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy557; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy557; + if(yych <= 'z') goto yy172; + } + } +yy557: +#line 82 "src/sc_man_scanner.re" + { RET(TK_Byte); } +#line 3790 "src/sc_man_scanner.h" +yy558: + yych = *++YYCURSOR; + if(yych == 'A') goto yy559; + if(yych != 'a') goto yy173; +yy559: + yych = *++YYCURSOR; + if(yych == 'K') goto yy560; + if(yych != 'k') goto yy173; +yy560: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy561; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy561; + if(yych <= 'z') goto yy172; + } + } +yy561: +#line 60 "src/sc_man_scanner.re" + { RET(TK_Break); } +#line 3816 "src/sc_man_scanner.h" +yy562: + yych = *++YYCURSOR; + if(yych == 'L') goto yy563; + if(yych != 'l') goto yy173; +yy563: + ++YYCURSOR; + if((yych = *YYCURSOR) <= 'Z') { + if(yych <= '/') goto yy564; + if(yych <= '9') goto yy172; + if(yych >= 'A') goto yy172; + } else { + if(yych <= '_') { + if(yych >= '_') goto yy172; + } else { + if(yych <= '`') goto yy564; + if(yych <= 'z') goto yy172; + } + } +yy564: +#line 78 "src/sc_man_scanner.re" + { RET(TK_Bool); } +#line 3838 "src/sc_man_scanner.h" +yy565: + ++YYCURSOR; +#line 165 "src/sc_man_scanner.re" + { RET(TK_DivEq); } +#line 3843 "src/sc_man_scanner.h" +yy567: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych == 0x0A) goto yy571; + goto yy567; +yy569: + ++YYCURSOR; +#line 56 "src/sc_man_scanner.re" + { goto comment; } +#line 3854 "src/sc_man_scanner.h" +yy571: + ++YYCURSOR; +#line 57 "src/sc_man_scanner.re" + { goto newline; } +#line 3859 "src/sc_man_scanner.h" +} +#line 212 "src/sc_man_scanner.re" + + } + if (!CMode) // The classic Hexen scanner. + { + +#line 3867 "src/sc_man_scanner.h" +{ + YYCTYPE yych; + unsigned int yyaccept = 0; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if(yych <= '/') { if(yych <= ' ') { - if(yych == 0x0A) goto yy8; - goto yy6; + if(yych == 0x0A) goto yy581; + goto yy579; } else { - if(yych == '"') goto yy10; - if(yych <= '.') goto yy14; - goto yy3; + if(yych == '"') goto yy583; + if(yych <= '.') goto yy587; + goto yy576; } } else { if(yych <= '<') { - if(yych == ';') goto yy5; - goto yy14; + if(yych == ';') goto yy578; + goto yy587; } else { - if(yych <= '=') goto yy12; - if(yych <= 'z') goto yy14; - if(yych <= '}') goto yy12; - goto yy14; + if(yych <= '=') goto yy585; + if(yych <= 'z') goto yy587; + if(yych <= '}') goto yy585; + goto yy587; } } -yy2: -#line 57 "src/sc_man_scanner.re" +yy575: +#line 227 "src/sc_man_scanner.re" { goto normal_token; } -#line 66 "src/sc_man_scanner.h" -yy3: +#line 3896 "src/sc_man_scanner.h" +yy576: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yych <= '/') { if(yych <= '"') { - if(yych == '!') goto yy19; + if(yych == '!') goto yy592; } else { - if(yych == '*') goto yy27; - if(yych <= '.') goto yy19; - goto yy23; + if(yych == '*') goto yy600; + if(yych <= '.') goto yy592; + goto yy596; } } else { if(yych <= '<') { - if(yych != ';') goto yy19; + if(yych != ';') goto yy592; } else { - if(yych <= '=') goto yy4; - if(yych <= 'z') goto yy19; - if(yych >= '~') goto yy19; + if(yych <= '=') goto yy577; + if(yych <= 'z') goto yy592; + if(yych >= '~') goto yy592; } } -yy4: -#line 59 "src/sc_man_scanner.re" +yy577: +#line 229 "src/sc_man_scanner.re" { goto normal_token; } -#line 90 "src/sc_man_scanner.h" -yy5: +#line 3920 "src/sc_man_scanner.h" +yy578: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - goto yy24; -yy6: + goto yy597; +yy579: ++YYCURSOR; yych = *YYCURSOR; - goto yy22; -yy7: -#line 50 "src/sc_man_scanner.re" + goto yy595; +yy580: +#line 220 "src/sc_man_scanner.re" { goto std1; } -#line 102 "src/sc_man_scanner.h" -yy8: +#line 3932 "src/sc_man_scanner.h" +yy581: ++YYCURSOR; -#line 51 "src/sc_man_scanner.re" +#line 221 "src/sc_man_scanner.re" { goto newline; } -#line 107 "src/sc_man_scanner.h" -yy10: +#line 3937 "src/sc_man_scanner.h" +yy583: ++YYCURSOR; -#line 52 "src/sc_man_scanner.re" +#line 222 "src/sc_man_scanner.re" { goto string; } -#line 112 "src/sc_man_scanner.h" -yy12: +#line 3942 "src/sc_man_scanner.h" +yy585: ++YYCURSOR; -#line 54 "src/sc_man_scanner.re" +#line 224 "src/sc_man_scanner.re" { goto normal_token; } -#line 117 "src/sc_man_scanner.h" -yy14: +#line 3947 "src/sc_man_scanner.h" +yy587: yyaccept = 1; yych = *(YYMARKER = ++YYCURSOR); - goto yy18; -yy15: + goto yy591; +yy588: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; if(yych <= '/') { if(yych <= '"') { - if(yych == '!') goto yy19; + if(yych == '!') goto yy592; } else { - if(yych == '*') goto yy16; - if(yych <= '.') goto yy19; + if(yych == '*') goto yy589; + if(yych <= '.') goto yy592; } } else { if(yych <= '<') { - if(yych != ';') goto yy19; + if(yych != ';') goto yy592; } else { - if(yych <= '=') goto yy16; - if(yych <= 'z') goto yy19; - if(yych >= '~') goto yy19; + if(yych <= '=') goto yy589; + if(yych <= 'z') goto yy592; + if(yych >= '~') goto yy592; } } -yy16: +yy589: YYCURSOR = YYMARKER; if(yyaccept <= 0) { - goto yy4; + goto yy577; } else { - goto yy2; + goto yy575; } -yy17: +yy590: yyaccept = 1; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy18: +yy591: if(yych <= ':') { if(yych <= '"') { - if(yych == '!') goto yy17; - goto yy2; + if(yych == '!') goto yy590; + goto yy575; } else { - if(yych == '/') goto yy15; - goto yy17; + if(yych == '/') goto yy588; + goto yy590; } } else { if(yych <= '=') { - if(yych == '<') goto yy17; - goto yy2; + if(yych == '<') goto yy590; + goto yy575; } else { - if(yych <= 'z') goto yy17; - if(yych <= '}') goto yy2; - goto yy17; + if(yych <= 'z') goto yy590; + if(yych <= '}') goto yy575; + goto yy590; } } -yy19: +yy592: yyaccept = 1; YYMARKER = ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; if(yych <= ':') { if(yych <= '"') { - if(yych == '!') goto yy19; - goto yy2; + if(yych == '!') goto yy592; + goto yy575; } else { - if(yych == '/') goto yy15; - goto yy19; + if(yych == '/') goto yy588; + goto yy592; } } else { if(yych <= '=') { - if(yych == '<') goto yy19; - goto yy2; + if(yych == '<') goto yy592; + goto yy575; } else { - if(yych <= 'z') goto yy19; - if(yych <= '}') goto yy2; - goto yy19; + if(yych <= 'z') goto yy592; + if(yych <= '}') goto yy575; + goto yy592; } } -yy21: +yy594: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy22: - if(yych == 0x0A) goto yy7; - if(yych <= ' ') goto yy21; - goto yy7; -yy23: +yy595: + if(yych == 0x0A) goto yy580; + if(yych <= ' ') goto yy594; + goto yy580; +yy596: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy24: - if(yych != 0x0A) goto yy23; +yy597: + if(yych != 0x0A) goto yy596; ++YYCURSOR; -#line 48 "src/sc_man_scanner.re" +#line 218 "src/sc_man_scanner.re" { goto newline; } -#line 213 "src/sc_man_scanner.h" -yy27: +#line 4043 "src/sc_man_scanner.h" +yy600: ++YYCURSOR; -#line 47 "src/sc_man_scanner.re" +#line 217 "src/sc_man_scanner.re" { goto comment; } -#line 218 "src/sc_man_scanner.h" +#line 4048 "src/sc_man_scanner.h" } -#line 60 "src/sc_man_scanner.re" +#line 230 "src/sc_man_scanner.re" } - else + else // A modified Hexen scanner for DECORATE. { -#line 226 "src/sc_man_scanner.h" +#line 4056 "src/sc_man_scanner.h" { YYCTYPE yych; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); @@ -230,253 +4060,254 @@ yy27: if(yych <= ':') { if(yych <= '&') { if(yych <= ' ') { - if(yych == 0x0A) goto yy35; - goto yy33; + if(yych == 0x0A) goto yy608; + goto yy606; } else { - if(yych == '"') goto yy37; - if(yych <= '%') goto yy50; - goto yy45; + if(yych == '"') goto yy610; + if(yych <= '%') goto yy623; + goto yy618; } } else { if(yych <= '-') { - if(yych <= '\'') goto yy51; - if(yych <= ',') goto yy50; - goto yy39; + if(yych <= '\'') goto yy624; + if(yych <= ',') goto yy623; + goto yy612; } else { - if(yych <= '.') goto yy43; - if(yych <= '/') goto yy31; - if(yych <= '9') goto yy41; - goto yy44; + if(yych <= '.') goto yy616; + if(yych <= '/') goto yy604; + if(yych <= '9') goto yy614; + goto yy617; } } } else { if(yych <= '^') { if(yych <= '=') { - if(yych <= ';') goto yy50; - if(yych <= '<') goto yy48; - goto yy46; + if(yych <= ';') goto yy623; + if(yych <= '<') goto yy621; + goto yy619; } else { - if(yych <= '>') goto yy49; - if(yych <= '@') goto yy50; - if(yych <= 'Z') goto yy51; - goto yy50; + if(yych <= '>') goto yy622; + if(yych <= '@') goto yy623; + if(yych <= 'Z') goto yy624; + goto yy623; } } else { if(yych <= 'z') { - if(yych == '`') goto yy50; - goto yy51; + if(yych == '`') goto yy623; + goto yy624; } else { - if(yych == '|') goto yy47; - if(yych <= '~') goto yy50; - goto yy51; + if(yych == '|') goto yy620; + if(yych <= '~') goto yy623; + goto yy624; } } } -yy31: +yy604: yych = *(YYMARKER = ++YYCURSOR); - if(yych == '*') goto yy77; - if(yych == '/') goto yy75; -yy32: -#line 80 "src/sc_man_scanner.re" + if(yych == '*') goto yy650; + if(yych == '/') goto yy648; +yy605: +#line 250 "src/sc_man_scanner.re" { goto normal_token; } -#line 283 "src/sc_man_scanner.h" -yy33: +#line 4113 "src/sc_man_scanner.h" +yy606: ++YYCURSOR; yych = *YYCURSOR; - goto yy74; -yy34: -#line 68 "src/sc_man_scanner.re" + goto yy647; +yy607: +#line 238 "src/sc_man_scanner.re" { goto std1; } -#line 291 "src/sc_man_scanner.h" -yy35: +#line 4121 "src/sc_man_scanner.h" +yy608: ++YYCURSOR; -#line 69 "src/sc_man_scanner.re" +#line 239 "src/sc_man_scanner.re" { goto newline; } -#line 296 "src/sc_man_scanner.h" -yy37: +#line 4126 "src/sc_man_scanner.h" +yy610: ++YYCURSOR; -#line 70 "src/sc_man_scanner.re" +#line 240 "src/sc_man_scanner.re" { goto string; } -#line 301 "src/sc_man_scanner.h" -yy39: +#line 4131 "src/sc_man_scanner.h" +yy612: ++YYCURSOR; -#line 72 "src/sc_man_scanner.re" +#line 242 "src/sc_man_scanner.re" { goto negative_check; } -#line 306 "src/sc_man_scanner.h" -yy41: +#line 4136 "src/sc_man_scanner.h" +yy614: ++YYCURSOR; - if((yych = *YYCURSOR) == '.') goto yy71; - if(yych <= '/') goto yy53; - if(yych <= '9') goto yy69; - goto yy53; -yy42: -#line 81 "src/sc_man_scanner.re" + if((yych = *YYCURSOR) == '.') goto yy644; + if(yych <= '/') goto yy626; + if(yych <= '9') goto yy642; + goto yy626; +yy615: +#line 251 "src/sc_man_scanner.re" { goto normal_token; } -#line 316 "src/sc_man_scanner.h" -yy43: +#line 4146 "src/sc_man_scanner.h" +yy616: yych = *++YYCURSOR; - if(yych <= '/') goto yy32; - if(yych <= '9') goto yy66; - goto yy32; -yy44: + if(yych <= '/') goto yy605; + if(yych <= '9') goto yy639; + goto yy605; +yy617: yych = *++YYCURSOR; - if(yych == ':') goto yy64; - goto yy32; -yy45: + if(yych == ':') goto yy637; + goto yy605; +yy618: yych = *++YYCURSOR; - if(yych == '&') goto yy62; - goto yy32; -yy46: + if(yych == '&') goto yy635; + goto yy605; +yy619: yych = *++YYCURSOR; - if(yych == '=') goto yy60; - goto yy32; -yy47: + if(yych == '=') goto yy633; + goto yy605; +yy620: yych = *++YYCURSOR; - if(yych == '|') goto yy58; - goto yy32; -yy48: + if(yych == '|') goto yy631; + goto yy605; +yy621: yych = *++YYCURSOR; - if(yych == '<') goto yy56; - goto yy32; -yy49: + if(yych == '<') goto yy629; + goto yy605; +yy622: yych = *++YYCURSOR; - if(yych == '>') goto yy54; - goto yy32; -yy50: + if(yych == '>') goto yy627; + goto yy605; +yy623: yych = *++YYCURSOR; - goto yy32; -yy51: + goto yy605; +yy624: yych = *++YYCURSOR; - goto yy53; -yy52: + goto yy626; +yy625: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy53: +yy626: if(yych <= 'Z') { if(yych <= '/') { - if(yych == '\'') goto yy52; - goto yy42; + if(yych == '\'') goto yy625; + goto yy615; } else { - if(yych <= '9') goto yy52; - if(yych <= '@') goto yy42; - goto yy52; + if(yych <= '9') goto yy625; + if(yych <= '@') goto yy615; + goto yy625; } } else { if(yych <= '`') { - if(yych == '_') goto yy52; - goto yy42; + if(yych == '_') goto yy625; + goto yy615; } else { - if(yych <= 'z') goto yy52; - if(yych <= '~') goto yy42; - goto yy52; + if(yych <= 'z') goto yy625; + if(yych <= '~') goto yy615; + goto yy625; } } -yy54: +yy627: ++YYCURSOR; -#line 79 "src/sc_man_scanner.re" +#line 249 "src/sc_man_scanner.re" { goto normal_token; } -#line 380 "src/sc_man_scanner.h" -yy56: +#line 4210 "src/sc_man_scanner.h" +yy629: ++YYCURSOR; -#line 78 "src/sc_man_scanner.re" +#line 248 "src/sc_man_scanner.re" { goto normal_token; } -#line 385 "src/sc_man_scanner.h" -yy58: +#line 4215 "src/sc_man_scanner.h" +yy631: ++YYCURSOR; -#line 77 "src/sc_man_scanner.re" +#line 247 "src/sc_man_scanner.re" { goto normal_token; } -#line 390 "src/sc_man_scanner.h" -yy60: +#line 4220 "src/sc_man_scanner.h" +yy633: ++YYCURSOR; -#line 76 "src/sc_man_scanner.re" +#line 246 "src/sc_man_scanner.re" { goto normal_token; } -#line 395 "src/sc_man_scanner.h" -yy62: +#line 4225 "src/sc_man_scanner.h" +yy635: ++YYCURSOR; -#line 75 "src/sc_man_scanner.re" +#line 245 "src/sc_man_scanner.re" { goto normal_token; } -#line 400 "src/sc_man_scanner.h" -yy64: +#line 4230 "src/sc_man_scanner.h" +yy637: ++YYCURSOR; -#line 74 "src/sc_man_scanner.re" +#line 244 "src/sc_man_scanner.re" { goto normal_token; } -#line 405 "src/sc_man_scanner.h" -yy66: +#line 4235 "src/sc_man_scanner.h" +yy639: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych <= '/') goto yy68; - if(yych <= '9') goto yy66; -yy68: -#line 73 "src/sc_man_scanner.re" + if(yych <= '/') goto yy641; + if(yych <= '9') goto yy639; +yy641: +#line 243 "src/sc_man_scanner.re" { goto normal_token; } -#line 415 "src/sc_man_scanner.h" -yy69: +#line 4245 "src/sc_man_scanner.h" +yy642: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; if(yych <= '@') { if(yych <= '-') { - if(yych == '\'') goto yy52; - goto yy42; + if(yych == '\'') goto yy625; + goto yy615; } else { - if(yych <= '.') goto yy71; - if(yych <= '/') goto yy42; - if(yych <= '9') goto yy69; - goto yy42; + if(yych <= '.') goto yy644; + if(yych <= '/') goto yy615; + if(yych <= '9') goto yy642; + goto yy615; } } else { if(yych <= '_') { - if(yych <= 'Z') goto yy52; - if(yych <= '^') goto yy42; - goto yy52; + if(yych <= 'Z') goto yy625; + if(yych <= '^') goto yy615; + goto yy625; } else { - if(yych <= '`') goto yy42; - if(yych <= 'z') goto yy52; - if(yych <= '~') goto yy42; - goto yy52; + if(yych <= '`') goto yy615; + if(yych <= 'z') goto yy625; + if(yych <= '~') goto yy615; + goto yy625; } } -yy71: +yy644: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych <= '/') goto yy68; - if(yych <= '9') goto yy71; - goto yy68; -yy73: + if(yych <= '/') goto yy641; + if(yych <= '9') goto yy644; + goto yy641; +yy646: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy74: - if(yych == 0x0A) goto yy34; - if(yych <= ' ') goto yy73; - goto yy34; -yy75: +yy647: + if(yych == 0x0A) goto yy607; + if(yych <= ' ') goto yy646; + goto yy607; +yy648: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych == 0x0A) goto yy79; - goto yy75; -yy77: + if(yych == 0x0A) goto yy652; + goto yy648; +yy650: ++YYCURSOR; -#line 65 "src/sc_man_scanner.re" +#line 235 "src/sc_man_scanner.re" { goto comment; } -#line 467 "src/sc_man_scanner.h" -yy79: +#line 4297 "src/sc_man_scanner.h" +yy652: ++YYCURSOR; -#line 66 "src/sc_man_scanner.re" +#line 236 "src/sc_man_scanner.re" { goto newline; } -#line 472 "src/sc_man_scanner.h" +#line 4302 "src/sc_man_scanner.h" } -#line 84 "src/sc_man_scanner.re" +#line 254 "src/sc_man_scanner.re" } negative_check: // re2c doesn't have enough state to handle '-' as the start of a negative number // and as its own token, so help it out a little. + sc_TokenType = '-'; if (YYCURSOR >= YYLIMIT) { goto normal_token; @@ -497,57 +4328,60 @@ negative_check: comment: -#line 501 "src/sc_man_scanner.h" +#line 4332 "src/sc_man_scanner.h" { YYCTYPE yych; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; - if(yych == 0x0A) goto yy85; - if(yych != '*') goto yy87; + if(yych == 0x0A) goto yy658; + if(yych != '*') goto yy660; ++YYCURSOR; - if((yych = *YYCURSOR) == '/') goto yy88; -yy84: -#line 130 "src/sc_man_scanner.re" + if((yych = *YYCURSOR) == '/') goto yy661; +yy657: +#line 303 "src/sc_man_scanner.re" { goto comment; } -#line 513 "src/sc_man_scanner.h" -yy85: +#line 4344 "src/sc_man_scanner.h" +yy658: ++YYCURSOR; -#line 120 "src/sc_man_scanner.re" +#line 292 "src/sc_man_scanner.re" { if (YYCURSOR >= YYLIMIT) { ScriptPtr = ScriptEndPtr; - return false; + return_val = false; + goto end; } sc_Line++; sc_Crossed = true; goto comment; } -#line 527 "src/sc_man_scanner.h" -yy87: +#line 4359 "src/sc_man_scanner.h" +yy660: yych = *++YYCURSOR; - goto yy84; -yy88: + goto yy657; +yy661: ++YYCURSOR; -#line 111 "src/sc_man_scanner.re" +#line 282 "src/sc_man_scanner.re" { if (YYCURSOR >= YYLIMIT) { ScriptPtr = ScriptEndPtr; - return false; + return_val = false; + goto end; } goto std1; } -#line 542 "src/sc_man_scanner.h" +#line 4375 "src/sc_man_scanner.h" } -#line 131 "src/sc_man_scanner.re" +#line 304 "src/sc_man_scanner.re" newline: if (YYCURSOR >= YYLIMIT) { ScriptPtr = ScriptEndPtr; - return false; + return_val = false; + goto end; } sc_Line++; sc_Crossed = true; @@ -556,15 +4390,25 @@ newline: normal_token: ScriptPtr = (YYCURSOR >= YYLIMIT) ? ScriptEndPtr : cursor; sc_StringLen = MIN (ScriptPtr - tok, MAX_STRING_SIZE-1); - memcpy (sc_String, tok, sc_StringLen); + if (tokens && (sc_TokenType == TK_StringConst || sc_TokenType == TK_NameConst)) + { + sc_StringLen -= 2; + memcpy (sc_String, tok+1, sc_StringLen); + } + else + { + memcpy (sc_String, tok, sc_StringLen); + } sc_String[sc_StringLen] = '\0'; - return true; + return_val = true; + goto end; string: if (YYLIMIT != ScriptEndPtr) { ScriptPtr = ScriptEndPtr; - return false; + return_val = false; + goto end; } ScriptPtr = cursor; for (sc_StringLen = 0; cursor < YYLIMIT; ++cursor) @@ -604,4 +4448,5 @@ string: } ScriptPtr = cursor + 1; sc_String[sc_StringLen] = '\0'; - return true; + return_val = true; +end: diff --git a/src/sc_man_scanner.re b/src/sc_man_scanner.re index 0bf994e5e..8f2df5205 100644 --- a/src/sc_man_scanner.re +++ b/src/sc_man_scanner.re @@ -2,19 +2,21 @@ #define YYCURSOR cursor #define YYLIMIT limit #define YYMARKER marker - +#define YYFILL(n) {} +#if 0 // As long as the buffer ends with '\n', we need do nothing special for YYFILL. // This buffer must be as large as the largest YYFILL call - YYCTYPE eofbuf[3]; + YYCTYPE eofbuf[9]; #define YYFILL(n) \ { if(!sc_End) { \ if(n == 2) { eofbuf[0] = *cursor; } \ - else if(n == 3) { eofbuf[0] = *cursor; eofbuf[1] = *(cursor + 1); } \ + else if(n >= 3 && n <= 9) { memcpy(eofbuf, cursor, n-1); } \ eofbuf[n-1] = '\n'; \ cursor = eofbuf; \ limit = eofbuf + n - 1; \ sc_End = true; } \ } \ - assert(n <= 3) // Semicolon intentionally omitted + assert(n <= sizeof eofbuf) // Semicolon intentionally omitted +#endif //#define YYDEBUG(s,c) { Printf ("%d: %02x\n", s, c); } #define YYDEBUG(s,c) @@ -29,8 +31,14 @@ std2: any = [\000-\377]; WSP = ([\000- ]\[\n]); NWS = (any\[\000- ]); + O = [0-7]; D = [0-9]; - X = [0-9A-Fa-f]; + L = [a-zA-Z_]; + H = [a-fA-F0-9]; + E = [Ee] [+-]? D+; + FS = [fFlL]; + IS = [uUlL]; + ESC = [\\] ([abcfnrtv?'"\\] | "x" H+ | O+); TOK1 = [{}|=]; TOKC = [{}|=/`~!@#$%^&*()\[\]\\?\-=+;:<>,.]; @@ -41,7 +49,169 @@ std2: TOK2 = (NWS\STOP1); TOKC2 = (NWS\STOPC); */ - if (!CMode) + if (tokens) // A well-defined scanner, based on the c.re example. + { +#define RET(x) sc_TokenType = x; goto normal_token; + /*!re2c + "/*" { goto comment; } /* C comment */ + "//" (any\"\n")* "\n" { goto newline; } /* C++ comment */ + + /* C Keywords */ + 'break' { RET(TK_Break); } + 'case' { RET(TK_Case); } + 'const' { RET(TK_Const); } + 'continue' { RET(TK_Continue); } + 'default' { RET(TK_Default); } + 'do' { RET(TK_Do); } + 'else' { RET(TK_Else); } + 'for' { RET(TK_For); } + 'goto' { RET(TK_Goto); } + 'if' { RET(TK_If); } + 'return' { RET(TK_Return); } + 'states' { RET(TK_States); } + 'switch' { RET(TK_Switch); } + 'until' { RET(TK_Until); } + 'volatile' { RET(TK_Volatile); } + 'while' { RET(TK_While); } + + /* Type names */ + 'bool' { RET(TK_Bool); } + 'float' { RET(TK_Float); } + 'double' { RET(TK_Double); } + 'char' { RET(TK_Char); } + 'byte' { RET(TK_Byte); } + 'sbyte' { RET(TK_SByte); } + 'short' { RET(TK_Short); } + 'ushort' { RET(TK_UShort); } + 'int' { RET(TK_Int); } + 'uint' { RET(TK_UInt); } + 'long' { RET(TK_Long); } + 'ulong' { RET(TK_ULong); } + 'void' { RET(TK_Void); } + 'struct' { RET(TK_Struct); } + 'class' { RET(TK_Class); } + 'mode' { RET(TK_Mode); } + 'enum' { RET(TK_Enum); } + 'name' { RET(TK_Name); } + 'string' { RET(TK_String); } + 'sound' { RET(TK_Sound); } + 'state' { RET(TK_State); } + 'color' { RET(TK_Color); } + + /* Other keywords from UnrealScript */ + 'abstract' { RET(TK_Abstract); } + 'foreach' { RET(TK_ForEach); } + 'true' { RET(TK_True); } + 'false' { RET(TK_False); } + 'none' { RET(TK_None); } + 'new' { RET(TK_New); } + 'instanceof' { RET(TK_InstanceOf); } + 'auto' { RET(TK_Auto); } + 'exec' { RET(TK_Exec); } + 'defaultproperties' { RET(TK_DefaultProperties); } + 'native' { RET(TK_Native); } + 'out' { RET(TK_Out); } + 'ref' { RET(TK_Ref); } + 'event' { RET(TK_Event); } + 'static' { RET(TK_Static); } + 'transient' { RET(TK_Transient); } + 'final' { RET(TK_Final); } + 'throws' { RET(TK_Throws); } + 'extends' { RET(TK_Extends); } + 'public' { RET(TK_Public); } + 'protected' { RET(TK_Protected); } + 'private' { RET(TK_Private); } + 'dot' { RET(TK_Dot); } + 'cross' { RET(TK_Cross); } + 'ignores' { RET(TK_Ignores); } + 'localized' { RET(TK_Localized); } + 'latent' { RET(TK_Latent); } + 'singular' { RET(TK_Singular); } + 'config' { RET(TK_Config); } + 'coerce' { RET(TK_Coerce); } + 'iterator' { RET(TK_Iterator); } + 'optional' { RET(TK_Optional); } + 'export' { RET(TK_Export); } + 'virtual' { RET(TK_Virtual); } + 'super' { RET(TK_Super); } + 'global' { RET(TK_Global); } + 'self' { RET(TK_Self); } + 'stop' { RET(TK_Stop); } + + /* Needed for decorate action functions */ + "eval" { RET(TK_Eval); } + "evalnot" { RET(TK_EvalNot); } + + L (L|D)* { RET(TK_Identifier); } + + ("0" [xX] H+ IS?) | ("0" D+ IS?) | (D+ IS?) + { RET(TK_IntConst); } + + (D+ E FS?) | (D* "." D+ E? FS?) | (D+ "." D* E? FS?) + { RET(TK_FloatConst); } + + (["] (ESC|any\[\n\\"])* ["]) + { RET(TK_StringConst); } + + (['] (any\[\n'])* [']) + { RET(TK_NameConst); } + + "..." { RET(TK_Ellipsis); } + ">>=" { RET(TK_RShiftEq); } + "<<=" { RET(TK_LShiftEq); } + "+=" { RET(TK_AddEq); } + "-=" { RET(TK_SubEq); } + "*=" { RET(TK_MulEq); } + "/=" { RET(TK_DivEq); } + "%=" { RET(TK_ModEq); } + "&=" { RET(TK_AndEq); } + "^=" { RET(TK_XorEq); } + "|=" { RET(TK_OrEq); } + ">>" { RET(TK_RShift); } + "<<" { RET(TK_LShift); } + "++" { RET(TK_Incr); } + "--" { RET(TK_Decr); } + "&&" { RET(TK_AndAnd); } + "||" { RET(TK_OrOr); } + "<=" { RET(TK_Leq); } + ">=" { RET(TK_Geq); } + "==" { RET(TK_Eq); } + "!=" { RET(TK_Neq); } + ";" { RET(';'); } + "{" { RET('{'); } + "}" { RET('}'); } + "," { RET(','); } + ":" { RET(':'); } + "=" { RET('='); } + "(" { RET('('); } + ")" { RET(')'); } + "[" { RET('['); } + "]" { RET(']'); } + "." { RET('.'); } + "&" { RET('&'); } + "!" { RET('!'); } + "~" { RET('~'); } + "-" { RET('-'); } + "+" { RET('+'); } + "*" { RET('*'); } + "/" { RET('/'); } + "%" { RET('%'); } + "<" { RET('<'); } + ">" { RET('>'); } + "^" { RET('^'); } + "|" { RET('|'); } + "?" { RET('?'); } + + [ \t\v\f\r]+ { goto std1; } + "\n" { goto newline; } + any + { + SC_ScriptError ("Unexpected character: %c (ASCII %d)\n", *tok, *tok); + goto std1; + } + */ + } + if (!CMode) // The classic Hexen scanner. { /*!re2c "/*" { goto comment; } /* C comment */ @@ -59,7 +229,7 @@ std2: any { goto normal_token; } /* unknown character */ */ } - else + else // A modified Hexen scanner for DECORATE. { /*!re2c "/*" { goto comment; } /* C comment */ @@ -87,6 +257,7 @@ std2: negative_check: // re2c doesn't have enough state to handle '-' as the start of a negative number // and as its own token, so help it out a little. + sc_TokenType = '-'; if (YYCURSOR >= YYLIMIT) { goto normal_token; @@ -112,7 +283,8 @@ comment: if (YYCURSOR >= YYLIMIT) { ScriptPtr = ScriptEndPtr; - return false; + return_val = false; + goto end; } goto std1; } @@ -121,7 +293,8 @@ comment: if (YYCURSOR >= YYLIMIT) { ScriptPtr = ScriptEndPtr; - return false; + return_val = false; + goto end; } sc_Line++; sc_Crossed = true; @@ -134,7 +307,8 @@ newline: if (YYCURSOR >= YYLIMIT) { ScriptPtr = ScriptEndPtr; - return false; + return_val = false; + goto end; } sc_Line++; sc_Crossed = true; @@ -143,15 +317,25 @@ newline: normal_token: ScriptPtr = (YYCURSOR >= YYLIMIT) ? ScriptEndPtr : cursor; sc_StringLen = MIN (ScriptPtr - tok, MAX_STRING_SIZE-1); - memcpy (sc_String, tok, sc_StringLen); + if (tokens && (sc_TokenType == TK_StringConst || sc_TokenType == TK_NameConst)) + { + sc_StringLen -= 2; + memcpy (sc_String, tok+1, sc_StringLen); + } + else + { + memcpy (sc_String, tok, sc_StringLen); + } sc_String[sc_StringLen] = '\0'; - return true; + return_val = true; + goto end; string: if (YYLIMIT != ScriptEndPtr) { ScriptPtr = ScriptEndPtr; - return false; + return_val = false; + goto end; } ScriptPtr = cursor; for (sc_StringLen = 0; cursor < YYLIMIT; ++cursor) @@ -191,4 +375,5 @@ string: } ScriptPtr = cursor + 1; sc_String[sc_StringLen] = '\0'; - return true; + return_val = true; +end: diff --git a/src/thingdef.cpp b/src/thingdef.cpp index e4dae34c4..f131ac747 100644 --- a/src/thingdef.cpp +++ b/src/thingdef.cpp @@ -361,7 +361,6 @@ static flagdef *FindFlag (const PClass *type, const char *part1, const char *par return NULL; } -int EvalExpressionI (int id, AActor *self); //=========================================================================== // // A_ChangeFlag @@ -1589,7 +1588,7 @@ bool DoSpecialFunctions(FState & state, bool multistate, int * statecount, Bagga { for (i = 0; i < 5;) { - StateParameters[paramindex+i+1]=ParseExpression (false); + StateParameters[paramindex+i+1]=ParseExpression (false, bag.Info->Class); i++; if (!SC_CheckString (",")) break; } @@ -1851,6 +1850,16 @@ do_stop: goto endofstate; } + //AFuncDesc * afd = FindFunction(sc_String); + //PSymbolActionFunction *sym = bag.Info->Class->Symbols.FindSymbol (FName(sc_String, true), true); + //if (sym != NULL && sym->SymbolType == SYM_ActionFunction) + //{ + // PSymbolActionFunction *afd = static_cast(sym); + // state.Action = afd->Function; + // if (!afd->Arguments.IsEmpty()) + // { + // const char *params = afd->Arguments.GetChars(); + // int numparams = afd->Arguments.Len(); AFuncDesc * afd = FindFunction(sc_String); if (afd != NULL) { @@ -1859,6 +1868,7 @@ do_stop: { const char * params = afd->parameters; int numparams = (int)strlen(params); + int v; if (!islower(*params)) @@ -1883,31 +1893,6 @@ do_stop: { switch(*params) { - /* - case 'A': - case 'a': // Angle - SC_MustGetFloat(); - v=(int)angle_t(sc_Float*ANGLE_1); - break; - - case 'B': - case 'b': // Byte - SC_MustGetNumber(); - v=clamp(sc_Number, 0, 255); - break; - - case '9': // 90 degree angle as integer - SC_MustGetNumber(); - v=clamp(sc_Number, 0, 90); - break; - - case '!': // not boolean (to simulate parameters which default to 1) - SC_MustGetNumber(); - v=!sc_Number; - break; - - */ - case 'I': case 'i': // Integer SC_MustGetNumber(); @@ -2038,12 +2023,12 @@ do_stop: case 'X': case 'x': - v = ParseExpression (false); + v = ParseExpression (false, bag.Info->Class); break; case 'Y': case 'y': - v = ParseExpression (true); + v = ParseExpression (true, bag.Info->Class); break; default: @@ -2543,6 +2528,153 @@ static void StatePropertyIsDeprecated (const char *actorname, const char *prop) // //========================================================================== +//========================================================================== +// +// ActorConstDef +// +// Parses a constant definition. +// +//========================================================================== + +static void ActorConstDef (AActor *defaults, Baggage &bag) +{ + // Read the type and make sure it's int. + // (Maybe there will be other types later.) + SC_MustGetToken(TK_Int); + SC_MustGetToken(TK_Identifier); + FName symname = sc_Name; + SC_MustGetToken('='); + int expr = ParseExpression (false, bag.Info->Class); + SC_MustGetToken(';'); + + int val = EvalExpressionI (expr, NULL, bag.Info->Class); + PSymbolConst *sym = new PSymbolConst; + sym->SymbolName = symname; + sym->SymbolType = SYM_Const; + sym->Value = val; + if (bag.Info->Class->Symbols.AddSymbol (sym) == NULL) + { + delete sym; + SC_ScriptError ("'%s' is already defined in class '%s'.", + symname.GetChars(), bag.Info->Class->TypeName.GetChars()); + } +} + +//========================================================================== +// +// ActorActionDef +// +// Parses an action function definition. +// +//========================================================================== + +static void ActorActionDef (AActor *defaults, Baggage &bag) +{ +#define OPTIONAL 1 +#define EVAL 2 +#define EVALNOT 4 + + FName funcname; + FString args; + + SC_MustGetToken(TK_Identifier); + funcname = sc_Name; + SC_MustGetToken('('); + while (sc_TokenType != ')') + { + int flags = 0; + char type = '@'; + + // Retrieve flags before type name + for (;;) + { + if (SC_CheckToken(TK_Optional)) + { + flags |= OPTIONAL; + } + else if (SC_CheckToken(TK_Eval)) + { + flags |= EVAL; + } + else if (SC_CheckToken(TK_EvalNot)) + { + flags |= EVALNOT; + } + else if (SC_CheckToken(TK_Coerce) || SC_CheckToken(TK_Native)) + { + } + else + { + break; + } + } + if (flags != 0) + { + SC_MustGetAnyToken(); + } + switch (sc_TokenType) + { + case TK_Int: type = 'i'; break; + case TK_Float: type = 'f'; break; + case TK_Sound: type = 's'; break; + case TK_String: type = 't'; break; + case TK_State: type = 'l'; break; + case TK_Color: type = 'c'; break; + case TK_Class: + SC_MustGetToken('<'); + SC_MustGetToken(TK_Identifier); + if (sc_Name != NAME_Actor) + { + SC_ScriptError ("Sorry, you can only use class"); + } + SC_MustGetToken('>'); + type = 'm'; + break; + case TK_Ellipsis: + type = '+'; + SC_MustGetToken(')'); + SC_UnGet(); + break; + default: + SC_ScriptError ("Unknown variable type %s", SC_TokenName(sc_TokenType, sc_String).GetChars()); + break; + } + if (flags & EVALNOT) + { + type = 'y'; + } + else if (flags & EVAL) + { + type = 'x'; + } + if (!(flags & OPTIONAL)) + { + type -= 'a' - 'A'; + break; + } +#undef OPTIONAL +#undef EVAL +#undef EVALNOT + args += type; + SC_MustGetAnyToken(); + if (sc_TokenType != ',' && sc_TokenType != ')') + { + SC_ScriptError ("Expected ',' or ')' but got %s instead", SC_TokenName(sc_TokenType, sc_String).GetChars()); + } + } + PSymbolActionFunction *sym = new PSymbolActionFunction; + sym->SymbolName = funcname; + sym->SymbolType = SYM_ActionFunction; + sym->Arguments = args; + sym->Function = NULL; + if (bag.Info->Class->Symbols.AddSymbol (sym) == NULL) + { + delete sym; + SC_ScriptError ("'%s' is already defined in class '%s'.", + funcname.GetChars(), bag.Info->Class->TypeName.GetChars()); + } +} + //========================================================================== // //========================================================================== @@ -2699,7 +2831,7 @@ static void ActorDamage (AActor *defaults, Baggage &bag) if (SC_CheckString ("(")) { - defaults->Damage = 0x40000000 | ParseExpression (false); + defaults->Damage = 0x40000000 | ParseExpression (false, bag.Info->Class); SC_MustGetStringName(")"); } else @@ -3997,7 +4129,7 @@ static void PlayerScoreIcon (APlayerPawn *defaults, Baggage &bag) static void PlayerCrouchSprite (APlayerPawn *defaults, Baggage &bag) { SC_MustGetString (); - for (int i = 0; i < sc_StringLen; i++) sc_String[i] = toupper (sc_String[i]); + for (unsigned int i = 0; i < sc_StringLen; i++) sc_String[i] = toupper (sc_String[i]); defaults->crouchsprite = GetSpriteIndex (sc_String); } @@ -4115,6 +4247,7 @@ static const ActorProps props[] = { { "+", ActorFlagSetOrReset, RUNTIME_CLASS(AActor) }, { "-", ActorFlagSetOrReset, RUNTIME_CLASS(AActor) }, + { "action", ActorActionDef, RUNTIME_CLASS(AActor) }, { "activesound", ActorActiveSound, RUNTIME_CLASS(AActor) }, { "alpha", ActorAlpha, RUNTIME_CLASS(AActor) }, { "ammo.backpackamount", (apf)AmmoBackpackAmount, RUNTIME_CLASS(AAmmo) }, @@ -4131,6 +4264,7 @@ static const ActorProps props[] = { "burnheight", ActorBurnHeight, RUNTIME_CLASS(AActor) }, { "cameraheight", ActorCameraheight, RUNTIME_CLASS(AActor) }, { "clearflags", ActorClearFlags, RUNTIME_CLASS(AActor) }, + { "const", ActorConstDef, RUNTIME_CLASS(AActor) }, { "conversationid", ActorConversationID, RUNTIME_CLASS(AActor) }, { "crash", ActorCrashState, RUNTIME_CLASS(AActor) }, { "crush", ActorCrushState, RUNTIME_CLASS(AActor) }, diff --git a/src/thingdef.h b/src/thingdef.h index dedaccee0..a3e45f6dd 100644 --- a/src/thingdef.h +++ b/src/thingdef.h @@ -26,11 +26,11 @@ extern TArray StateParameters; extern TArray JumpParameters; -int ParseExpression (bool _not); +int ParseExpression (bool _not, PClass *cls); -int EvalExpressionI (int id, AActor *self); -float EvalExpressionF (int id, AActor *self); -bool EvalExpressionN (int id, AActor *self); +int EvalExpressionI (int id, AActor *self, const PClass *cls=NULL); +float EvalExpressionF (int id, AActor *self, const PClass *cls=NULL); +bool EvalExpressionN (int id, AActor *self, const PClass *cls=NULL); void ClearStateLabels(); void AddState (const char * statename, FState * state); diff --git a/src/thingdef_exp.cpp b/src/thingdef_exp.cpp index c9a7f5feb..b598222b6 100644 --- a/src/thingdef_exp.cpp +++ b/src/thingdef_exp.cpp @@ -225,28 +225,28 @@ ExpVal GetZ (AActor *actor, int id) static struct FExpVar { - const char *name; // identifier + ENamedName name; // identifier int array; // array size (0 if not an array) ExpVarGet get; } ExpVars[] = { - { "alpha", 0, GetAlpha }, - { "angle", 0, GetAngle }, - { "args", 5, GetArgs }, - { "ceilingz", 0, GetCeilingZ }, - { "floorz", 0, GetFloorZ }, - { "health", 0, GetHealth }, - { "pitch", 0, GetPitch }, - { "special", 0, GetSpecial }, - { "tid", 0, GetTID }, - { "tidtohate", 0, GetTIDToHate }, - { "waterlevel", 0, GetWaterLevel }, - { "x", 0, GetX }, - { "y", 0, GetY }, - { "z", 0, GetZ }, + { NAME_Alpha, 0, GetAlpha }, + { NAME_Angle, 0, GetAngle }, + { NAME_Args, 5, GetArgs }, + { NAME_CeilingZ, 0, GetCeilingZ }, + { NAME_FloorZ, 0, GetFloorZ }, + { NAME_Health, 0, GetHealth }, + { NAME_Pitch, 0, GetPitch }, + { NAME_Special, 0, GetSpecial }, + { NAME_TID, 0, GetTID }, + { NAME_TIDtoHate, 0, GetTIDToHate }, + { NAME_WaterLevel, 0, GetWaterLevel }, + { NAME_X, 0, GetX }, + { NAME_Y, 0, GetY }, + { NAME_Z, 0, GetZ }, }; struct ExpData; -static ExpVal EvalExpression (ExpData *data, AActor *self); +static ExpVal EvalExpression (ExpData *data, AActor *self, const PClass *cls); struct ExpData { @@ -270,7 +270,7 @@ struct ExpData } } // Try to evaluate constant expression - void EvalConst () + void EvalConst (const PClass *cls) { if (Type == EX_NOP || Type == EX_Const || Type == EX_Var) { @@ -280,7 +280,7 @@ struct ExpData { if (Children[0]->Type == EX_Const) { - Value = EvalExpression (this, NULL); + Value = EvalExpression (this, NULL, cls); Type = EX_Const; } } @@ -309,7 +309,7 @@ struct ExpData { if (Children[0]->Type == EX_Const && Children[1]->Type == EX_Const) { - Value = EvalExpression (this, NULL); + Value = EvalExpression (this, NULL, NULL); Type = EX_Const; delete Children[0]; Children[0] = NULL; delete Children[1]; Children[1] = NULL; @@ -351,21 +351,21 @@ TArray StateExpressions; // [GRB] Parses an expression and stores it into Expression array // -static ExpData *ParseExpressionM (); -static ExpData *ParseExpressionL (); -static ExpData *ParseExpressionK (); -static ExpData *ParseExpressionJ (); -static ExpData *ParseExpressionI (); -static ExpData *ParseExpressionH (); -static ExpData *ParseExpressionG (); -static ExpData *ParseExpressionF (); -static ExpData *ParseExpressionE (); -static ExpData *ParseExpressionD (); -static ExpData *ParseExpressionC (); -static ExpData *ParseExpressionB (); -static ExpData *ParseExpressionA (); +static ExpData *ParseExpressionM (const PClass *cls); +static ExpData *ParseExpressionL (const PClass *cls); +static ExpData *ParseExpressionK (const PClass *cls); +static ExpData *ParseExpressionJ (const PClass *cls); +static ExpData *ParseExpressionI (const PClass *cls); +static ExpData *ParseExpressionH (const PClass *cls); +static ExpData *ParseExpressionG (const PClass *cls); +static ExpData *ParseExpressionF (const PClass *cls); +static ExpData *ParseExpressionE (const PClass *cls); +static ExpData *ParseExpressionD (const PClass *cls); +static ExpData *ParseExpressionC (const PClass *cls); +static ExpData *ParseExpressionB (const PClass *cls); +static ExpData *ParseExpressionA (const PClass *cls); -int ParseExpression (bool _not) +int ParseExpression (bool _not, PClass *cls) { static bool inited=false; @@ -376,7 +376,7 @@ int ParseExpression (bool _not) inited=true; } - ExpData *data = ParseExpressionM (); + ExpData *data = ParseExpressionM (cls); if (_not) { @@ -384,7 +384,7 @@ int ParseExpression (bool _not) data = new ExpData; data->Type = EX_Not; data->Children[0] = tmp; - data->EvalConst (); + data->EvalConst (cls); } for (unsigned int i = 0; i < StateExpressions.Size (); i++) @@ -399,11 +399,11 @@ int ParseExpression (bool _not) return StateExpressions.Push (data); } -static ExpData *ParseExpressionM () +static ExpData *ParseExpressionM (const PClass *cls) { - ExpData *tmp = ParseExpressionL (); + ExpData *tmp = ParseExpressionL (cls); - if (SC_CheckString ("?")) + if (SC_CheckToken('?')) { ExpData *data = new ExpData; data->Type = EX_Cond; @@ -411,11 +411,10 @@ static ExpData *ParseExpressionM () ExpData *choices = new ExpData; data->Children[1] = choices; choices->Type = EX_Right; - choices->Children[0] = ParseExpressionM (); - if (!SC_CheckString (":")) - SC_ScriptError ("':' expected"); - choices->Children[1] = ParseExpressionM (); - data->EvalConst (); + choices->Children[0] = ParseExpressionM (cls); + SC_MustGetToken(':'); + choices->Children[1] = ParseExpressionM (cls); + data->EvalConst (cls); return data; } else @@ -424,17 +423,17 @@ static ExpData *ParseExpressionM () } } -static ExpData *ParseExpressionL () +static ExpData *ParseExpressionL (const PClass *cls) { - ExpData *tmp = ParseExpressionK (); + ExpData *tmp = ParseExpressionK (cls); - if (SC_CheckString ("||")) + if (SC_CheckToken(TK_OrOr)) { ExpData *data = new ExpData; data->Type = EX_LogOr; data->Children[0] = tmp; - data->Children[1] = ParseExpressionL (); - data->EvalConst (); + data->Children[1] = ParseExpressionL (cls); + data->EvalConst (cls); return data; } else @@ -443,17 +442,17 @@ static ExpData *ParseExpressionL () } } -static ExpData *ParseExpressionK () +static ExpData *ParseExpressionK (const PClass *cls) { - ExpData *tmp = ParseExpressionJ (); + ExpData *tmp = ParseExpressionJ (cls); - if (SC_CheckString ("&&")) + if (SC_CheckToken(TK_AndAnd)) { ExpData *data = new ExpData; data->Type = EX_LogAnd; data->Children[0] = tmp; - data->Children[1] = ParseExpressionK (); - data->EvalConst (); + data->Children[1] = ParseExpressionK (cls); + data->EvalConst (cls); return data; } else @@ -462,17 +461,17 @@ static ExpData *ParseExpressionK () } } -static ExpData *ParseExpressionJ () +static ExpData *ParseExpressionJ (const PClass *cls) { - ExpData *tmp = ParseExpressionI (); + ExpData *tmp = ParseExpressionI (cls); - if (SC_CheckString ("|")) + if (SC_CheckToken('|')) { ExpData *data = new ExpData; data->Type = EX_Or; data->Children[0] = tmp; - data->Children[1] = ParseExpressionJ (); - data->EvalConst (); + data->Children[1] = ParseExpressionJ (cls); + data->EvalConst (cls); return data; } else @@ -481,17 +480,17 @@ static ExpData *ParseExpressionJ () } } -static ExpData *ParseExpressionI () +static ExpData *ParseExpressionI (const PClass *cls) { - ExpData *tmp = ParseExpressionH (); + ExpData *tmp = ParseExpressionH (cls); - if (SC_CheckString ("^")) + if (SC_CheckToken('^')) { ExpData *data = new ExpData; data->Type = EX_Xor; data->Children[0] = tmp; - data->Children[1] = ParseExpressionI (); - data->EvalConst (); + data->Children[1] = ParseExpressionI (cls); + data->EvalConst (cls); return data; } else @@ -500,17 +499,17 @@ static ExpData *ParseExpressionI () } } -static ExpData *ParseExpressionH () +static ExpData *ParseExpressionH (const PClass *cls) { - ExpData *tmp = ParseExpressionG (); + ExpData *tmp = ParseExpressionG (cls); - if (SC_CheckString ("&")) + if (SC_CheckToken('&')) { ExpData *data = new ExpData; data->Type = EX_And; data->Children[0] = tmp; - data->Children[1] = ParseExpressionH (); - data->EvalConst (); + data->Children[1] = ParseExpressionH (cls); + data->EvalConst (cls); return data; } else @@ -519,16 +518,16 @@ static ExpData *ParseExpressionH () } } -static ExpData *ParseExpressionG () +static ExpData *ParseExpressionG (const PClass *cls) { - ExpData *tmp = ParseExpressionF (); + ExpData *tmp = ParseExpressionF (cls); ExpData *data = new ExpData; - if (SC_CheckString ("==")) + if (SC_CheckToken(TK_Eq)) { data->Type = EX_Eq; } - else if (SC_CheckString ("==")) + else if (SC_CheckToken(TK_Neq)) { data->Type = EX_NE; } @@ -539,30 +538,30 @@ static ExpData *ParseExpressionG () } data->Children[0] = tmp; - data->Children[1] = ParseExpressionG (); - data->EvalConst (); + data->Children[1] = ParseExpressionG (cls); + data->EvalConst (cls); return data; } -static ExpData *ParseExpressionF () +static ExpData *ParseExpressionF (const PClass *cls) { - ExpData *tmp = ParseExpressionE (); + ExpData *tmp = ParseExpressionE (cls); ExpData *data = new ExpData; - if (SC_CheckString ("<")) + if (SC_CheckToken('<')) { data->Type = EX_LT; } - else if (SC_CheckString (">")) + else if (SC_CheckToken('>')) { data->Type = EX_GT; } - else if (SC_CheckString ("<=")) + else if (SC_CheckToken(TK_Leq)) { data->Type = EX_LE; } - else if (SC_CheckString (">=")) + else if (SC_CheckToken(TK_Geq)) { data->Type = EX_GE; } @@ -573,22 +572,22 @@ static ExpData *ParseExpressionF () } data->Children[0] = tmp; - data->Children[1] = ParseExpressionF (); - data->EvalConst (); + data->Children[1] = ParseExpressionF (cls); + data->EvalConst (cls); return data; } -static ExpData *ParseExpressionE () +static ExpData *ParseExpressionE (const PClass *cls) { - ExpData *tmp = ParseExpressionD (); + ExpData *tmp = ParseExpressionD (cls); ExpData *data = new ExpData; - if (SC_CheckString ("<<")) + if (SC_CheckToken(TK_LShift)) { data->Type = EX_LShift; } - else if (SC_CheckString (">>")) + else if (SC_CheckToken(TK_RShift)) { data->Type = EX_RShift; } @@ -599,22 +598,22 @@ static ExpData *ParseExpressionE () } data->Children[0] = tmp; - data->Children[1] = ParseExpressionE (); - data->EvalConst (); + data->Children[1] = ParseExpressionE (cls); + data->EvalConst (cls); return data; } -static ExpData *ParseExpressionD () +static ExpData *ParseExpressionD (const PClass *cls) { - ExpData *tmp = ParseExpressionC (); + ExpData *tmp = ParseExpressionC (cls); ExpData *data = new ExpData; - if (SC_CheckString ("+")) + if (SC_CheckToken('+')) { data->Type = EX_Add; } - else if (SC_CheckString ("-")) + else if (SC_CheckToken('-')) { data->Type = EX_Sub; } @@ -625,26 +624,26 @@ static ExpData *ParseExpressionD () } data->Children[0] = tmp; - data->Children[1] = ParseExpressionD (); - data->EvalConst (); + data->Children[1] = ParseExpressionD (cls); + data->EvalConst (cls); return data; } -static ExpData *ParseExpressionC () +static ExpData *ParseExpressionC (const PClass *cls) { - ExpData *tmp = ParseExpressionB (); + ExpData *tmp = ParseExpressionB (cls); ExpData *data = new ExpData; - if (SC_CheckString ("*")) + if (SC_CheckToken('*')) { data->Type = EX_Mul; } - else if (SC_CheckString ("/")) + else if (SC_CheckToken('/')) { data->Type = EX_Div; } - else if (SC_CheckString ("%")) + else if (SC_CheckToken('%')) { data->Type = EX_Mod; } @@ -655,144 +654,50 @@ static ExpData *ParseExpressionC () } data->Children[0] = tmp; - data->Children[1] = ParseExpressionC (); - data->EvalConst (); + data->Children[1] = ParseExpressionC (cls); + data->EvalConst (cls); return data; } -static ExpData *ParseExpressionB () +static ExpData *ParseExpressionB (const PClass *cls) { ExpData *data = new ExpData; - if (SC_CheckString ("~")) + if (SC_CheckToken('~')) { data->Type = EX_Compl; } - else if (SC_CheckString ("!")) + else if (SC_CheckToken('!')) { data->Type = EX_Not; } - else if (SC_CheckString ("-")) + else if (SC_CheckToken('-')) { data->Type = EX_Minus; } else { - SC_CheckString ("+"); + SC_CheckToken('+'); delete data; - return ParseExpressionA (); + return ParseExpressionA (cls); } - data->Children[0] = ParseExpressionA (); - data->EvalConst (); + data->Children[0] = ParseExpressionA (cls); + data->EvalConst (cls); return data; } -static ExpData *ParseExpressionA () +static ExpData *ParseExpressionA (const PClass *cls) { - if (SC_CheckString ("(")) + if (SC_CheckToken('(')) { - ExpData *data = ParseExpressionM (); - - if (!SC_CheckString (")")) - SC_ScriptError ("')' expected"); - + ExpData *data = ParseExpressionM (cls); + SC_MustGetToken(')'); return data; } - else if (SC_CheckString ("random")) - { - FRandom *rng; - - if (SC_CheckString("[")) - { - SC_MustGetString(); - rng = FRandom::StaticFindRNG(sc_String); - SC_MustGetStringName("]"); - } - else - { - rng = &pr_exrandom; - } - if (!SC_CheckString ("(")) - SC_ScriptError ("'(' expected"); - - ExpData *data = new ExpData; - data->Type = EX_Random; - data->RNG = rng; - - data->Children[0] = ParseExpressionM (); - - if (!SC_CheckString (",")) - SC_ScriptError ("',' expected"); - - data->Children[1] = ParseExpressionM (); - - if (!SC_CheckString (")")) - SC_ScriptError ("')' expected"); - - return data; - } - else if (SC_CheckString ("random2")) - { - FRandom *rng; - - if (SC_CheckString("[")) - { - SC_MustGetString(); - rng = FRandom::StaticFindRNG(sc_String); - SC_MustGetStringName("]"); - } - else - { - rng = &pr_exrandom; - } - - SC_MustGetStringName("("); - - ExpData *data = new ExpData; - data->Type = EX_Random2; - data->RNG = rng; - - if (!SC_CheckString(")")) - { - data->Children[0] = ParseExpressionM(); - SC_MustGetStringName(")"); - } - return data; - } - else if (SC_CheckString ("sin")) - { - if (!SC_CheckString ("(")) - SC_ScriptError ("'(' expected"); - - ExpData *data = new ExpData; - data->Type = EX_Sin; - - data->Children[0] = ParseExpressionM (); - - if (!SC_CheckString (")")) - SC_ScriptError ("')' expected"); - - return data; - } - else if (SC_CheckString ("cos")) - { - if (!SC_CheckString ("(")) - SC_ScriptError ("'(' expected"); - - ExpData *data = new ExpData; - data->Type = EX_Cos; - - data->Children[0] = ParseExpressionM (); - - if (!SC_CheckString (")")) - SC_ScriptError ("')' expected"); - - return data; - } - else if (SC_CheckNumber ()) + else if (SC_CheckToken(TK_IntConst)) { ExpData *data = new ExpData; data->Type = EX_Const; @@ -801,7 +706,7 @@ static ExpData *ParseExpressionA () return data; } - else if (SC_CheckFloat ()) + else if (SC_CheckToken(TK_FloatConst)) { ExpData *data = new ExpData; data->Type = EX_Const; @@ -810,79 +715,208 @@ static ExpData *ParseExpressionA () return data; } - else + else if (SC_CheckToken(TK_Class)) { - int specnum, min_args, max_args; - - SC_MustGetString (); - - // Check if this is an action special - strlwr (sc_String); - specnum = FindLineSpecialEx (sc_String, &min_args, &max_args); - if (specnum != 0) + // Accept class'SomeClassName'.SomeConstant + SC_MustGetToken(TK_NameConst); + cls = PClass::FindClass (sc_Name); + if (cls == NULL) { - int i; - - if (!SC_CheckString ("(")) - SC_ScriptError ("'(' expected"); - - ExpData *data = new ExpData, **left; - data->Type = EX_ActionSpecial; - data->Value.Int = specnum; - - data->Children[0] = ParseExpressionM (); - left = &data->Children[1]; - - for (i = 1; i < 5 && SC_CheckString (","); ++i) - { - ExpData *right = new ExpData; - right->Type = EX_Right; - right->Children[0] = ParseExpressionM (); - *left = right; - left = &right->Children[1]; - } - *left = NULL; - if (!SC_CheckString (")")) - SC_ScriptError ("')' expected"); - if (i < min_args) - SC_ScriptError ("Not enough arguments to action special"); - if (i > max_args) - SC_ScriptError ("Too many arguments to action special"); - + SC_ScriptError ("Unknown class '%s'", sc_String); + } + SC_MustGetToken('.'); + SC_MustGetToken(TK_Identifier); + PSymbol *sym = cls->Symbols.FindSymbol (sc_Name, true); + if (sym != NULL && sym->SymbolType == SYM_Const) + { + ExpData *data = new ExpData; + data->Type = EX_Const; + data->Value.Type = VAL_Int; + data->Value.Int = static_cast(sym)->Value; return data; } - - // Check if it's a variable we understand - int varid = -1; - for (size_t i = 0; i < countof(ExpVars); i++) + else { - if (!stricmp (sc_String, ExpVars[i].name)) + SC_ScriptError ("'%s' is not a constant value in class '%s'", sc_String, cls->TypeName.GetChars()); + return NULL; + } + } + else if (SC_CheckToken(TK_Identifier)) + { + switch (sc_Name) + { + case NAME_Random: + { + FRandom *rng; + + if (SC_CheckToken('[')) { - varid = (int)i; - break; + SC_MustGetToken(TK_Identifier); + rng = FRandom::StaticFindRNG(sc_String); + SC_MustGetToken(']'); } + else + { + rng = &pr_exrandom; + } + SC_MustGetToken('('); + + ExpData *data = new ExpData; + data->Type = EX_Random; + data->RNG = rng; + + data->Children[0] = ParseExpressionM (cls); + SC_MustGetToken(','); + data->Children[1] = ParseExpressionM (cls); + SC_MustGetToken(')'); + return data; } + break; - if (varid == -1) - SC_ScriptError ("Value expected"); - - ExpData *data = new ExpData; - data->Type = EX_Var; - data->Value.Type = VAL_Int; - data->Value.Int = varid; - - if (ExpVars[varid].array) + case NAME_Random2: { - if (!SC_CheckString ("[")) - SC_ScriptError ("'[' expected"); + FRandom *rng; - data->Children[0] = ParseExpressionM (); + if (SC_CheckToken('[')) + { + SC_MustGetToken(TK_Identifier); + rng = FRandom::StaticFindRNG(sc_String); + SC_MustGetToken(']'); + } + else + { + rng = &pr_exrandom; + } - if (!SC_CheckString ("]")) - SC_ScriptError ("']' expected"); + SC_MustGetToken('('); + + ExpData *data = new ExpData; + data->Type = EX_Random2; + data->RNG = rng; + + if (!SC_CheckToken(')')) + { + data->Children[0] = ParseExpressionM(cls); + SC_MustGetToken(')'); + } + return data; } + break; - return data; + case NAME_Sin: + { + SC_MustGetToken('('); + + ExpData *data = new ExpData; + data->Type = EX_Sin; + + data->Children[0] = ParseExpressionM (cls); + + SC_MustGetToken(')'); + return data; + } + break; + + case NAME_Cos: + { + SC_MustGetToken('('); + + ExpData *data = new ExpData; + data->Type = EX_Cos; + + data->Children[0] = ParseExpressionM (cls); + + SC_MustGetToken(')'); + return data; + } + break; + + default: + { + int specnum, min_args, max_args; + + // Check if this is an action special + strlwr (sc_String); + specnum = FindLineSpecialEx (sc_String, &min_args, &max_args); + if (specnum != 0) + { + int i; + + SC_MustGetToken('('); + + ExpData *data = new ExpData, **left; + data->Type = EX_ActionSpecial; + data->Value.Int = specnum; + + data->Children[0] = ParseExpressionM (cls); + left = &data->Children[1]; + + for (i = 1; i < 5 && SC_CheckToken(','); ++i) + { + ExpData *right = new ExpData; + right->Type = EX_Right; + right->Children[0] = ParseExpressionM (cls); + *left = right; + left = &right->Children[1]; + } + *left = NULL; + SC_MustGetToken(')'); + if (i < min_args) + SC_ScriptError ("Not enough arguments to action special"); + if (i > max_args) + SC_ScriptError ("Too many arguments to action special"); + + return data; + } + + // Check if this is a constant + if (cls != NULL) + { + PSymbol *sym = cls->Symbols.FindSymbol (sc_Name, true); + if (sym != NULL && sym->SymbolType == SYM_Const) + { + ExpData *data = new ExpData; + data->Type = EX_Const; + data->Value.Type = VAL_Int; + data->Value.Int = static_cast(sym)->Value; + return data; + } + } + + // Check if it's a variable we understand + int varid = -1; + for (size_t i = 0; i < countof(ExpVars); i++) + { + if (sc_Name == ExpVars[i].name) + { + varid = (int)i; + break; + } + } + + if (varid == -1) + SC_ScriptError ("Unknown value '%s'", sc_String); + + ExpData *data = new ExpData; + data->Type = EX_Var; + data->Value.Type = VAL_Int; + data->Value.Int = varid; + + if (ExpVars[varid].array) + { + SC_MustGetToken('['); + data->Children[0] = ParseExpressionM (cls); + SC_MustGetToken(']'); + } + return data; + } + break; + } + } + else + { + SC_ScriptError ("Unexpected token %s", SC_TokenName(sc_TokenType, sc_String)); + return NULL; } } @@ -891,11 +925,16 @@ static ExpData *ParseExpressionA () // [GRB] Evaluates previously stored expression // -int EvalExpressionI (int id, AActor *self) +int EvalExpressionI (int id, AActor *self, const PClass *cls) { if (StateExpressions.Size() <= (unsigned int)id) return 0; - ExpVal val = EvalExpression (StateExpressions[id], self); + if (cls == NULL && self != NULL) + { + cls = self->GetClass(); + } + + ExpVal val = EvalExpression (StateExpressions[id], self, cls); switch (val.Type) { @@ -907,16 +946,21 @@ int EvalExpressionI (int id, AActor *self) } } -bool EvalExpressionN(int id, AActor * self) +bool EvalExpressionN(int id, AActor *self, const PClass *cls) { - return !EvalExpressionI(id, self); + return !EvalExpressionI(id, self, cls); } -float EvalExpressionF (int id, AActor *self) +float EvalExpressionF (int id, AActor *self, const PClass *cls) { if (StateExpressions.Size() <= (unsigned int)id) return 0.f; - ExpVal val = EvalExpression (StateExpressions[id], self); + if (cls == NULL && self != NULL) + { + cls = self->GetClass(); + } + + ExpVal val = EvalExpression (StateExpressions[id], self, cls); switch (val.Type) { @@ -928,10 +972,10 @@ float EvalExpressionF (int id, AActor *self) } } -static ExpVal EvalExpression (ExpData *data, AActor *self) +static ExpVal EvalExpression (ExpData *data, AActor *self, const PClass *cls) { ExpVal val; - + switch (data->Type) { case EX_NOP: @@ -944,7 +988,6 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) case EX_Var: if (!self) { - // Should not happen I_FatalError ("Missing actor data"); } else @@ -952,7 +995,7 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) int id = 0; if (ExpVars[data->Value.Int].array) { - ExpVal idval = EvalExpression (data->Children[0], self); + ExpVal idval = EvalExpression (data->Children[0], self, cls); id = ((idval.Type == VAL_Int) ? idval.Int : (int)idval.Float) % ExpVars[data->Value.Int].array; } @@ -961,7 +1004,7 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_Compl: { - ExpVal a = EvalExpression (data->Children[0], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); val.Type = VAL_Int; val.Int = ~((a.Type == VAL_Int) ? a.Int : (int)a.Float); @@ -969,7 +1012,7 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_Not: { - ExpVal a = EvalExpression (data->Children[0], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); val.Type = VAL_Int; val.Int = !((a.Type == VAL_Int) ? a.Int : (int)a.Float); @@ -977,7 +1020,7 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_Minus: { - val = EvalExpression (data->Children[0], self); + val = EvalExpression (data->Children[0], self, cls); if (val.Type == VAL_Int) val.Int = -val.Int; @@ -987,8 +1030,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_Mul: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); if (a.Type == VAL_Int) { @@ -1015,8 +1058,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_Div: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); if (b.Int == 0) { @@ -1048,8 +1091,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_Mod: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); if (b.Int == 0) { @@ -1081,8 +1124,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_Add: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); if (a.Type == VAL_Int) { @@ -1109,8 +1152,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_Sub: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); if (a.Type == VAL_Int) { @@ -1137,8 +1180,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_LShift: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); val.Type = VAL_Int; @@ -1160,8 +1203,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_RShift: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); val.Type = VAL_Int; @@ -1183,8 +1226,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_LT: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); val.Type = VAL_Int; @@ -1206,8 +1249,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_GT: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); val.Type = VAL_Int; @@ -1229,8 +1272,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_LE: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); val.Type = VAL_Int; @@ -1252,8 +1295,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_GE: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); val.Type = VAL_Int; @@ -1275,8 +1318,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_Eq: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); val.Type = VAL_Int; @@ -1298,8 +1341,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_NE: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); val.Type = VAL_Int; @@ -1321,8 +1364,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_And: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); val.Type = VAL_Int; @@ -1344,8 +1387,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_Xor: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); val.Type = VAL_Int; @@ -1367,8 +1410,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_Or: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); val.Type = VAL_Int; @@ -1390,8 +1433,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_LogAnd: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); val.Type = VAL_Int; @@ -1413,8 +1456,8 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_LogOr: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); val.Type = VAL_Int; @@ -1436,19 +1479,19 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) break; case EX_Cond: { - ExpVal a = EvalExpression (data->Children[0], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); if (a.Type == VAL_Float) a.Int = (int)a.Float; - val = EvalExpression (data->Children[1]->Children[!!a.Int], self); + val = EvalExpression (data->Children[1]->Children[!!a.Int], self, cls); } break; case EX_Random: { - ExpVal a = EvalExpression (data->Children[0], self); - ExpVal b = EvalExpression (data->Children[1], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); + ExpVal b = EvalExpression (data->Children[1], self, cls); int min = (a.Type == VAL_Int) ? a.Int : (int)a.Float; int max = (b.Type == VAL_Int) ? b.Int : (int)b.Float; @@ -1489,7 +1532,7 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) } else { - ExpVal a = EvalExpression (data->Children[0], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); val.Type = VAL_Int; val.Int = data->RNG->Random2((a.Type == VAL_Int) ? a.Int : (int)a.Float); } @@ -1498,7 +1541,7 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) case EX_Sin: { - ExpVal a = EvalExpression (data->Children[0], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); angle_t angle = (a.Type == VAL_Int) ? (a.Int * ANGLE_1) : angle_t(a.Float * ANGLE_1); val.Type = VAL_Float; @@ -1508,7 +1551,7 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) case EX_Cos: { - ExpVal a = EvalExpression (data->Children[0], self); + ExpVal a = EvalExpression (data->Children[0], self, cls); angle_t angle = (a.Type == VAL_Int) ? (a.Int * ANGLE_1) : angle_t(a.Float * ANGLE_1); val.Type = VAL_Float; @@ -1524,7 +1567,7 @@ static ExpVal EvalExpression (ExpData *data, AActor *self) while (parm != NULL && i < 5) { - ExpVal val = EvalExpression (parm->Children[0], self); + ExpVal val = EvalExpression (parm->Children[0], self, cls); if (val.Type == VAL_Int) { parms[i] = val.Int; diff --git a/tools/updaterevision/updaterevision.vcproj b/tools/updaterevision/updaterevision.vcproj index ac51fc51a..cfc90e1fc 100644 --- a/tools/updaterevision/updaterevision.vcproj +++ b/tools/updaterevision/updaterevision.vcproj @@ -1,7 +1,7 @@ + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - -