From bde65525ad076b29bc85b1c0ee9008f3ad518e0b Mon Sep 17 00:00:00 2001 From: twanvl Date: Wed, 9 Jul 2008 16:03:13 +0000 Subject: [PATCH] some fixes to ^ operator git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@1014 0fc631ac-6414-0410-93d0-97cfa31319b6 --- src/script/context.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/script/context.cpp b/src/script/context.cpp index 1aeaea84..cd8c12f9 100644 --- a/src/script/context.cpp +++ b/src/script/context.cpp @@ -403,10 +403,25 @@ void instrBinary (BinaryInstructionType i, ScriptValueP& a, const ScriptValueP& } break; case I_POW: - if (at == SCRIPT_DOUBLE || bt == SCRIPT_DOUBLE) { - a = to_script(pow((double)*a, (double)*b)); + if (bt == SCRIPT_INT) { + int bi = *b; + if (at == SCRIPT_DOUBLE) { + double aa = *a; + if (bi == 0) a = to_script(1); + else if (bi == 1) a = to_script(aa); + else if (bi == 2) a = to_script(aa * aa); + else if (bi == 3) a = to_script(aa * aa * aa); + else a = to_script(pow(aa,bi)); + } else { + int aa = *a; + if (bi == 0) a = to_script(1); + else if (bi == 1) a = to_script(aa); + else if (bi == 2) a = to_script(aa * aa); + else if (bi == 3) a = to_script(aa * aa * aa); + else a = to_script(pow(aa,bi)); + } } else { - a = to_script(pow((int)*a, (int)*b)); + a = to_script(pow((double)*a, (double)*b)); } break; case I_AND: OPERATOR_B(&&);