### Diff for /gforth/glocals.fs between versions 1.65 and 1.66

version 1.65, 2012/02/07 16:48:55 version 1.66, 2012/02/07 18:15:27
Line 170  variable locals-mem-list \ linked list o Line 170  variable locals-mem-list \ linked list o

\ locals list operations  \ locals list operations

: common-list ( list1 list2 -- list3 ) \ gforth-internal  : list-length ( list -- u )
\ list1 and list2 are lists, where the heads are at higher addresses than      0 swap begin ( u1 list1 )
\ the tail. list3 is the largest sublist of both lists.          dup while
begin              @ swap 1+ swap
2dup u<>      repeat
while      drop ;
2dup u>
if  : /list ( list1 u -- list2 )
swap      \ list2 is list1 with the first u elements removed
then      0 ?do
@          @
repeat      loop ;
drop ;
: common-list ( list1 list2 -- list3 )
: sub-list? ( list1 list2 -- f ) \ gforth-internal      \ list3 is the largest common tail of both lists.
\ true iff list1 is a sublist of list2      over list-length over list-length - dup 0< if
begin          negate >r swap r>
2dup u<      then ( long short u )
while      rot swap /list begin ( list3 list4 )
@          2dup u<> while
repeat              @ swap @
= ;      repeat
drop ;

: sub-list? ( list1 list2 -- f )
\ true iff list1 is a sublist of list2
over list-length over list-length swap - 0 max /list = ;

\ : ocommon-list ( list1 list2 -- list3 ) \ gforth-internal
\ \ list1 and list2 are lists, where the heads are at higher addresses than
\ \ the tail. list3 is the largest sublist of both lists.
\  begin
\    2dup u<>
\  while
\    2dup u>
\    if
\      swap
\    then
\    @
\  repeat
\  drop ;

\ : osub-list? ( list1 list2 -- f ) \ gforth-internal
\ \ true iff list1 is a sublist of list2
\  begin
\    2dup u<
\  while
\    @
\  repeat
\  = ;

\ defer common-list
\ defer sub-list?

\ ' ocommon-list is common-list
\ ' osub-list?   is sub-list?

: list-size ( list -- u ) \ gforth-internal  : list-size ( list -- u ) \ gforth-internal
\ size of the locals frame represented by list      \ size of the locals frame represented by list

 Removed from v.1.65 changed lines Added in v.1.66

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