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
