Modify ↓
#2612 closed Bug (Fixed)
Au3Check bugs on function reference when function takes byref parameter
Reported by: | jchd18 | Owned by: | Jpm |
---|---|---|---|
Milestone: | 3.3.11.5 | Component: | Au3Check |
Version: | 3.3.11.2 | Severity: | None |
Keywords: | Cc: |
Description
Code to trigger the issue:
Local $f = function Local $s = 'xxx' $f($s) ; function declaration needs to be after function reference assignment for the bug to occur Func function(ByRef $title) MsgBox(0, $title, 'function invoked') EndFunc
Au3Check gets confused and raises an error:
>"C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /beta /ErrorStdOut /in "C:\Users\jc\Documents\AutoMAT\tmp\fct.au3" /UserParams +>00:45:12 Starting AutoIt3Wrapper v.2.1.4.0 SciTE v.3.3.7.0 ; Keyboard:0000040C OS:WIN_7/Service Pack 1 CPU:X64 OS:X64 Environment(Language:040C Keyboard:0000040C OS:WIN_7/Service Pack 1 CPU:X64 OS:X64) >Running AU3Check (3.3.11.2) from:C:\Program Files (x86)\AutoIt3\Beta "C:\Users\jc\Documents\AutoMAT\tmp\fct.au3"(15,28) : error: function() previously called with Const or expression on ByRef param(s). Func function(ByRef $title) ~~~~~~~~~~~~~~~~~~~~~~~~~~~^ "C:\Users\jc\Documents\AutoMAT\tmp\fct.au3"(10,20) : REF: first call to function(). Local $f = function ~~~~~~~~~~~~~~~~~~~^ C:\Users\jc\Documents\AutoMAT\tmp\fct.au3 - 1 error(s), 0 warning(s)
Non-beta version 3.3.10.2 behaves identically.
Attachments (0)
Change History (7)
comment:1 Changed 11 years ago by anonymous
comment:2 Changed 11 years ago by guinness
It's a bug! Now functions are first class objects.
comment:3 Changed 11 years ago by guinness
#AutoIt3Wrapper_Run_Au3Check=N ; Au3Check displays an error. ; 1st approach. Local $sString = '' Local $hFunc = ByRefFunc $hFunc($sString) ; The variable is passed as a reference and not a value. $hFunc($sString) $hFunc($sString) ConsoleWrite($sString & @CRLF) ; 2nd approach. $sString = '' ByRefFuncCall($sString, ByRefFunc) Func ByRefFunc(ByRef $sVal) ; Changing to a pass by value and the error disappears. $sVal &= '__' Return True EndFunc ;==>ByRefFunc Func ByRefFuncCall($sVal, $hFunc) $hFunc($sVal) $hFunc($sVal) $hFunc($sVal) ConsoleWrite($sVal & @CRLF) EndFunc ;==>ByRefFuncCall
comment:4 Changed 11 years ago by Jpm
If You declare the function before no error ...
comment:5 Changed 11 years ago by jchd18
I made a note of that in my first post. I look at that solution as a temporary workaround.
comment:6 Changed 11 years ago by Jpm
- Milestone set to 3.3.11.5
- Owner set to Jpm
- Resolution set to Fixed
- Status changed from new to closed
Fixed by revision [10077] in version: 3.3.11.5
comment:7 Changed 9 years ago by anonymous to
>Running AU3Check (3.3.12.0) params:-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7 from:X:\XXX\AutoIt3 "X:\XXX...\XXX.au3"(713,59) : error: ab_update() previously called with Const or expression on ByRef param(s). Func ab_update(ByRef $gui_id, ByRef $color)
Darn. A version mismatch. That sucks.
O well, its better than nothing I guess.
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.
Not a bug, syntax error.
Use: