Modify

Opened 2 years ago

Last modified 14 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


Change History (7)

comment:1 Changed 2 years ago by anonymous

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.

comment:2 Changed 2 years 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 2 years 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 2 years ago by Jpm

  • Resolution Fixed deleted
  • Status changed from closed to reopened

comment:5 Changed 2 years ago by Jpm

Badly closed

comment:6 Changed 2 years ago by TicketCleanup

  • Milestone 3.3.17.0 deleted

Automatic ticket cleanup.

comment:7 Changed 14 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.

Add Comment

Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.