Changelog for dstrings.fs, dstrings-test.fs, trydstrings.fs. Unattributed changes are by the initial author, David N. Williams. The revision date in the source file may be more recent than the most recent date here, when only cosmetic changes have been made. Version 1.0.0 27Aug10 * Added $FSP! to dstrings-ext.c, dstrings-ext.h, dstrings.fs, and dstrings-words.txt, for use by the new dstester. Revised EMPTY-$FS in dstrings-test/fs to use it. An occasion to start a general review, and bump the revision number to indicate stability. 8Sep10 * Revised dstrings-test to work with the new dstester, replacing ${{ and }}$ by ={ and }=. 9Sep10 * Updated dstrings-test.fs conditional reporting. * Replaced ABORT" in dstrings.fs ARGS{ by -14 THROW. * Added CATCH versions of tests for nonoverflow exceptions. 10Sep10 * Added conditional testing switch for dstrings-ext.c versus dstrings.fs exception numbers. * Revised underflow message for $FRAME in dstrings.fs to agree with dstrings-ext.c. * Added -14 THROW and Replaced "*** missing ;" by "***missing semicolon" in COMPILE-WITH-$ARGS. * Replaced ABORT" in MAKE-$SPACE by ( ior) THROW. * Changed ( ior) DROP to ( ior) THROW in tests. 11Sep10 * Devised small string space for testing overflows that should work with both 32- and 64-bits. * Added quite a few overflow tests. 14Sep10 * Finished overflow tests. 15Sep10 * Revised $CONSTANT to make a copy in data space when the input string is not external. Suggested by Krishna Myneni. Updated documentation and added tests. * Added "string count too large" exception tests. * Tests passed (32-bit) with gforth, pfe, and iForth, including byte- and cell-sized count field. * Loading of ttester/ttester-xf no longer in dstester.fs, put in dstester-test.fs. * Released. 19Sep10 * Added tests for $CONSTANT copy garbage marking. 20Sep10 * Revised $CONSTANT stack and spec comments. 29Oct10 * Fixed typo in DROP-$FRAME stack effect. 9Feb18 * Removed built-in terminal display in dstrings-test.fs in favor of tester-display.fs, reorganized setup logic, updated various words different in tester-display.fs. 11Feb18 * Improved exception tests in dstrings-test.fs and added tests for 3 new ones. Version 0.7.6 31Aug08 * Adjusted trydstrings.fs and dstrings-test.fs for renaming of CAT$@ as CAT$P@ in dstrings-ext.c. * Added deprecating remarks for char-sized count field. * Revised cats so they do nothing on the empty string but drop it (in particular, don't start a cat). Added tests to dstrings-test.fs to check that. * Fixed bug in $SWAP, where $2 was used as a nonexistent dummy name, which translated to the number 2. 1Sep08 * Added $EXCHANGE and basic tests. * Added relinking tests for $SWAP and $EXCHANGE. 2Sep08 * Revised DROP-$FRAME to allow top string frame item below string stack top, using $EXCHANGE. Updated documentation. * Added tests for new DROP-$FRAME functionality, including a $ARG{ test for the GEORGE example in the docs. 4Sep08 * Improved $EXCHANGE code. 15Sep08 * Revised 3ARGS in dstrings-test.fs to keep strings on the stack above the args while invoking them. 16Sep08 * Removed STRUCT to avoid a gforth "redefined" message. * Krishna Myneni reported dstrings-test.fs failure with his 64-bit gforth. Fixed by adding a switch for the string buffer size, with the size based on his tests, 26 cells for 64 bits and the previous 28 cells for 32 bits. * Expressed DEFAULT-/$BUF in cells. 17Sep08 * Removed SKIP, SCAN, etc., words used to define PARSE-NAME, in favor of conditionally compiled Forth 200x reference implementation of PARSE-NAME, to stifle "redefined" messages from gforth. 18Sep08 * Krishna Myneni reported that VFXforth for linux does not interpret "0." -- replaced it by by 0 0. 30Sep08 * Fixed a bug in $! not affecting pfe or gforth: >R...R> used with locals, as yet two more char impurities. 2Oct08 * Removed unused VAR2$ from dstrings-test.fs. 20Aug10 * Extracted dstester.fs items into dstester.log. 27Aug10 * In dstrings-words.txt: moved $FBRK end of string space structure field list, bumped version to 0.7.6. Version 0.7.5 22Aug08 * Renamed: old new MPLACE (M!) SM, M,S $S>-COPY $,S CAT $+ CAT" $+" CAT` $+` S-CAT S+ PARSE-CAT PARSE-S+ These names are in sync with the corresponding pfe dstrings-ext.c, and dstrings.html has been updated. Version 0.7.4 29Jul08 * Fixed a bug in CAT. Initiating a cat should always copy, not just when the string is external. The pfe implementation didn't have the bug. * Added test for that in dstrings-test.fs. Made the license for dstrings-test.fs public domain. 30Jul08 * Moved NUM>S and [N] to UTILITY WORDS section. * Added PARSING-LIB-S switch to skip compiling parsing words when either parsing.fs or the corresponding pfe module is loaded. * Added utility word 2RDROP. 31Jul08 * Rewrote PARSE>S and PARSE>$ to avoid EMBED-M$, and deleted EMBED-M$. 1Aug08 * Tweaked for character purity. * Replaced qd structures with 200x-like structures. * Renamed CAT$@ as CAT$P@. * Smoothed conditional loading in dstrings-test.fs and trydstrings.fs 2Aug08 * Added table of contents. 7Aug08 * Made 0FILL-ALIGNED character clean. 13Aug08 * Made $GARBAGE? flag output well formed, as it is in dstrings-ext.c and dstrings.html. Removed >FLAG from dstrings-test.fs. Version 0.7.3 8Oct06 * Added $GC-LOCK@ and $GC-LOCK!, with tests in dstrings-test.fs. 9Oct06 * Revised some comments. Version 0.7.2 16Apr04 * Started another attempt at $ARGS{, called "intercept.fs", rethinking how to intercept args and compile the remaining normal words in a definition. 27Apr04 During this period: * Improved Forth string support. * Tried a scheme based on a private INTERCEPT word list, where dummy arguments had to be declared as vectors outside the definition, with values for compilation to be filled in by ARGS{. Collapsed of its own weight. * Did S`, $-DELIM, and $`. Need to think about interpretation semantics for CAT" and CAT`. * Got suckered into trying EVALUATE again on the normal, nonargument words, but soon rediscovered that can't work with parsing words. * Came across Leo Wong's scheme using POSTPONE for parsing words. That requires intercepting every allowed parsing word, but otherwise works fine. The scheme uses PREPARSE, which we also learned from Leo Wong's code. * Coded SCASE, SOF, ENDSOF, ENDSCASE for Forth string cases by imitating the implementation for normal cases in ANSI X3.215-1994, after a more complicated false start. * Defined [N] to compile a number from the data stack. The idea came from Leo Wong's PARSE-N. * Resulting ARGS{ passed basic tests. So did the much simpler "egg" example. 28Apr04 * Moved the new ARGS{ support back into dstrings.fs, and split out the egg example. 12May04 * Cleaned up comments. 13May04 * Removed pronunciations. * Added interpretation semantics for CAT" and CAT`. * Organized dstrings-words.txt into public and system categories. 14May04 * Passed final tests. Candidate for release. * Sigh... Forgot about dstrings-test.fs. * Started dstrings.html revision and reorganization of dstrings-words.txt. Time consuming. 15May04 * Added ?$FRAME-UNDER. Made TH-$ARG throw an error for no args. * Made ENDCAT upper case. * Went around with transience of interpreted literal strings. Not sure it's a good idea, but we leave it that way for now. We especially see no use for transience with literal mstrings. * Finished dstrings.html revision. This needs to be automated! 16May04 * Started adding new words to dstrings-test.fs. Found a bug in the interpreted version of S`, actually in S-DELIM. 5Jun04 * Revised description of SM, in dstrings.html and dstrings.fs. * Additions to dstrings-test.fs up to args. Still have doubts about allowing transience for $", etc., especially considering uses with ARGS{ words. * Bug in the documentation of ARGS{ -- ENDCAT can only be used with care in ARGS{ words so as not to add to the stack before the frame is dropped. Rejected adding END-ARGS to explicitly drop the frame. That would allow multiple ARGS{ in a word, but such multiples would be bad factoring anyway. 6Jun04 * Renamed S-DELIM as PARSE>S and $-DELIM as PARSE>$. * Replaced "cell alignment" by "address alignment" in docs. * Finished dstrings-test.fs, except maybe for some of the extra forth-string extension words. ARGS{ test revealed a bug in NEXT-WORD. 10Jun04 * Changed "Forth string" to "ANS Forth string", also in dstrings.html. Rejected "fstring" as shorthand for that. 11Jun04 * Changed "+n" to "u". 12Jun04 * Changed (0$SPACE) to 0$SPACE. 14Jun04 * Rearranged conditional compile in dstrings-test.fs to accomodate /MCOUNT in the pfe case. Removed a pronunciation in dstrings.fs that slipped through. * Included a specification caveat that the format of the string stored by PARSE>S is implementation dependent. Fixed dstrings.fs to always store a mstring. 15Jun04 * Changed MPLACE-0FILL to MPLACE. Promoted MPLACE to dstrings.html. 16Jun04 * Fixed dstrings-test.fs to work with both char and long flags. 11Jul04 * Bug in dstrings-ext.c, apparently in $!, revealed by dstrings-test.fs. 12Jul04 * Fixed above bug. Changed newstr = (MStr*) (backlink + offsetof (DStr, count)); to (char*) newstr = (char*) ((char*) backlink + offsetof (DStr, count)); * Changed TH-$ARG to throw an error if the top frame contains too few strings. 13Jul04 * Changed spec for ARGS{ in dstrings.html to read across lines, and updated the copy in dstrings.fs. * Fixed dstrings-test.fs to work better with both char and long flags. * Updated dstrings-words.txt. 14Jul04 * Committed to nontransient, interpreted $" and $`; removed $,$ from dstrings-test.fs. * Reorganized dstrings-words.txt and updated dstrings.html and dstrings.fs accordingly. Discovered that $ARGS{ in dstrings.html is actually ARGS{ everywhere else, and often here as well. We hereby replace ARGS{ by $ARGS{. 16Jul04 * Renamed IN$BUFFER as IN-$BUFFER. Renamed /$FRAME as /$FRAME-ITEM, and promoted it to public words shared with pfe. * Added tests for EMPTY$ and \N$ to dstrings-test.fs. It now tests all the words shared with pfe. Removed any explicit dependence on CHAR-COUNT-FIELD?. 17Jul04 * Fixed a bug in the $FRAME underflow exception and an inadequacy in the corresponding test in dstrings-test.fs. 18Jul04 * Gforth revealed a bug in dstrings-test.fs, namely, S" Another short string." >$S, where the external string is clearly not measured. Why did it work with pfe? Replaced by a $" phrase. 20Jul04 * Fixed bug in COMPILE-WITH-$ARGS, failure to keep data stack out of the way of the control stack, revealed while updating hftrans.fs. 26Jul04 * Cosmetic changes, replaced remaining examples of "Forth string" by "ANS Forth string" where appropriate. 9Sep04 * Fixed typo in dstester.fs comment. Version 0.7.1 14Jun03 * Support for $ARGS{. * Realized again that EVALUATE methods aren't appropriate. You really need to intercept inside the interpreter at the point where the next word is read from the input stream. So it becomes political -- how to achieve a common practise for factoring and vectorizing INTERPRET, EVALUATE, and QUIT? * Not released. Version 0.7.0 13Aug02 * Start from dstrings-ext.c, version 0.6.28. 19Mar03 * Revisit, using dstrings-ext.c version 0.6.29, and plain structures. 17Apr03 * Tested MAKE-$SPACE. COLLECT-$GARBAGE 0STRINGS $GARBAGE? $GC-ON $GC-OFF $UNUSED $ROOM? ?$ROOM $POP $PUSH ?$UNDERFLOW $DROP 18Apr03 * SM, MCOUNT -MCOUNT $" $CONSTANT EMPTY$ \N$ $VARIABLE $@ $! IN$BUFFER? ?CAT $SP@ --$SP@ $SP@++ /$STACK ?/$STACK $2DROP $2DUP $DEPTH $DUP $SWAP $NIP 19Apr03 * Removed ?$UNDERFLOW in favor of CELL ?/$STACK. * Replaced $PUSH by $PUSH-EXT, expressed in terms of a nongc ($PUSH). Fixed $@ accordingly. * $OVER $PICK $S> $S>-COPY $S@ $TUCK >$S 20Apr03 * Added constant UCELL-MAX for conditional compilation. * ALIGNED-0FILL $BREAKP@ $BREAKP! $SP! >$S-COPY $. $TYPE CAT$P@ ONTO-CAT$ CAT S-CAT 21Apr03 * ENDCAT PARSE-CAT CAT" CAT` 22Apr03 * $FSP@ $FSP! $FBREAKP@ $FBREAKP! $FRAME DROP-$FRAME FIND-ARG 23Apr03 * $FRAME-DEPTH $BUFP@ /$BUF $FSP0@ #$FRAMES /$FRAME-STACK 6May03 * Started coding ARGS{. The algorithm intercepts args or semicolon and does the appropriate thing when they're found, otherwise evaluates the word. 1Jun03 * Appear to have lost 6May03, due to unsystematic backups. Restored to 23Apr03 from laptop. Added default string space. 5Jun03 * Started systematic debugging. Bug in $!. Rewrote string space structure accessors to use DSTRINGS. 6Jun03 * More degugging. * Started dstester.fs version 0.9.0. 7Jun03 * Finished dstester.fs * Started dstrings-test.fs version 0.9.0. Uncovered more bugs. * Found a way to do compile mode $" in ANS Forth, using EMBED-M$. 8Jun03 * Continued with dstrings-test.fs. * Enforced universal 0 fill to alignment for mstrings. * Removed MAX-DATA-MSTRING. 9Jun03 * When testing with gforth, found that S" hello" >$S $S>-COPY does not work. Traced it to SM,. Something unexpected about the S" transient region, because using >$S-COPY instead of >$S does work. A.11.6.1.2165 says that standard words should not overwrite the S" transient region, so I don't know what's going on. In fact it's not near HERE. * Continued with dstrings-test.fs. * Added EMPTY-$RESULTS to dstester.fs. 10Jun03 * Continued with dstrings-test.fs. Added concatenation state to .$STAT. * Decoupled data and string error reports in dstester.fs. 11Jun03 * Continued with dstrings-test.fs. Added #ERRORS to dstester.fs * Finished dstrings-test.fs except for $ARGS{, which is not in dstrings.fs yet. All tests passed under pfe. * But not passed under gforth! There was in fact a bug in COLLECT-$GARBAGE, a DO that should have been a ?DO. Gforth eventually trapped out of the runaway loop with "Invalid memory address". Now both pfe and gforth pass. * Decided to postpone $ARGS{. 12Jun03 * Factored out $-delim from $". Tested. * Testing with char-sized count revealed nasty bug in COLLECT-$GARBAGE, even for cell-sized counts, that (I think) was hidden by using garbage and live strings the same size in the tests. * Release without $ARGS{.