﻿id	summary	reporter	owner	description	type	status	milestone	component	version	severity	resolution	keywords	cc
3869	Subtraction operator before power operation is parsed incorrectly	AspirinJunkie	Jon	"For the operation of the basic form {{{a - b^e}}}, the result depends on the data type of the base b and the parity of the exponent e.

The following test script:
{{{
#!autoit
Global $sString = """"

$x = 2

$y = 4
$sString = StringFormat(""% 15s = %d\n"", ""11 - 2 ^ 4"", 11 - 2 ^ 4) & _
    StringFormat(""% 15s = %d\n"", ""11 - 2.0 ^ 4"", 11 - 2.0 ^ 4) & _
	StringFormat(""% 15s = %d\n"", ""11 - 2e0 ^ 4"", 11 - 2e0 ^ 4) & _
	StringFormat(""% 15s = %d\n"", ""11 - '2' ^ 4"", 11 - '2' ^ 4) & _
	StringFormat(""% 15s = %d\n"", ""11 - $x ^ 4"", 11 - $x ^ 4) & _
	StringFormat(""% 15s = %d\n"", ""11 - (2 ^ 4)"", 11 - (2 ^ 4)) & _
	StringFormat(""% 15s = %d\n"", ""11 - - 2 ^ 4"", 11 - - 2 ^ 4) & _
	StringFormat(""% 15s = %d\n\n"", ""11 - 2 ^ $y"", 11 - 2 ^ $y) 

$y = 3
$sString &= StringFormat(""% 15s = %d\n"", ""11 - 2 ^ 3"", 11 - 2 ^ 3) & _
    StringFormat(""% 15s = %d\n"", ""11 - 2.0 ^ 3"", 11 - 2.0 ^ 3) & _
	StringFormat(""% 15s = %d\n"", ""11 - 2e0 ^ 3"", 11 - 2e0 ^ 3) & _
	StringFormat(""% 15s = %d\n"", ""11 - '2' ^ 3"", 11 - '2' ^ 3) & _
	StringFormat(""% 15s = %d\n"", ""11 - $x ^ 3"", 11 - $x ^ 3) & _
	StringFormat(""% 15s = %d\n"", ""11 - (2 ^ 3)"", (11 - 2 ^ 3)) & _
	StringFormat(""% 15s = %d\n"", ""11 - - 2 ^ 3"", 11 - 2 ^ 3) & _
	StringFormat(""% 15s = %d\n\n"", ""11 - 2 ^ $y"", 11 - 2 ^ $y) 

ConsoleWrite($sString)
}}}


produces under 3.3.16.0:
{{{
     11 - 2 ^ 4 = 27
   11 - 2.0 ^ 4 = 27
   11 - 2e0 ^ 4 = 27
   11 - '2' ^ 4 = -5
    11 - $x ^ 4 = -5
   11 - (2 ^ 4) = -5
   11 - - 2 ^ 4 = -5
    11 - 2 ^ $y = 27

     11 - 2 ^ 3 = 3
   11 - 2.0 ^ 3 = 3
   11 - 2e0 ^ 3 = 3
   11 - '2' ^ 3 = 3
    11 - $x ^ 3 = 3
   11 - (2 ^ 3) = 3
   11 - - 2 ^ 3 = 3
    11 - 2 ^ $y = 3
}}}


and under 3.3.14.5:
{{{
  11 - 2 ^ 4 = 27
11 - 2.0 ^ 4 = -5
11 - 2e0 ^ 4 = -5
11 - '2' ^ 4 = -5
 11 - $x ^ 4 = -5
11 - (2 ^ 4) = -5
11 - - 2 ^ 4 = -5
 11 - 2 ^ $y = 27

  11 - 2 ^ 3 = 3
11 - 2.0 ^ 3 = 3
11 - 2e0 ^ 3 = 3
11 - '2' ^ 3 = 3
 11 - $x ^ 3 = 3
11 - (2 ^ 3) = 3
11 - - 2 ^ 3 = 3
 11 - 2 ^ $y = 3
}}}

Two possible explanations for this behaviour:
1. binary minus is misinterpreted as unary minus:
 * The minus has two functions - once as a binary minus operator and once as a unary sign operator.
 * The tricky thing about this is that the binary operator has a lower priority than the power operator.
 * The sign operator, on the other hand, has a higher priority (in contrast to mathematics) than the power operator.
 * This leads to the implicit execution `(-2)^4`
 * The basic problem here, however, is that even if the minus here is only interpreted as a sign operator, we still lack a binary operator that links the right side with the 11. The parser seems to assume a plus operator for this.
 * Furthermore, there is no indication in the AutoIt documentation so far that the sign operator has a higher valence than the power operator.

2. the minus is executed twice:
 * the `-`-Operator seem to be executed twice - once as a unary operator (sign) and once as a binary operator (the minus operation).
 * This leads to the implicit calculation `11 - (-(2^4))`


"	Bug	closed	3.3.16.1	AutoIt	3.3.16.0	None	Fixed	power minus	
