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 |