From b2cecd2c0f300ffcda871e9c47cd2b27d182d3f9 Mon Sep 17 00:00:00 2001 From: dyb Date: Thu, 21 Mar 2019 14:30:49 -0700 Subject: [PATCH] 9.5.2 changes: - updated version to 9.5.2 bintar/Makefile rpm/Makefile pkg/Makefile BUILDING NOTICE makefiles/Mf-install.in makefiles/Makefile-csug.in scheme.1.in c/Makefile.a6nt c/Makefile.i3nt c/Makefile.ta6nt c/Makefile.ti3nt mats/Mf-a6nt mats/Mf-i3nt mats/Mf-ta6nt mats/Mf-ti3nt workarea c/scheme.rc s/7.ss s/cmacros.ss release_notes/release_notes.stex csug/copyright.stex csug/csug.stex rpm/Makefile pkg/Makefile wininstall/Makefile wininstall/a6nt.wxs wininstall/i3nt.wxs wininstall/ta6nt.wxs wininstall/ti3nt.wxs - fixed handling of bintar, rpm, pkg make files newrelease - fixed a bug in the fasl representation and reading of mutually recursive ftypes where one of the members of the cycle is the parent of another, which manifested in the fasl reader raising bogus "incompatible record type" exceptions. (The bug could also affect other record-type descriptors with cycles involving parent rtds and "extra" fields.) object files created before this fix are incompatible with builds with this fix, and objects files created after this fix are incompatible builds without this fix. fasl.ss, strip.ss, fasl.c, ftype.ms, release_notes.stex original commit: 766d591c18c2779866d1a059700e6ff1c02cb3c5 --- BUILDING | 4 +-- LOG | 25 ++++++++++++++++++ NOTICE | 4 +-- bintar/Makefile | 2 +- c/Makefile.a6nt | 10 +++---- c/Makefile.i3nt | 10 +++---- c/Makefile.ta6nt | 10 +++---- c/Makefile.ti3nt | 10 +++---- c/fasl.c | 23 ++++++++-------- c/scheme.rc | 12 ++++----- csug/copyright.stex | 4 +-- csug/csug.stex | 4 +-- makefiles/Mf-install.in | 2 +- mats/Mf-a6nt | 2 +- mats/Mf-i3nt | 2 +- mats/Mf-ta6nt | 2 +- mats/Mf-ti3nt | 2 +- mats/ftype.ms | 36 +++++++++++++++++++++++++ newrelease | 18 ++++++++----- pkg/Makefile | 2 +- release_notes/release_notes.stex | 23 +++++++++++++++- rpm/Makefile | 2 +- s/7.ss | 2 +- s/cmacros.ss | 2 +- s/fasl.ss | 4 +++ s/strip.ss | 45 +++++++++++++++++++------------- scheme.1.in | 4 +-- wininstall/Makefile | 2 +- wininstall/a6nt.wxs | 12 ++++----- wininstall/i3nt.wxs | 12 ++++----- wininstall/ta6nt.wxs | 12 ++++----- wininstall/ti3nt.wxs | 12 ++++----- workarea | 8 +++--- 33 files changed, 213 insertions(+), 111 deletions(-) mode change 100755 => 100644 wininstall/Makefile mode change 100755 => 100644 wininstall/a6nt.wxs mode change 100755 => 100644 wininstall/i3nt.wxs mode change 100755 => 100644 wininstall/ta6nt.wxs mode change 100755 => 100644 wininstall/ti3nt.wxs diff --git a/BUILDING b/BUILDING index 49d7bacec6..07d0a78805 100644 --- a/BUILDING +++ b/BUILDING @@ -1,5 +1,5 @@ -Building Chez Scheme Version 9.5.1 -Copyright 1984-2017 Cisco Systems, Inc. +Building Chez Scheme Version 9.5.2 +Copyright 1984-2019 Cisco Systems, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/LOG b/LOG index 7f65723c53..5c0ea61dbe 100644 --- a/LOG +++ b/LOG @@ -1207,3 +1207,28 @@ - added library-search-handler, compile-whole-library, and improved packaging to the release notes. release_notes/release_notes.stex + +9.5.2 changes: +- updated version to 9.5.2 + bintar/Makefile rpm/Makefile pkg/Makefile BUILDING NOTICE + makefiles/Mf-install.in makefiles/Makefile-csug.in scheme.1.in + c/Makefile.a6nt c/Makefile.i3nt c/Makefile.ta6nt c/Makefile.ti3nt + mats/Mf-a6nt mats/Mf-i3nt mats/Mf-ta6nt mats/Mf-ti3nt workarea + c/scheme.rc s/7.ss s/cmacros.ss release_notes/release_notes.stex + csug/copyright.stex csug/csug.stex rpm/Makefile pkg/Makefile + wininstall/Makefile wininstall/a6nt.wxs wininstall/i3nt.wxs + wininstall/ta6nt.wxs wininstall/ti3nt.wxs +- fixed handling of bintar, rpm, pkg make files + newrelease +- fixed a bug in the fasl representation and reading of mutually + recursive ftypes where one of the members of the cycle is the + parent of another, which manifested in the fasl reader raising + bogus "incompatible record type" exceptions. (The bug could also + affect other record-type descriptors with cycles involving parent + rtds and "extra" fields.) object files created before this fix + are incompatible with builds with this fix, and objects files + created after this fix are incompatible builds without this fix. + fasl.ss, strip.ss, + fasl.c, + ftype.ms, + release_notes.stex diff --git a/NOTICE b/NOTICE index fb3bf4d92d..386eeb28d4 100644 --- a/NOTICE +++ b/NOTICE @@ -1,5 +1,5 @@ -Chez Scheme Version 9.5.1 -Copyright 1984-2017 Cisco Systems, Inc. +Chez Scheme Version 9.5.2 +Copyright 1984-2019 Cisco Systems, Inc. This product includes code developed by Cisco Systems, Inc. diff --git a/bintar/Makefile b/bintar/Makefile index 61b323ccb0..14d3933b2f 100644 --- a/bintar/Makefile +++ b/bintar/Makefile @@ -13,7 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -version = 9.5.1 +version = 9.5.2 m := $(shell find ../bin/* -type d | xargs basename) R = csv$(version) diff --git a/c/Makefile.a6nt b/c/Makefile.a6nt index 04c9659e71..79eedfcf43 100644 --- a/c/Makefile.a6nt +++ b/c/Makefile.a6nt @@ -17,11 +17,11 @@ m = a6nt # following have to use \ for directory separator SchemeInclude = ..\boot\$m -KernelDll = ..\bin\$m\csv951.dll -KernelLib = ..\bin\$m\csv951.lib -MTKernelLib = ..\boot\$m\csv951mt.lib -MDKernelLib = ..\boot\$m\csv951md.lib -KernelExp = ..\bin\$m\csv951.exp +KernelDll = ..\bin\$m\csv952.dll +KernelLib = ..\bin\$m\csv952.lib +MTKernelLib = ..\boot\$m\csv952mt.lib +MDKernelLib = ..\boot\$m\csv952md.lib +KernelExp = ..\bin\$m\csv952.exp Exec = ..\bin\$m\scheme.exe MTMain = ..\boot\$m\mainmt.obj MDMain = ..\boot\$m\mainmd.obj diff --git a/c/Makefile.i3nt b/c/Makefile.i3nt index 279558721e..4a91a815a7 100644 --- a/c/Makefile.i3nt +++ b/c/Makefile.i3nt @@ -17,11 +17,11 @@ m = i3nt # following have to use \ for directory separator SchemeInclude = ..\boot\$m -KernelDll = ..\bin\$m\csv951.dll -KernelLib = ..\bin\$m\csv951.lib -MTKernelLib = ..\boot\$m\csv951mt.lib -MDKernelLib = ..\boot\$m\csv951md.lib -KernelExp = ..\bin\$m\csv951.exp +KernelDll = ..\bin\$m\csv952.dll +KernelLib = ..\bin\$m\csv952.lib +MTKernelLib = ..\boot\$m\csv952mt.lib +MDKernelLib = ..\boot\$m\csv952md.lib +KernelExp = ..\bin\$m\csv952.exp Exec = ..\bin\$m\scheme.exe MTMain = ..\boot\$m\mainmt.obj MDMain = ..\boot\$m\mainmd.obj diff --git a/c/Makefile.ta6nt b/c/Makefile.ta6nt index 637f1b4889..9a6617551f 100644 --- a/c/Makefile.ta6nt +++ b/c/Makefile.ta6nt @@ -17,11 +17,11 @@ m = ta6nt # following have to use \ for directory separator SchemeInclude = ..\boot\$m -KernelDll = ..\bin\$m\csv951.dll -KernelLib = ..\bin\$m\csv951.lib -MTKernelLib = ..\boot\$m\csv951mt.lib -MDKernelLib = ..\boot\$m\csv951md.lib -KernelExp = ..\bin\$m\csv951.exp +KernelDll = ..\bin\$m\csv952.dll +KernelLib = ..\bin\$m\csv952.lib +MTKernelLib = ..\boot\$m\csv952mt.lib +MDKernelLib = ..\boot\$m\csv952md.lib +KernelExp = ..\bin\$m\csv952.exp Exec = ..\bin\$m\scheme.exe MTMain = ..\boot\$m\mainmt.obj MDMain = ..\boot\$m\mainmd.obj diff --git a/c/Makefile.ti3nt b/c/Makefile.ti3nt index 8dfa80e6fa..bcf9cd433e 100644 --- a/c/Makefile.ti3nt +++ b/c/Makefile.ti3nt @@ -17,11 +17,11 @@ m = ti3nt # following have to use \ for directory separator SchemeInclude = ..\boot\$m -KernelDll = ..\bin\$m\csv951.dll -KernelLib = ..\bin\$m\csv951.lib -MTKernelLib = ..\boot\$m\csv951mt.lib -MDKernelLib = ..\boot\$m\csv951md.lib -KernelExp = ..\bin\$m\csv951.exp +KernelDll = ..\bin\$m\csv952.dll +KernelLib = ..\bin\$m\csv952.lib +MTKernelLib = ..\boot\$m\csv952mt.lib +MDKernelLib = ..\boot\$m\csv952md.lib +KernelExp = ..\bin\$m\csv952.exp Exec = ..\bin\$m\scheme.exe MTMain = ..\boot\$m\mainmt.obj MDMain = ..\boot\$m\mainmd.obj diff --git a/c/fasl.c b/c/fasl.c index ec7799b9bc..fef56cdb9f 100644 --- a/c/fasl.c +++ b/c/fasl.c @@ -71,7 +71,7 @@ * * -> {base-rtd} * - * -> {rtd} + * -> {rtd} * * -> {record} * @@ -696,24 +696,25 @@ static void faslin(ptr tc, ptr *x, ptr t, ptr *pstrbuf, faslFile f) { } case fasl_type_rtd: { ptr rtd, rtd_uid, plist, ls; - fasl_record(tc, x, t, pstrbuf, f); - rtd = *x; - rtd_uid = RECORDDESCUID(rtd); + faslin(tc, &rtd_uid, t, pstrbuf, f); - /* see if uid's property list already registers an rtd */ + /* look for rtd on uid's property list */ plist = SYMSPLIST(rtd_uid); for (ls = plist; ls != Snil; ls = Scdr(Scdr(ls))) { if (Scar(ls) == S_G.rtd_key) { - ptr old_rtd = Scar(Scdr(ls)); - /* if so, check new rtd against old rtd and return old rtd */ - if (!rtd_equiv(rtd, old_rtd)) - S_error2("", "incompatible record type ~s in ~a", RECORDDESCNAME(rtd), f->uf->path); - *x = old_rtd; + ptr tmp; + *x = rtd = Scar(Scdr(ls)); + fasl_record(tc, &tmp, t, pstrbuf, f); + if (!rtd_equiv(tmp, rtd)) + S_error2("", "incompatible record type ~s in ~a", RECORDDESCNAME(tmp), f->uf->path); return; } } - /* if not, register it */ + fasl_record(tc, x, t, pstrbuf, f); + rtd = *x; + + /* register rtd on uid's property list */ SETSYMSPLIST(rtd_uid, Scons(S_G.rtd_key, Scons(rtd, plist))); return; } diff --git a/c/scheme.rc b/c/scheme.rc index 5f9a1d7660..3c31db7892 100644 --- a/c/scheme.rc +++ b/c/scheme.rc @@ -1,8 +1,8 @@ #include "winver.h" VS_VERSION_INFO VERSIONINFO - FILEVERSION 9,5,1,0 - PRODUCTVERSION 9,5,1,0 + FILEVERSION 9,5,2,0 + PRODUCTVERSION 9,5,2,0 FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS VOS__WINDOWS32 @@ -12,13 +12,13 @@ VS_VERSION_INFO VERSIONINFO BLOCK "StringFileInfo" { BLOCK "04090000" { VALUE "CompanyName", "Cisco Systems, Inc." - VALUE "FileDescription", "Chez Scheme Version 9.5.1" - VALUE "FileVersion", "9.5.1" + VALUE "FileDescription", "Chez Scheme Version 9.5.2" + VALUE "FileVersion", "9.5.2" VALUE "InternalName", "scheme.exe" - VALUE "LegalCopyright", "Copyright 1984-2017 Cisco Systems, Inc. Licensed under the Apache License, Version 2.0." + VALUE "LegalCopyright", "Copyright 1984-2019 Cisco Systems, Inc. Licensed under the Apache License, Version 2.0." VALUE "OriginalFilename", "scheme.exe" VALUE "ProductName", "Chez Scheme" - VALUE "ProductVersion", "9.5.1" + VALUE "ProductVersion", "9.5.2" } } BLOCK "VarFileInfo" { diff --git a/csug/copyright.stex b/csug/copyright.stex index de160eb21c..583e8868a2 100644 --- a/csug/copyright.stex +++ b/csug/copyright.stex @@ -16,13 +16,13 @@ \centerline{}\vfill -\textbf{\copyright~2005--2018 Cisco Systems, Inc.} +\textbf{\copyright~2019 Cisco Systems, Inc.} Licensed under the Apache License Version 2.0\\ http://www.apache.org/licenses/LICENSE-2.0 % NB: also update corresponding notice in csug.stex -Revised \revisiondate~for Chez Scheme Version 9.5.1. +Revised \revisiondate~for Chez Scheme Version 9.5.2. \medskip\noindent Cisco and the Cisco logo are trademarks or registered trademarks diff --git a/csug/csug.stex b/csug/csug.stex index 39800fc021..bcd9d7d37b 100644 --- a/csug/csug.stex +++ b/csug/csug.stex @@ -60,10 +60,10 @@ \def\copyrightnotice{\raw{

Chez Scheme Version 9 User's Guide
-Copyright © 2018 Cisco Systems, Inc.
+Copyright © 2019 Cisco Systems, Inc.
Licensed under the Apache License Version 2.0 (full copyright notice.).
-Revised} \revisiondate\raw{ for Chez Scheme Version 9.5.1
+Revised} \revisiondate\raw{ for Chez Scheme Version 9.5.2
about this book }} diff --git a/makefiles/Mf-install.in b/makefiles/Mf-install.in index b40b524bd4..6ea9aaaca0 100644 --- a/makefiles/Mf-install.in +++ b/makefiles/Mf-install.in @@ -55,7 +55,7 @@ InstallScriptName=scheme-script # no changes should be needed below this point # ############################################################################### -Version=csv9.5.1 +Version=csv9.5.2 Include=boot/$m PetiteBoot=boot/$m/petite.boot SchemeBoot=boot/$m/scheme.boot diff --git a/mats/Mf-a6nt b/mats/Mf-a6nt index 51957fad69..0244275180 100644 --- a/mats/Mf-a6nt +++ b/mats/Mf-a6nt @@ -22,7 +22,7 @@ mdclean = cat_flush.exe cat_flush.obj foreign1.exp foreign1.lib foreign1.obj for include Mf-base foreign1.so: $(fsrc) - cmd.exe /c "vs.bat amd64 && cl /DWIN32 /DX86_64 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv951.lib $(fsrc)" + cmd.exe /c "vs.bat amd64 && cl /DWIN32 /DX86_64 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv952.lib $(fsrc)" cat_flush: cat_flush.c cmd.exe /c "vs.bat amd64 && cl /DWIN32 /DX86_64 /MD /nologo $<" diff --git a/mats/Mf-i3nt b/mats/Mf-i3nt index 52e9d3e093..d807e0a8b3 100644 --- a/mats/Mf-i3nt +++ b/mats/Mf-i3nt @@ -22,7 +22,7 @@ mdclean = cat_flush.exe cat_flush.obj foreign1.exp foreign1.lib foreign1.obj for include Mf-base foreign1.so: $(fsrc) - cmd.exe /c "vs.bat x86 && cl /DWIN32 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv951.lib $(fsrc)" + cmd.exe /c "vs.bat x86 && cl /DWIN32 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv952.lib $(fsrc)" cat_flush: cat_flush.c cmd.exe /c "vs.bat x86 && cl /DWIN32 /MD /nologo $<" diff --git a/mats/Mf-ta6nt b/mats/Mf-ta6nt index 177a78aed0..5bf797ff8e 100644 --- a/mats/Mf-ta6nt +++ b/mats/Mf-ta6nt @@ -22,7 +22,7 @@ mdclean = cat_flush.exe cat_flush.obj foreign1.exp foreign1.lib foreign1.obj for include Mf-base foreign1.so: $(fsrc) - cmd.exe /c "vs.bat amd64 && cl /DWIN32 /DX86_64 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv951.lib $(fsrc)" + cmd.exe /c "vs.bat amd64 && cl /DWIN32 /DX86_64 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv952.lib $(fsrc)" cat_flush: cat_flush.c cmd.exe /c "vs.bat amd64 && cl /DWIN32 /DX86_64 /MD /nologo $<" diff --git a/mats/Mf-ti3nt b/mats/Mf-ti3nt index ab61f72a34..ab582e3faf 100644 --- a/mats/Mf-ti3nt +++ b/mats/Mf-ti3nt @@ -22,7 +22,7 @@ mdclean = cat_flush.exe cat_flush.obj foreign1.exp foreign1.lib foreign1.obj for include Mf-base foreign1.so: $(fsrc) - cmd.exe /c "vs.bat x86 && cl /DWIN32 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv951.lib $(fsrc)" + cmd.exe /c "vs.bat x86 && cl /DWIN32 /Fe$@ /I${Include} /LD /MD /nologo ../bin/$m/csv952.lib $(fsrc)" cat_flush: cat_flush.c cmd.exe /c "vs.bat x86 && cl /DWIN32 /MD /nologo $<" diff --git a/mats/ftype.ms b/mats/ftype.ms index e5c6a9d3d6..7fc237f1f9 100644 --- a/mats/ftype.ms +++ b/mats/ftype.ms @@ -2876,6 +2876,42 @@ (ftype-set! fcf-B (next) x (make-ftype-pointer fcf-B 0)) (ftype-pointer? (ftype-ref fcf-B (next) x))) (lambda () (foreign-free addr)))) + ; regression test: verify that we can fasl in a cyclic ftd that's already registered on its uid + (begin + (mkfile "testfile-ftype3.ss" + '(define-ftype + [ftype3-A (* ftype3-B)] + [ftype3-B (struct [h ftype3-A])])) + (compile-file "testfile-ftype3") + #t) + (begin ; once should prove it + (load "testfile-ftype3.so") + (ftype-pointer? ftype3-A (make-ftype-pointer ftype3-B 0))) + (begin ; twice for that warm fuzzy feeling + (load "testfile-ftype3.so") + (ftype-pointer? ftype3-A (make-ftype-pointer ftype3-B 0))) + (begin + (mkfile "testfile-ftype4.ss" + '(define-ftype + [ftype4-A (struct [q (* ftype4-B)])] + [ftype4-B (struct [h (* ftype4-A)])])) + (compile-file "testfile-ftype4") + #t) + (begin ; once should prove it + (load "testfile-ftype4.so") + (ftype-pointer? ftype4-A (make-ftype-pointer ftype4-A 0))) + (begin ; twice for that warm fuzzy feeling + (load "testfile-ftype4.so") + (ftype-pointer? ftype4-B (make-ftype-pointer ftype4-B 0))) + (begin + (mkfile "testfile-ftype5.ss" + '(define-ftype + [ftype5-A (struct [q (* ftype4-A)])])) + (compile-file "testfile-ftype5") + #t) + (begin + (load "testfile-ftype5.so") + (ftype-pointer? ftype5-A (make-ftype-pointer ftype5-A 0))) ) (mat ftype-bits diff --git a/newrelease b/newrelease index 54072cfeae..d03c0df509 100755 --- a/newrelease +++ b/newrelease @@ -76,15 +76,15 @@ if ($status != 0) exit 1 cd $W /bin/rm bintar/Makefile -sed -e "s/^v = .*/v = $R/" ../bintar/Makefile > bintar/Makefile +sed -e "s/^version = .*/version = $R/" ../bintar/Makefile > bintar/Makefile set updatedfiles = ($updatedfiles bintar/Makefile) /bin/rm rpm/Makefile -sed -e "s/^v = .*/v = $R/" ../rpm/Makefile > rpm/Makefile +sed -e "s/^version = .*/version = $R/" ../rpm/Makefile > rpm/Makefile set updatedfiles = ($updatedfiles rpm/Makefile) /bin/rm pkg/Makefile -sed -e "s/^v = .*/v = $R/" ../pkg/Makefile > pkg/Makefile +sed -e "s/^version = .*/version = $R/" ../pkg/Makefile > pkg/Makefile set updatedfiles = ($updatedfiles pkg/Makefile) /bin/rm -f BUILDING @@ -105,7 +105,9 @@ sed -e "s/csug[0-9]\.[0-9]/csug$MR.$mR/" -e "s/csug[0-9]_[0-9]/csug$MR""_$mR/" . set updatedfiles = ($updatedfiles makefiles/Mf-install.in makefiles/Makefile-csug.in) /bin/rm scheme.1.in -sed -e "s/Chez Scheme Version [0-9]\.[0-9]\(\.[0-9]\)*/Chez Scheme Version $R/" ../scheme.1.in > scheme.1.in +sed -e "s/Chez Scheme Version [0-9]\.[0-9]\(\.[0-9]\)* .* [0-9][0-9]*/Chez Scheme Version $R `date +'%B %Y'`/" \ + -e "s/Copyright .* Cisco Systems, Inc./Copyright `date +%Y` Cisco Systems, Inc./" \ + ../scheme.1.in > scheme.1.in set updatedfiles = ($updatedfiles scheme.1.in) /bin/rm -f c/Makefile.{,t}{i3,a6}nt @@ -147,8 +149,12 @@ sed -e "s/thisversion{Version [^ ]*}/thisversion{Version $R}/" ../release_notes/ set updatedfiles = ($updatedfiles release_notes/release_notes.stex) mkdir csug -sed -e "s/Revised\(.*\)for Chez Scheme Version [^ ]*\./Revised\1for Chez Scheme Version $R./" ../csug/copyright.stex > csug/copyright.stex -sed -e "s/Revised\(.*\)for Chez Scheme Version [^ ]*
/Revised\1for Chez Scheme Version $R
/" ../csug/csug.stex > csug/csug.stex +sed -e "s/Revised\(.*\)for Chez Scheme Version [^ ]*\./Revised\1for Chez Scheme Version $R./" \ + -e "s/n\\copyright~ .* Cisco Systems, Inc./n\\copyright~`date +%Y` Cisco Systems, Inc./" \ + ../csug/copyright.stex > csug/copyright.stex +sed -e "s/Revised\(.*\)for Chez Scheme Version [^ ]*
/Revised\1for Chez Scheme Version $R
/" \ + -e "s/nCopyright © .* Cisco Systems, Inc./nCopyright \© `date +%Y` Cisco Systems, Inc./" \ + ../csug/csug.stex > csug/csug.stex set updatedfiles = ($updatedfiles csug/copyright.stex csug/csug.stex) /bin/rm -f rpm/Makefile diff --git a/pkg/Makefile b/pkg/Makefile index c1eb108170..771d8ccdf5 100644 --- a/pkg/Makefile +++ b/pkg/Makefile @@ -14,7 +14,7 @@ # limitations under the License. m := $(shell find ../bin/* -type d | xargs basename) -version = 9.5.1 +version = 9.5.2 release = 1 DOTUSER = $(shell ls -ld . | sed -e 's/[^ ]* *[^ ]* *\([^ ]*\).*/\1/') diff --git a/release_notes/release_notes.stex b/release_notes/release_notes.stex index d7cbc9d59f..192725f068 100644 --- a/release_notes/release_notes.stex +++ b/release_notes/release_notes.stex @@ -1,6 +1,6 @@ \documentclass{releasenotes} -\thisversion{Version 9.5.1} +\thisversion{Version 9.5.2} \thatversion{Version 8.4} \pubmonth{January} \pubyear{2019} @@ -1663,6 +1663,27 @@ in fasl files does not generally make sense. %----------------------------------------------------------------------------- \section{Bug Fixes}\label{section:bugfixes} +\subsection{Fasl representation change for recursive ftypes (9.5.2)} + +A bug in the reading of mutually recursive ftype definitions from +compiled files has been fixed. +The bug was triggered by recursive ftype definitions in which one +of the mutually recursive ftypes is a subtype of another, as in: + +\schemedisplay +(define-ftype + [A (* B)] + [B (struct [h A])])) +\endschemedisplay + +It manifested in the fasl reader raising bogus "incompatible record +type" exceptions when two or more references to one of the ftypes +occur in in separate compiled files or in separate top-level forms +of a file compiled via \scheme{compile-file}. +The bug could also have affected other record-type descriptors with +cycles involving parent rtds and ``extra'' fields as well as fasl +output created via \scheme{fasl-write}. + \subsection{Unbound object resulting from libraries combined with \protect\scheme{compile-whole-library} (9.5.1)} A bug in \scheme{compile-whole-library} that allowed the invoke code for a diff --git a/rpm/Makefile b/rpm/Makefile index 2b661b37a5..4d36324a5a 100644 --- a/rpm/Makefile +++ b/rpm/Makefile @@ -13,7 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -version = 9.5.1 +version = 9.5.2 release = 1 m := $(shell find ../bin/* -type d | xargs basename) arch := $(shell if test "$(m)" == "i3le" ; then echo i686 ; elif test "$(m)" == "a6le" ; then echo x86_64 ; else echo UNKNOWN ; fi) diff --git a/s/7.ss b/s/7.ss index ab0ed35726..3f2792748b 100644 --- a/s/7.ss +++ b/s/7.ss @@ -658,7 +658,7 @@ (define $scheme-greeting (lambda () - (format "~a\nCopyright 1984-2017 Cisco Systems, Inc.\n" + (format "~a\nCopyright 1984-2019 Cisco Systems, Inc.\n" (scheme-version)))) (define $session-key #f) diff --git a/s/cmacros.ss b/s/cmacros.ss index d4b1e1b4a3..88f6c65403 100644 --- a/s/cmacros.ss +++ b/s/cmacros.ss @@ -328,7 +328,7 @@ [(_ foo e1 e2) e1] ... [(_ bar e1 e2) e2]))))]))) -(define-constant scheme-version #x00090501) +(define-constant scheme-version #x00090502) (define-syntax define-machine-types (lambda (x) diff --git a/s/fasl.ss b/s/fasl.ss index be4eaefd86..3f13a7f33c 100644 --- a/s/fasl.ss +++ b/s/fasl.ss @@ -68,6 +68,9 @@ (define bld-record (lambda (x t a?) (unless (eq? x #!base-rtd) + (when (record-type-descriptor? x) + ; fasl representation for record-type-descriptor includes uid separately and as part of the record + (bld (record-type-uid x) t a?)) (really-bld-record x t a?)))) (define really-bld-record @@ -423,6 +426,7 @@ (cond [(record-type-descriptor? x) (put-u8 p (constant fasl-type-rtd)) + (wrf (record-type-uid x) p t a?) (wrf-fields (maybe-remake-rtd x) p t a?)] [else (put-u8 p (constant fasl-type-record)) diff --git a/s/strip.ss b/s/strip.ss index feab33f259..f9fae08cdc 100644 --- a/s/strip.ss +++ b/s/strip.ss @@ -28,7 +28,7 @@ (vector ty vfasl) (fxvector ty viptr) (bytevector ty bv) - (record ty size nflds rtd pad-ty* fld*) + (record maybe-uid size nflds rtd pad-ty* fld*) ; maybe-uid => rtd (closure offset c) (flonum high low) (small-integer iptr) @@ -172,6 +172,13 @@ (vector-set! v i (let ([key (read-fasl p g)]) (cons key (read-fasl p g)))))))) + (define (read-record p g maybe-uid) + (let* ([size (read-uptr p)] [nflds (read-uptr p)] [rtd (read-fasl p g)]) + (let loop ([n nflds] [rpad-ty* '()] [rfld* '()]) + (if (fx= n 0) + (fasl-record maybe-uid size nflds rtd (reverse rpad-ty*) (reverse rfld*)) + (let* ([pad-ty (read-byte p)] [fld (read-fld p g (fxlogand pad-ty #x0f))]) + (loop (fx- n 1) (cons pad-ty rpad-ty*) (cons fld rfld*))))))) (define (read-fasl p g) (let ([ty (read-byte p)]) (fasl-type-case ty @@ -202,13 +209,8 @@ ((fx= i n) bv) (bytevector-u8-set! bv i (read-byte p))))))] [(fasl-type-base-rtd) (fasl-tuple ty '#())] - [(fasl-type-rtd fasl-type-record) - (let* ([size (read-uptr p)] [nflds (read-uptr p)] [rtd (read-fasl p g)]) - (let loop ([n nflds] [rpad-ty* '()] [rfld* '()]) - (if (fx= n 0) - (fasl-record ty size nflds rtd (reverse rpad-ty*) (reverse rfld*)) - (let* ([pad-ty (read-byte p)] [fld (read-fld p g (fxlogand pad-ty #x0f))]) - (loop (fx- n 1) (cons pad-ty rpad-ty*) (cons fld rfld*))))))] + [(fasl-type-rtd) (read-record p g (read-fasl p g))] + [(fasl-type-record) (read-record p g #f)] [(fasl-type-closure) (let* ([offset (read-uptr p)] [c (read-fasl p g)]) @@ -326,9 +328,9 @@ (define fasl-record? (lambda (uname x) (fasl-case (follow-indirect x) - [record (ty size nflds rtd pad-ty* fld*) + [record (maybe-uid size nflds rtd pad-ty* fld*) (fasl-case (follow-indirect rtd) - [record (rtd-ty rtd-size rtd-nflds rtd-rtd rtd-pad-ty* rtd-fld*) + [record (rtd-uid rtd-size rtd-nflds rtd-rtd rtd-pad-ty* rtd-fld*) (and (> (length rtd-fld*) uid-index) (field-case (list-ref rtd-fld* uid-index) [ptr (fasl) @@ -351,7 +353,7 @@ (unless (fasl-record? uname x) (sorry! "unexpected type of object ~s" x)) (fasl-case (follow-indirect x) - [record (ty size nflds rtd pad-ty* fld*) + [record (maybe-uid size nflds rtd pad-ty* fld*) (unless (> (length fld*) index) (sorry! "fewer fields than expected for ~s" x)) (let ([fld (list-ref fld* index)]) @@ -401,11 +403,12 @@ [vector (ty vfasl) (build-graph! x t (build-vfasl! vfasl))] [fxvector (ty viptr) (build-graph! x t void)] [bytevector (ty viptr) (build-graph! x t void)] - [record (ty size nflds rtd pad-ty* fld*) + [record (maybe-uid size nflds rtd pad-ty* fld*) (if (and strip-source-annotations? (fasl-annotation? x)) (build! (fasl-annotation-stripped x) t) (build-graph! x t (lambda () + (when maybe-uid (build! maybe-uid t)) (build! rtd t) (for-each (lambda (fld) (field-case fld @@ -538,12 +541,16 @@ (write-byte p ty) (write-uptr p (bytevector-length bv)) (put-bytevector p bv)))] - [record (ty size nflds rtd pad-ty* fld*) + [record (maybe-uid size nflds rtd pad-ty* fld*) (if (and strip-source-annotations? (fasl-annotation? x)) (write-fasl p t (fasl-annotation-stripped x)) (write-graph p t x (lambda () - (write-byte p ty) + (if maybe-uid + (begin + (write-byte p (constant fasl-type-rtd)) + (write-fasl p t maybe-uid)) + (write-byte p (constant fasl-type-record))) (write-uptr p size) (write-uptr p nflds) (write-fasl p t rtd) @@ -695,14 +702,14 @@ (fasl-case x [closure (offset c) #t] [revisit (fasl) #t] - [record (ty size nflds rtd pad-ty* fld*) (revisit-record? x)] + [record (maybe-uid size nflds rtd pad-ty* fld*) (revisit-record? x)] [else #f]))) (fasl-case x [entry (fasl) (fasl-case fasl [closure (offset c) x] [revisit (fasl) x] - [record (ty size nflds rtd pad-ty* fld*) (and (revisit-record? fasl) x)] + [record (maybe-uid size nflds rtd pad-ty* fld*) (and (revisit-record? fasl) x)] [group (vfasl) (let ([fasl* (filter revisit-stuff? (vector->list vfasl))]) (and (not (null? fasl*)) @@ -831,8 +838,10 @@ [vector (ty vfasl) (and (eqv? ty1 ty2) (vandmap fasl=? vfasl1 vfasl2))] [fxvector (ty viptr) (and (eqv? ty1 ty2) (vandmap = viptr1 viptr2))] [bytevector (ty bv) (and (eqv? ty1 ty2) (bytevector=? bv1 bv2))] - [record (ty size nflds rtd pad-ty* fld*) - (and (eqv? ty1 ty2) + [record (maybe-uid size nflds rtd pad-ty* fld*) + (and (if maybe-uid1 + (and maybe-uid2 (fasl=? maybe-uid1 maybe-uid2)) + (not maybe-uid2)) (eqv? size1 size2) (eqv? nflds1 nflds2) (fasl=? rtd1 rtd2) diff --git a/scheme.1.in b/scheme.1.in index 69191eb21b..3dab1faafa 100644 --- a/scheme.1.in +++ b/scheme.1.in @@ -3,7 +3,7 @@ .if t .ds c caf\o'\'e' .if n .ds c cafe .ds ]W -.TH SCHEME 1 "Chez Scheme Version 9.5.1 October 2017" +.TH SCHEME 1 "Chez Scheme Version 9.5.2 March 2019" .SH NAME \fIChez Scheme\fP .br @@ -791,6 +791,6 @@ Second Edition\fP, MIT press (1996). .in -5 .SH AUTHOR -Copyright 2017 Cisco Systems, Inc. +Copyright 2019 Cisco Systems, Inc. Licensed under the Apache License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0) diff --git a/wininstall/Makefile b/wininstall/Makefile old mode 100755 new mode 100644 index 9cfb2bdd14..38ba0d66f8 --- a/wininstall/Makefile +++ b/wininstall/Makefile @@ -1,4 +1,4 @@ -VERSION := 9.5.1 +VERSION := 9.5.2 WIXEXTENSIONS := -ext WixUIExtension -ext WixBalExtension ChezScheme.exe: x86/bundle.wixobj ChezScheme32.msi ChezScheme64.msi diff --git a/wininstall/a6nt.wxs b/wininstall/a6nt.wxs old mode 100755 new mode 100644 index 221693e0a6..7914da8a42 --- a/wininstall/a6nt.wxs +++ b/wininstall/a6nt.wxs @@ -4,16 +4,16 @@ - + - + - + - + @@ -40,10 +40,10 @@ - + - + diff --git a/wininstall/i3nt.wxs b/wininstall/i3nt.wxs old mode 100755 new mode 100644 index bc63d1a740..9e13a99f00 --- a/wininstall/i3nt.wxs +++ b/wininstall/i3nt.wxs @@ -4,16 +4,16 @@ - + - + - + - + @@ -40,10 +40,10 @@ - + - + diff --git a/wininstall/ta6nt.wxs b/wininstall/ta6nt.wxs old mode 100755 new mode 100644 index bc65071096..3463b00bed --- a/wininstall/ta6nt.wxs +++ b/wininstall/ta6nt.wxs @@ -4,16 +4,16 @@ - + - + - + - + @@ -40,10 +40,10 @@ - + - + diff --git a/wininstall/ti3nt.wxs b/wininstall/ti3nt.wxs old mode 100755 new mode 100644 index 3ca3ede5f0..fffad58bfb --- a/wininstall/ti3nt.wxs +++ b/wininstall/ti3nt.wxs @@ -4,16 +4,16 @@ - + - + - + - + @@ -40,10 +40,10 @@ - + - + diff --git a/workarea b/workarea index 995fd21aec..5c6e452485 100755 --- a/workarea +++ b/workarea @@ -200,8 +200,8 @@ case $M in *nt) (cd $W/boot/$M; workln ../../../boot/$M/mainmd.obj mainmd.obj) (cd $W/boot/$M; workln ../../../boot/$M/mainmt.obj mainmt.obj) - (cd $W/boot/$M; workln ../../../boot/$M/csv951md.lib csv951md.lib) - (cd $W/boot/$M; workln ../../../boot/$M/csv951mt.lib csv951mt.lib) + (cd $W/boot/$M; workln ../../../boot/$M/csv952md.lib csv952md.lib) + (cd $W/boot/$M; workln ../../../boot/$M/csv952mt.lib csv952mt.lib) (cd $W/boot/$M; workln ../../../boot/$M/scheme.res scheme.res) ;; *) @@ -216,8 +216,8 @@ case $M in *nt) (cd $W/bin/$M; workln ../../../bin/$M/scheme.exe scheme.exe) (cd $W/bin/$M; forceworkln2 scheme.exe petite.exe) - (cd $W/bin/$M; workln ../../../bin/$M/csv951.dll csv951.dll) - (cd $W/bin/$M; workln ../../../bin/$M/csv951.lib csv951.lib) + (cd $W/bin/$M; workln ../../../bin/$M/csv952.dll csv952.dll) + (cd $W/bin/$M; workln ../../../bin/$M/csv952.lib csv952.lib) ;; *) (cd $W/bin/$M; workln ../../../bin/$M/scheme scheme)