mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-13 14:07:01 -04:00
Added min and max script pseudo-functions
git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@497 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
@@ -275,6 +275,15 @@ void instrUnary (UnaryInstructionType i, ScriptValueP& a) {
|
|||||||
} \
|
} \
|
||||||
break
|
break
|
||||||
|
|
||||||
|
// operator on doubles or ints, defined as a function
|
||||||
|
#define OPERATOR_FUN_DI(OP) \
|
||||||
|
if (at == SCRIPT_DOUBLE || bt == SCRIPT_DOUBLE) { \
|
||||||
|
a = to_script(OP((double)*a, (double)*b)); \
|
||||||
|
} else { \
|
||||||
|
a = to_script(OP((int)*a, (int)*b)); \
|
||||||
|
} \
|
||||||
|
break
|
||||||
|
|
||||||
// operator on strings or doubles or ints, when in doubt, uses strings
|
// operator on strings or doubles or ints, when in doubt, uses strings
|
||||||
#define OPERATOR_SDI(OP) \
|
#define OPERATOR_SDI(OP) \
|
||||||
if (at == SCRIPT_INT && bt == SCRIPT_INT) { \
|
if (at == SCRIPT_INT && bt == SCRIPT_INT) { \
|
||||||
@@ -349,6 +358,8 @@ void instrBinary (BinaryInstructionType i, ScriptValueP& a, const ScriptValueP&
|
|||||||
case I_GT: OPERATOR_DI(>);
|
case I_GT: OPERATOR_DI(>);
|
||||||
case I_LE: OPERATOR_DI(<=);
|
case I_LE: OPERATOR_DI(<=);
|
||||||
case I_GE: OPERATOR_DI(>=);
|
case I_GE: OPERATOR_DI(>=);
|
||||||
|
case I_MIN: OPERATOR_FUN_DI(min);
|
||||||
|
case I_MAX: OPERATOR_FUN_DI(max);
|
||||||
case I_OR_ELSE:
|
case I_OR_ELSE:
|
||||||
if (at == SCRIPT_ERROR) a = b;
|
if (at == SCRIPT_ERROR) a = b;
|
||||||
break;
|
break;
|
||||||
|
|||||||
+12
-1
@@ -505,9 +505,20 @@ void parseExpr(TokenIterator& input, Script& script, Precedence minPrec) {
|
|||||||
parseOper(input, script, PREC_ALL); // b
|
parseOper(input, script, PREC_ALL); // b
|
||||||
expectToken(input, _(")"));
|
expectToken(input, _(")"));
|
||||||
script.addInstruction(I_TERNARY, I_RGB);
|
script.addInstruction(I_TERNARY, I_RGB);
|
||||||
|
} else if (token == _("min") || token == _("max")) {
|
||||||
|
// min(x,y,z,...)
|
||||||
|
unsigned int op = token == _("min") ? I_MIN : I_MAX;
|
||||||
|
expectToken(input, _("("));
|
||||||
|
parseOper(input, script, PREC_ALL); // first
|
||||||
|
while(input.peek() == _(",")) {
|
||||||
|
expectToken(input, _(","));
|
||||||
|
parseOper(input, script, PREC_ALL); // second, third, etc.
|
||||||
|
script.addInstruction(I_BINARY, op);
|
||||||
|
}
|
||||||
|
expectToken(input, _(")"));
|
||||||
} else {
|
} else {
|
||||||
// variable
|
// variable
|
||||||
unsigned int var = string_to_variable(token.value);
|
Variable var = string_to_variable(token.value);
|
||||||
script.addInstruction(I_GET_VAR, var);
|
script.addInstruction(I_GET_VAR, var);
|
||||||
}
|
}
|
||||||
} else if (token == TOK_INT) {
|
} else if (token == TOK_INT) {
|
||||||
|
|||||||
@@ -70,6 +70,8 @@ enum BinaryInstructionType
|
|||||||
, I_GT ///< operator >
|
, I_GT ///< operator >
|
||||||
, I_LE ///< operator <=
|
, I_LE ///< operator <=
|
||||||
, I_GE ///< operator >=
|
, I_GE ///< operator >=
|
||||||
|
, I_MIN ///< minimum
|
||||||
|
, I_MAX ///< maximum
|
||||||
// Error handling
|
// Error handling
|
||||||
, I_OR_ELSE ///< if a != error then a else b
|
, I_OR_ELSE ///< if a != error then a else b
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user