--- a/src/Parser.h Mon Feb 03 20:12:44 2014 +0200 +++ b/src/Parser.h Tue Feb 04 02:28:33 2014 +0200 @@ -57,50 +57,6 @@ }; // ============================================================================ -// Operators -// -enum EOperator -{ - OPER_ADD, - OPER_SUBTRACT, - OPER_MULTIPLY, - OPER_DIVIDE, - OPER_MODULUS, - OPER_ASSIGN, - OPER_ASSIGNADD, - OPER_ASSIGNSUB, - OPER_ASSIGNMUL, - OPER_ASSIGNDIV, - OPER_ASSIGNMOD, // -- 10 - OPER_EQUALS, - OPER_NOTEQUALS, - OPER_LESSTHAN, - OPER_GREATERTHAN, - OPER_LESSTHANEQUALS, - OPER_GREATERTHANEQUALS, - OPER_LEFTSHIFT, - OPER_RIGHTSHIFT, - OPER_ASSIGNLEFTSHIFT, - OPER_ASSIGNRIGHTSHIFT, // -- 20 - OPER_OR, - OPER_AND, - OPER_BITWISEOR, - OPER_BITWISEAND, - OPER_BITWISEEOR, - OPER_TERNARY, - OPER_STRLEN, -}; - -// ============================================================================ -// -struct operatorInfo -{ - EOperator opercode; - EDataHeader dataheader; - EToken token; -}; - -// ============================================================================ // Mark types // enum eMarkType @@ -124,6 +80,16 @@ eElseScope, }; +enum EAssignmentOperator +{ + EAssign, + EAssignAdd, + EAssignSub, + EAssignMul, + EAssignDiv, + EAssignMod, +}; + // ============================================================================ // Meta-data about scopes // @@ -171,21 +137,21 @@ // METHODS BotscriptParser(); ~BotscriptParser(); - ConstantInfo* FindConstant (const String& tok); - void ParseBotscript (String fileName); - DataBuffer* ParseCommand (CommandInfo* comm); - DataBuffer* ParseAssignment (ScriptVariable* var); - int ParseOperator (bool peek = false); - String ParseFloat(); - void PushScope(); - DataBuffer* ParseStatement(); - void AddSwitchCase (DataBuffer* b); - void CheckToplevel(); - void CheckNotToplevel(); - bool TokenIs (EToken a); - String GetTokenString(); - String DescribePosition() const; - void WriteToFile (String outfile); + ConstantInfo* FindConstant (const String& tok); + void ParseBotscript (String fileName); + DataBuffer* ParseCommand (CommandInfo* comm); + DataBuffer* ParseAssignment (ScriptVariable* var); + EAssignmentOperator ParseAssignmentOperator (); + String ParseFloat(); + void PushScope(); + DataBuffer* ParseStatement(); + void AddSwitchCase (DataBuffer* b); + void CheckToplevel(); + void CheckNotToplevel(); + bool TokenIs (EToken a); + String GetTokenString(); + String DescribePosition() const; + void WriteToFile (String outfile); inline int GetNumEvents() const { @@ -258,7 +224,8 @@ void ParseFuncdef(); void writeMemberBuffers(); void WriteStringTable(); - void ParseExpression (EType reqtype); + DataBuffer* ParseExpression (EType reqtype, bool fromhere = false); + EDataHeader GetAssigmentDataHeader (EAssignmentOperator op, ScriptVariable* var); }; #endif // BOTC_PARSER_H