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




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

Reply via email to