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