I've tested Henry's patch.  The y=.,,y seems to do the trick.


On Mon, Feb 27, 2017 at 8:25 AM, John Baker <[email protected]> wrote:

> 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
>



-- 
John D. Baker
[email protected]
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to