diff --git a/src/sc_man.cpp b/src/sc_man.cpp
index b69aa1ce0..298676dc6 100644
--- a/src/sc_man.cpp
+++ b/src/sc_man.cpp
@@ -812,116 +812,8 @@ FString FScanner::TokenName (int token, const char *string)
{
static const char *const names[] =
{
- "identifier",
- "string constant",
- "name constant",
- "integer constant",
- "float constant",
- "'...'",
- "'>>='",
- "'<<='",
- "'+='",
- "'-='",
- "'*='",
- "'/='",
- "'%='",
- "'&='",
- "'^='",
- "'|='",
- "'>>'",
- "'>>>'",
- "'<<'",
- "'++'",
- "'--'",
- "'&&'",
- "'||'",
- "'<='",
- "'>='",
- "'=='",
- "'!='",
- "'action'",
- "'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'",
- "'#include'",
- "'fixed_t'",
- "'angle_t'",
- "'abs'",
- "'random'",
- "'random2'"
+#define xx(sym,str) str,
+#include "sc_man_tokens.h"
};
FString work;
@@ -992,7 +884,7 @@ void STACK_ARGS FScanner::ScriptError (const char *message, ...)
//==========================================================================
//
-// FScanner::ScriptError
+// FScanner::ScriptMessage
//
//==========================================================================
diff --git a/src/sc_man.h b/src/sc_man.h
index 1e5dc289d..777e8cdcd 100644
--- a/src/sc_man.h
+++ b/src/sc_man.h
@@ -99,119 +99,9 @@ protected:
enum
{
- TK_Identifier = 257,
- TK_StringConst,
- TK_NameConst,
- TK_IntConst,
- TK_FloatConst,
- TK_Ellipsis, // ...
- TK_RShiftEq, // >>=
- TK_URShiftEq, // >>>=
- TK_LShiftEq, // <<=
- TK_AddEq, // +=
- TK_SubEq, // -=
- TK_MulEq, // *=
- TK_DivEq, // /=
- TK_ModEq, // %=
- TK_AndEq, // &=
- TK_XorEq, // ^=
- TK_OrEq, // |=
- TK_RShift, // >>
- TK_URShift, // >>>
- TK_LShift, // <<
- TK_Incr, // ++
- TK_Decr, // --
- TK_AndAnd, // &&
- TK_OrOr, // ||
- TK_Leq, // <=
- TK_Geq, // >=
- TK_Eq, // ==
- TK_Neq, // !=
- TK_Action,
- TK_Break,
- TK_Case,
- TK_Const,
- TK_Continue,
- TK_Default,
- TK_Do,
- TK_Else,
- TK_For,
- TK_If,
- TK_Return,
- 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_Var,
- 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_Include,
- TK_Fixed_t,
- TK_Angle_t,
- TK_Abs,
- TK_Random,
- TK_Random2,
- TK_FRandom,
-
+ TK_SequenceStart = 256,
+#define xx(sym,str) sym,
+#include "sc_man_tokens.h"
TK_LastToken
};
diff --git a/src/sc_man_scanner.re b/src/sc_man_scanner.re
index ff0945db3..66058ac8c 100644
--- a/src/sc_man_scanner.re
+++ b/src/sc_man_scanner.re
@@ -96,6 +96,12 @@ std2:
'sound' { RET(TK_Sound); }
'state' { RET(TK_State); }
'color' { RET(TK_Color); }
+ 'vector' { RET(TK_Vector); }
+ 'map' { RET(TK_Map); }
+ 'array' { RET(TK_Array); }
+ 'in' { RET(TK_In); }
+ 'sizeof' { RET(TK_SizeOf); }
+ 'alignof' { RET(TK_AlignOf); }
/* Other keywords from UnrealScript */
'abstract' { RET(TK_Abstract); }
@@ -138,6 +144,9 @@ std2:
'self' { RET(TK_Self); }
'stop' { RET(TK_Stop); }
+ 'is' { RET(TK_Is); }
+ 'replaces' { RET(TK_Replaces); }
+
/* Needed for decorate action functions */
'action' { RET(TK_Action); }
@@ -164,6 +173,7 @@ std2:
(['] (any\[\n'])* ['])
{ RET(TK_NameConst); }
+ ".." { RET(TK_DotDot); }
"..." { RET(TK_Ellipsis); }
">>>=" { RET(TK_URShiftEq); }
">>=" { RET(TK_RShiftEq); }
@@ -187,6 +197,9 @@ std2:
">=" { RET(TK_Geq); }
"==" { RET(TK_Eq); }
"!=" { RET(TK_Neq); }
+ "~==" { RET(TK_ApproxEq); }
+ "<>=" { RET(TK_LtGtEq); }
+ "**" { RET(TK_MulMul); }
";" { RET(';'); }
"{" { RET('{'); }
"}" { RET('}'); }
diff --git a/src/sc_man_tokens.h b/src/sc_man_tokens.h
new file mode 100644
index 000000000..9dde74972
--- /dev/null
+++ b/src/sc_man_tokens.h
@@ -0,0 +1,125 @@
+xx(TK_Identifier, "identifier")
+xx(TK_StringConst, "string constant")
+xx(TK_NameConst, "name constant")
+xx(TK_IntConst, "integer constant")
+xx(TK_FloatConst, "float constant")
+xx(TK_DotDot, "'..'")
+xx(TK_Ellipsis, "'...'")
+xx(TK_RShiftEq, "'>>='")
+xx(TK_URShiftEq, "'>>>='")
+xx(TK_LShiftEq, "'<<='")
+xx(TK_AddEq, "'+='")
+xx(TK_SubEq, "'-='")
+xx(TK_MulEq, "'*='")
+xx(TK_DivEq, "'/='")
+xx(TK_ModEq, "'%='")
+xx(TK_AndEq, "'&='")
+xx(TK_XorEq, "'^='")
+xx(TK_OrEq, "'|='")
+xx(TK_RShift, "'>>'")
+xx(TK_URShift, "'>>>'")
+xx(TK_LShift, "'<<'")
+xx(TK_Incr, "'++'")
+xx(TK_Decr, "'--'")
+xx(TK_AndAnd, "'&&'")
+xx(TK_OrOr, "'||'")
+xx(TK_Leq, "'<='")
+xx(TK_Geq, "'>='")
+xx(TK_Eq, "'=='")
+xx(TK_Neq, "'!='")
+xx(TK_ApproxEq, "'~=='")
+xx(TK_LtGtEq, "'<>='")
+xx(TK_MulMul, "'**'")
+xx(TK_Action, "'action'")
+xx(TK_Break, "'break'")
+xx(TK_Case, "'case'")
+xx(TK_Const, "'const'")
+xx(TK_Continue, "'continue'")
+xx(TK_Default, "'default'")
+xx(TK_Do, "'do'")
+xx(TK_Else, "'else'")
+xx(TK_For, "'for'")
+xx(TK_If, "'if'")
+xx(TK_Return, "'return'")
+xx(TK_Switch, "'switch'")
+xx(TK_Until, "'until'")
+xx(TK_While, "'while'")
+xx(TK_Bool, "'bool'")
+xx(TK_Float, "'float'")
+xx(TK_Double, "'double'")
+xx(TK_Char, "'char'")
+xx(TK_Byte, "'byte'")
+xx(TK_SByte, "'sbyte'")
+xx(TK_Short, "'short'")
+xx(TK_UShort, "'ushort'")
+xx(TK_Int, "'int'")
+xx(TK_UInt, "'uint'")
+xx(TK_Long, "'long'")
+xx(TK_ULong, "'ulong'")
+xx(TK_Void, "'void'")
+xx(TK_Struct, "'struct'")
+xx(TK_Class, "'class'")
+xx(TK_Mode, "'mode'")
+xx(TK_Enum, "'enum'")
+xx(TK_Name, "'name'")
+xx(TK_String, "'string'")
+xx(TK_Sound, "'sound'")
+xx(TK_State, "'state'")
+xx(TK_Color, "'color'")
+xx(TK_Goto, "'goto'")
+xx(TK_Abstract, "'abstract'")
+xx(TK_ForEach, "'foreach'")
+xx(TK_True, "'true'")
+xx(TK_False, "'false'")
+xx(TK_None, "'none'")
+xx(TK_New, "'new'")
+xx(TK_InstanceOf, "'instanceof'")
+xx(TK_Auto, "'auto'")
+xx(TK_Exec, "'exec'")
+xx(TK_DefaultProperties, "'defaultproperties'")
+xx(TK_Native, "'native'")
+xx(TK_Var, "'var'")
+xx(TK_Out, "'out'")
+xx(TK_Ref, "'ref'")
+xx(TK_Event, "'event'")
+xx(TK_Static, "'static'")
+xx(TK_Transient, "'transient'")
+xx(TK_Volatile, "'volatile'")
+xx(TK_Final, "'final'")
+xx(TK_Throws, "'throws'")
+xx(TK_Extends, "'extends'")
+xx(TK_Public, "'public'")
+xx(TK_Protected, "'protected'")
+xx(TK_Private, "'private'")
+xx(TK_Dot, "'dot'")
+xx(TK_Cross, "'cross'")
+xx(TK_Ignores, "'ignores'")
+xx(TK_Localized, "'localized'")
+xx(TK_Latent, "'latent'")
+xx(TK_Singular, "'singular'")
+xx(TK_Config, "'config'")
+xx(TK_Coerce, "'coerce'")
+xx(TK_Iterator, "'iterator'")
+xx(TK_Optional, "'optional'")
+xx(TK_Export, "'expert'")
+xx(TK_Virtual, "'virtual'")
+xx(TK_Super, "'super'")
+xx(TK_Global, "'global'")
+xx(TK_Self, "'self'")
+xx(TK_Stop, "'stop'")
+xx(TK_Include, "'include'")
+xx(TK_Fixed_t, "'fixed_t'")
+xx(TK_Angle_t, "'angle_t'")
+xx(TK_Abs, "'abs'")
+xx(TK_Random, "'random'")
+xx(TK_Random2, "'random2'")
+xx(TK_FRandom, "'frandom'")
+xx(TK_Is, "'is'")
+xx(TK_Replaces, "'replaces'")
+xx(TK_Vector, "'vector'")
+xx(TK_Map, "'map'")
+xx(TK_Array, "'array'")
+xx(TK_In, "'in'")
+xx(TK_SizeOf, "'sizeof'")
+xx(TK_AlignOf, "'alignof'")
+#undef xx
diff --git a/zdoom.vcproj b/zdoom.vcproj
index 793cce76c..2cee5d413 100644
--- a/zdoom.vcproj
+++ b/zdoom.vcproj
@@ -1501,6 +1501,10 @@
RelativePath=".\src\sc_man.h"
>
+
+