Modify ↓
Opened 21 months ago
Last modified 8 months ago
#3943 assigned Bug
Using a function return to increment an counter array element causes TWO function calls
Reported by: | RTFC | Owned by: | Jon |
---|---|---|---|
Milestone: | Component: | AutoIt | |
Version: | 3.3.14.5 | Severity: | None |
Keywords: | array index function call | Cc: |
Description
When a function call yields an index that is used directly to increment an array element, the function is called twice!
Example:
Global $size=5 Global $array[$size] consolewrite( "standalone call yields: " & _GetRandomIndex($size-1) & @CRLF & @CRLF) consolewrite( "array index call + increment yields two calls?!" & @CRLF) $array[_GetRandomIndex($size-1)]+=1 Func _GetRandomIndex($maxindex) ConsoleWrite("func called" & @CRLF) Return Random(0,$maxindex,1) EndFunc
Attachments (0)
Change History (7)
comment:1 Changed 21 months ago by anonymous
comment:2 Changed 21 months ago by pixelsearch
For what it's worth, the related issue appeared for the 1st time with AutoIt version 3.3.10.0
#include <Array.au3> Local $array[5] $array[_F()] = "hello" _ArrayDisplay($array) Func _F() ConsoleWrite("func called" & @CRLF) ; once with 3.3.8.1 , twice with 3.3.10.0 ; implicit Return 0 EndFunc
2012 - AutoIt 3.3.8.1 => 1 call (tested)
2013 - AutoIt 3.3.10.0 => 2 calls (tested)
comment:3 Changed 19 months ago by Jpm
- Milestone set to 3.3.17.0
- Owner set to Jpm
- Resolution set to Fixed
- Status changed from new to closed
Fixed by revision [12983] in version: 3.3.17.0
comment:4 Changed 19 months ago by Jpm
- Resolution Fixed deleted
- Status changed from closed to reopened
comment:5 Changed 19 months ago by Jpm
Badly closed
comment:6 Changed 19 months ago by TicketCleanup
- Milestone 3.3.17.0 deleted
Automatic ticket cleanup.
comment:7 Changed 8 months ago by Jpm
- Owner changed from Jpm to Jon
- Status changed from reopened to assigned
Will be solved as soon Jon Commit the fix to #3003
Guidelines for posting comments:
- You cannot re-open a ticket but you may still leave a comment if you have additional information to add.
- In-depth discussions should take place on the forum.
For more information see the full version of the ticket guidelines here.
Note: See
TracTickets for help on using
tickets.
Presumably this affects all compound operators, not just +=
The solution would be to not blindly expand A[x]+=y to A[x]=A[x]+y but first capturing x in a temporary.