parser.cxx

changeset 52
f2596a239ea1
parent 51
2cfa6edbf928
child 53
9ef7e549391f
equal deleted inserted replaced
51:2cfa6edbf928 52:f2596a239ea1
644 return false; 644 return false;
645 } 645 }
646 646
647 // ============================================================================ 647 // ============================================================================
648 // Finds an operator's corresponding dataheader 648 // Finds an operator's corresponding dataheader
649 static long DataHeaderByOperator (ScriptVar* var, int oper) { 649 static word DataHeaderByOperator (ScriptVar* var, int oper) {
650 if (IsAssignmentOperator (oper)) { 650 if (IsAssignmentOperator (oper)) {
651 if (!var) 651 if (!var)
652 error ("operator %d requires left operand to be a variable\n", oper); 652 error ("operator %d requires left operand to be a variable\n", oper);
653 653
654 // TODO: At the moment, vars only are global 654 // TODO: At the moment, vars only are global
788 // a literal or an expression. 788 // a literal or an expression.
789 DataBuffer* ScriptReader::ParseExprValue (int reqtype) { 789 DataBuffer* ScriptReader::ParseExprValue (int reqtype) {
790 DataBuffer* b = new DataBuffer(16); 790 DataBuffer* b = new DataBuffer(16);
791 791
792 ScriptVar* g; 792 ScriptVar* g;
793
794 // Prefixing "!" means negation.
795 bool negate = !token.compare ("!");
796 if (negate) // Jump past the "!"
797 MustNext ();
793 798
794 if (!token.compare ("(")) { 799 if (!token.compare ("(")) {
795 // Expression 800 // Expression
796 MustNext (); 801 MustNext ();
797 DataBuffer* c = ParseExpression (reqtype); 802 DataBuffer* c = ParseExpression (reqtype);
836 b->Write<word> (PushToStringTable (token.chars())); 841 b->Write<word> (PushToStringTable (token.chars()));
837 break; 842 break;
838 } 843 }
839 } 844 }
840 845
846 // Negate it now if desired
847 if (negate)
848 b->Write<word> (DH_NEGATELOGICAL);
849
841 return b; 850 return b;
842 } 851 }
843 852
844 // ============================================================================ 853 // ============================================================================
845 // Parses an assignment. An assignment starts with a variable name, followed 854 // Parses an assignment. An assignment starts with a variable name, followed

mercurial