Diff for /gforth/extend.fs between versions 1.28 and 1.31

version 1.28, 1997/07/31 16:17:09 version 1.31, 1998/12/19 13:43:17
Line 1 Line 1
 \ EXTEND.FS    CORE-EXT Word not fully tested!         12may93jaw  \ EXTEND.FS    CORE-EXT Word not fully tested!         12may93jaw
   
 \ Copyright (C) 1995 Free Software Foundation, Inc.  \ Copyright (C) 1995,1998 Free Software Foundation, Inc.
   
 \ This file is part of Gforth.  \ This file is part of Gforth.
   
Line 168  variable span ( -- a-addr ) \ core-ext Line 168  variable span ( -- a-addr ) \ core-ext
 \ Marker creates a mark that is removed (including everything   \ Marker creates a mark that is removed (including everything 
 \ defined afterwards) when executing the mark.  \ defined afterwards) when executing the mark.
   
 : marker, ( -- mark )  here dup A,  : included-files-mark ( -- u )
   voclink @ A, voclink      included-files 2@ nip
   BEGIN  @ dup WHILE  dup 0 wordlist-link - @ A,  REPEAT  drop      blk @ 0=
   udp @ , ;      if \ not input from blocks
           source-id 1 -1 within
           if \ input from file
               1- \ do not include the last file (hopefully this is the
                  \ currently included file)
           then
       then ;  
   
   \ hmm, most of the saving appears to be pretty unnecessary: we could
   \ derive the wordlists and the words that have to be kept from the
   \ saved value of dp value. - anton
   
   : marker, ( -- mark )
       here
       included-files-mark ,
       dup A, \ here
       voclink @ A, \ vocabulary list start
       \ for all wordlists, remember wordlist-id (the linked list)
       voclink
       BEGIN
           @ dup
       WHILE
           dup 0 wordlist-link - wordlist-id @ A,
       REPEAT
       drop
       \ remember udp
       udp @ , ;
   
 : marker! ( mark -- )  : marker! ( mark -- )
     dup @ swap cell+      \ reset included files count; resize will happen on next add-included-file
       included-files 2@ drop over @ included-files 2! cell+
       \ rest of marker!
       dup @ swap cell+ ( here rest-of-marker )
     dup @ voclink ! cell+      dup @ voclink ! cell+
       \ restore wordlists to former words
     voclink      voclink
     BEGIN      BEGIN
         @ dup           @ dup 
     WHILE      WHILE
         over @ over 0 wordlist-link - !          over @ over 0 wordlist-link - wordlist-id !
         swap cell+ swap          swap cell+ swap
     REPEAT      REPEAT
     drop  voclink      drop
       \ rehash wordlists to remove forgotten words
       \ why don't we do this in a single step? - anton
       voclink
     BEGIN      BEGIN
         @ dup          @ dup
     WHILE      WHILE
         dup 0 wordlist-link - rehash          dup 0 wordlist-link - rehash
     REPEAT      REPEAT
     drop      drop
     @ udp !  dp ! ;      \ restore udp and dp
       @ udp !  dp !
       \ clean up vocabulary stack
       0 vp @ 0
       ?DO
           vp cell+ I cells + @ dup here >
           IF  drop  ELSE  swap 1+  THEN
       LOOP
       dup 0= or set-order \ -1 set-order if order is empty
       get-current here > IF
           forth-wordlist set-current
       THEN ;
   
 : marker ( "mark" -- )  : marker ( "mark" -- )
     marker, Create A,      marker, Create A,

Removed from v.1.28  
changed lines
  Added in v.1.31


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>