Thanks,

I will download and test your patch. I've pushed up a work around for JOD but 
Henry's is better.

Also, is the addon builder running?  I committed an addon update and never saw 
it appear in package manager updates.

Finally, I will hit the donation button. I get more fun out of J than I get out 
of my yearly virus software renewals.

John

Sent from my iPhone

> On Feb 26, 2017, at 9:37 AM, Eric Iverson <[email protected]> wrote:
> 
> John,
> 
> Henry has fixed the bug and the fix has been pushed to the 806 beta source.
> 
> I have built a windows 64 806 beta-1 j.dll binary and have put it at the
> web site download/jengine page.
> 
> If possible, please confirm that that binary does indeed fix the bug you
> reported.
> 
> We have not yet decided how to handle this bug fix. Regardless, it may take
> a while for it get out to all users. You might want to consider using the
> workaround Henry suggested until the fix is established in the field.
> 
> 
> 
> 
> 
>> On Sun, Feb 26, 2017 at 8:42 AM, Henry Rich <[email protected]> wrote:
>> 
>> Fix is in for the next release.  I used your script to produce a shorter
>> testcase.
>> 
>> The error was that
>> 
>> name =. , name   NB. or =:
>> 
>> would do assignment-in-place even if the value in (name) was in use
>> somewhere else, like in another name, or a mapped file, or a boxed value.
>> 
>> Workaround:  replace with
>> 
>> name =. , , name
>> 
>> Henry Rich
>> 
>> 
>> 
>>> On 2/25/2017 8:09 PM, John Baker wrote:
>>> 
>>> Henry,
>>> 
>>> The following code reproduces the problem.  The (decomm) verb reassigns y
>>> during execution and it lingers.
>>> 
>>> 
>>> decomm=: 3 : 0
>>> NB.*decomm v--  removes comments  from j words. The (x) argument
>>> NB. specifies whether all blank lines are removed or retained.
>>> NB.
>>> NB. monad:  decomm ctWord
>>> NB.
>>> NB.   decomm jcr 'decomm'  NB. decomment self
>>> NB.
>>> NB. dyad:  pa decomm ctWord
>>> NB.
>>> NB.   1 decomm jcr 'decomm'  NB. remove blanks (default)
>>> NB.   0 decomm jcr 'decomm'  NB. retain all blank lines
>>> 1 decomm y
>>> :
>>> NB. mask of unquoted comment starts
>>> c=. ($y)$'NB.' E. ,y
>>> c=. +./\"1 c > ~:/\"1 y e. ''''
>>> y=. ,y
>>> NB. blank out comments
>>> y=. ' ' (I. ,c)} y
>>> y=. y $~ $c
>>> NB. remove blank lines - default
>>> if. x do. y #~ y +./ . ~: ' ' end.
>>> )
>>> 
>>> 
>>> 
>>> NB. character table representation of j words, call:  jcr 'verb'
>>> jcr=:[: ];._1 (10{a.) , [: 5!:5 <
>>> 
>>> 
>>> vanishshape=:3 : 0
>>> 
>>> 
>>> NB. run dewhitejcr (changes shape of y)
>>> 
>>> smoutput 'shape of y before';$y
>>> 
>>> NB. should  not change shape of y
>>> decomm y
>>> 
>>> smoutput 'shape of y after - has changed';$y
>>> )
>>> 
>>> NB. run to show shape shifting
>>> vanishshape jcr 'decomm'
>>> 
>>> 
>>> 
>>> On Sat, Feb 25, 2017 at 5:47 PM, John Baker <[email protected] <mailto:
>>> [email protected]>> wrote:
>>> 
>>>    Boy talk about responsive support. I don't think any of us are
>>>    expecting mostly volunteer J developers to leave parties to
>>>    address bugs.
>>> 
>>>    Cheers
>>> 
>>>    On Sat, Feb 25, 2017 at 5:09 PM, Henry Rich <[email protected]
>>>    <mailto:[email protected]>> wrote:
>>> 
>>>        I got away from the party & can confirm that the error is in
>>>        inplaced y=. ,y .  I still need your testcase so I can verify
>>>        the fix.
>>> 
>>>        hhr
>>> 
>>> 
>>>        On 2/25/2017 6:38 PM, John Baker wrote:
>>> 
>>>            Hi Henry,
>>> 
>>>            I will put together a simple script that reproduces the
>>>            problem. I will
>>>            send a zip directly to your email to avoid all the line
>>>            wrapping issues
>>>            people suffer when sending j code through forum mail.
>>> 
>>>            Cheers
>>> 
>>>            On Sat, Feb 25, 2017 at 4:26 PM, Henry Rich
>>>            <[email protected] <mailto:[email protected]>> wrote:
>>> 
>>>                Please send me a simple case to reproduce this.
>>> 
>>>                Henry Rich
>>> 
>>> 
>>>                On 2/25/2017 6:15 PM, John Baker wrote:
>>> 
>>>                    Greetings,
>>> 
>>>                    While preparing a minor JOD update to better
>>>                    support editing when running
>>>                    JOD from
>>>                    jconsole I noticed the compj verb in JOD was no
>>>                    longer completely
>>>                    compressing words.
>>> 
>>>                    This caused my JOD build scripts to fail so I
>>>                    started debugging and
>>>                    noticed
>>>                    J 8.05 can lose the shape of explicit J y
>>>                    arguments under some
>>>                    circumstances. This is
>>>                    a very serious bug! Observe the following
>>>                    debugging trace of the
>>>                    (compressj) word listed
>>>                    at the end of this message.
>>> 
>>>                    NB. debugging trace - of running JOD session with
>>>                    all objects created
>>> 
>>>                          JVERSION
>>> 
>>>                    Engine: j805/j64/windows
>>> 
>>>                    Release: commercial/2016-12-11T08:02:16
>>> 
>>>                    Library: 8.05.11
>>> 
>>>                    Qt IDE: 1.5.3/5.6.2
>>> 
>>>                    Platform: Win 64
>>> 
>>>                    Installer: J805 install
>>> 
>>>                    InstallPath: c:/j64/j64-805
>>> 
>>>                    Contact: www.jsoftware.com <http://www.jsoftware.com>
>>> 
>>> 
>>> 
>>>                         dbr 1
>>> 
>>>                    1 pick compj_3_ 'docfmt2'
>>> 
>>>                    |stop: compressj
>>> 
>>>                    | w=.1 e.CWSONLY E.,y
>>> 
>>>                    |compressj[13]
>>> 
>>>                    $y
>>> 
>>>                    28 71
>>> 
>>>                    |stop
>>> 
>>>                    | iy=.y
>>> 
>>>                    |compressj[16]
>>> 
>>>                    |stop
>>> 
>>>                    | u=.dewhitejcr y
>>> 
>>>                    |compressj[17]
>>> 
>>>                    |stop
>>> 
>>>                    | w
>>> 
>>>                    |compressj[18]
>>> 
>>>                    $ y
>>> 
>>>                    1988
>>> 
>>>                    $ iy
>>> 
>>>                    1988
>>> 
>>>                    At no point is y reassigned in the local scope yet
>>>                    its shape has changed.
>>>                    Even the shape
>>>                    of the copy iy was also changed.  The verb
>>>                    dewhitejcr seems to strip  the
>>>                    shape from y
>>>                    in the local scope.  This verb has been working
>>>                    fine for years so this is
>>>                    clearly some
>>>                    change in J system code.
>>> 
>>>                    Local values losing their shape due to system side
>>>                    effects is one of those
>>>                    all out the water bugs.  All the code compressj
>>>                    references is attached
>>>                    below.
>>> 
>>>                    Please contact me if you need help reproducing the
>>>                    error.
>>> 
>>>                    NB. compressj code follows
>>> 
>>>                    compressj=:3 : 0
>>> 
>>> 
>>>                    NB.*compressj v-- removes all white space from J
>>>                    words and
>>> 
>>>                    NB. shortens local names. This process reduces the
>>>                    readability of
>>> 
>>>                    NB. code and should only be applied to production
>>>                    code.
>>> 
>>>                    NB.
>>> 
>>>                    NB. monad: cl =. compressj ct
>>> 
>>>                    NB.
>>> 
>>>                    NB. compressj jcr 'verbname'
>>> 
>>>                    NB.
>>> 
>>>                    NB. NB. call in object context
>>> 
>>>                    NB. compressj__UT__JODobj jcr_ajod_ 'compressj_base_'
>>> 
>>> 
>>>                    NB. check for presence of white space only removal tag
>>> 
>>>                    w=. 1 e. CWSONLY E. ,y
>>> 
>>> 
>>>                    NB. always remove white space
>>> 
>>>                    u=. dewhitejcr y
>>> 
>>>                    if. w do. u return. end.
>>> 
>>> 
>>>                    NB. do not compress identifiers in code that cannot be
>>> 
>>>                    NB. reliably classified by the namecats verb.
>>> 
>>>                    if. badrc m=. 1 namecats__MK y do. u return. end.
>>> 
>>>                    d=. ~. ;(<2 3 4;1){m=. rv m
>>> 
>>> 
>>>                    NB. check for presence of obfuscation tag
>>> 
>>>                    if. o=. 1 e. OBFUSCATE E. ,y do.
>>> 
>>>                    NB. local names less J arguments
>>> 
>>>                    l=. ;(<1;1){m
>>> 
>>>                    l=. l -. JARGS__MK
>>> 
>>>                    else.
>>> 
>>>                    NB. local names less any single char names
>>> 
>>>                    l=. ;(<1;1){m
>>> 
>>>                    s=. l #~ 1 = #&> l
>>> 
>>>                    l=. l -. s
>>> 
>>>                    end.
>>> 
>>> 
>>>                    NB. remove object references
>>> 
>>>                    l=. l -. exobrefs l,;(<0;1){m
>>> 
>>> 
>>>                    NB. local names less any declared and for. names
>>> 
>>>                    if. 0=#m=. l -. d do. u return. end.
>>> 
>>> 
>>>                    NB. remove any names with embedded locale references
>>> 
>>>                    if. 0=#m=. m #~ -. islocref&> m do. u return. end.
>>> 
>>> 
>>>                    if. o do.
>>> 
>>>                    NB. form obsfucated name replacements - drop
>>>                    trailing _ in (NAMEALPHA)
>>> 
>>>                    bnr=. (<:#NAMEALPHA)&#.@((}:NAMEALPHA)&i.)^:_1
>>> 
>>>                    r=. ' ' -.~ ,'/' ,"1 (>m) ,"1 '/' ,"1 OBFUSCPFX
>>>                    ,"1 bnr (#m)?OBFUSCCNT
>>> 
>>>                    else.
>>> 
>>>                    NB. form replacements from any remaining chars
>>>                    !(*)=. SHORTNAMES
>>> 
>>>                    NB. J arguments m n x y u v are not on SHORTNAMES
>>> 
>>>                    if. 0=#r=. SHORTNAMES -. ,&.> s do. u return. end.
>>> 
>>>                    if. (#r) < #m do.
>>> 
>>>                    NB. we have more replacements than available
>>>                    SHORTNAMES
>>> 
>>>                    NB. form base (#r) numbers using SHORTNAMES digits
>>> 
>>>                    bnr=. (#r)&#.@((;r)&i.)^:_1
>>> 
>>>                    r=. r,<"1(#r) }. bnr i. #m
>>> 
>>>                    end.
>>> 
>>>                    r=. ; '/' ,&.> m ,. (#m) {. r
>>> 
>>>                    end.
>>> 
>>> 
>>>                    NB. replace tokens
>>> 
>>>                    r changetok u
>>> 
>>>                    )
>>> 
>>> 
>>> 
>>>                    decomm=:3 : 0
>>> 
>>>                    NB.*decomm v-- removes comments from j words. The
>>>                    (x) argument
>>> 
>>>                    NB. specifies whether all blank lines are removed
>>>                    or retained.
>>> 
>>>                    NB.
>>> 
>>>                    NB. monad: decomm ctWord
>>> 
>>>                    NB.
>>> 
>>>                    NB. decomm jcr 'decomm' NB. decomment self
>>> 
>>>                    NB.
>>> 
>>>                    NB. dyad: pa decomm ctWord
>>> 
>>>                    NB.
>>> 
>>>                    NB. 1 decomm jcr 'decomm' NB. remove blanks (default)
>>> 
>>>                    NB. 0 decomm jcr 'decomm' NB. retain all blank lines
>>> 
>>>                    1 decomm y
>>> 
>>>                    :
>>> 
>>>                    NB. mask of unquoted comment starts
>>> 
>>>                    c=. ($y)$'NB.' E. ,y
>>> 
>>>                    c=. +./\"1 c > ~:/\"1 y e. ''''
>>> 
>>>                    y=. ,y
>>> 
>>>                    NB. blank out comments
>>> 
>>>                    y=. ' ' (I. ,c)} y
>>> 
>>>                    y=. y $~ $c
>>> 
>>>                    NB. remove blank lines - default
>>> 
>>>                    if. x do. y #~ y +./ . ~: ' ' end.
>>> 
>>>                    )
>>> 
>>> 
>>> 
>>>                    dewhitejcr=:3 : 0
>>> 
>>> 
>>>                    NB.*dewhitejcr v-- removes all redundant blanks
>>>                    from J code.
>>> 
>>>                    NB. Result is a character list in linear
>>>                    representation format.
>>> 
>>>                    NB.
>>> 
>>>                    NB. monad: cl =. dewhitejcr ct
>>> 
>>>                    NB.
>>> 
>>>                    NB. dewhitejcr jcr 'anyword'
>>> 
>>> 
>>>                    tt=. ;:&.> <"1 (ljust@:decomm) y NB. list of
>>>                    tokenized lines
>>> 
>>>                    ; (blkaft&.> tt) ,&.> LF NB. insert blanks, LF's
>>>                    and raise
>>> 
>>>                    )
>>> 
>>> 
>>>                    NB. extract object references from blcl of names
>>> 
>>>                    exobrefs=:a:"_ -.~ [: ~. [: ; [: <;._1&.> ([:
>>>                    +./\&.> (<'__')"_ E.&.> ])
>>>                    #&.> ]
>>> 
>>> 
>>>                    NB. 1 if name is a locale reference 0 otherwise
>>> 
>>>                    islocref=:('_'"_ = {:) +. [: +./ '__'"_ E. ]
>>> 
>>> 
>>>                    NB. left justify table
>>> 
>>>                    ljust=:' '&$: :(] |."_1~ i."1&0@(] e. [))
>>> 
>>> 
>>>                    NB. ok return value
>>> 
>>>                    rv=:>@(1&{)
>>>                    ------------------------------
>>> ----------------------------------------
>>>                    For information about J forums see
>>>                    http://www.jsoftware.com/forums.htm
>>>                    <http://www.jsoftware.com/forums.htm>
>>> 
>>>                ------------------------------
>>> ----------------------------------------
>>>                For information about J forums see
>>>                http://www.jsoftware.com/forums.htm
>>>                <http://www.jsoftware.com/forums.htm>
>>> 
>>> 
>>> 
>>> 
>>> 
>>>        ------------------------------------------------------------
>>> ----------
>>>        For information about J forums see
>>>        http://www.jsoftware.com/forums.htm
>>>        <http://www.jsoftware.com/forums.htm>
>>> 
>>> 
>>> 
>>> 
>>>    --     John D. Baker
>>>    [email protected] <mailto:[email protected]>
>>> 
>>> 
>>> 
>>> 
>>> --
>>> John D. Baker
>>> [email protected] <mailto:[email protected]>
>>> 
>> 
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>> 
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to