add s:dedup, use it for user loaded extensions; begin using it in system extensions

FossilOrigin-Name: 0dbd909ec255a66290c0b0813addeebe61626aac2b43f62d9c00c6fa5a3aae61
This commit is contained in:
crc 2023-01-24 01:04:10 +00:00
parent f8fe4b98a6
commit b3ba2ba20f
5 changed files with 721 additions and 688 deletions

View file

@ -5,4 +5,24 @@ String deduplication for RetroForth.
(c) Arland Childers
~~~
'init s:keep fll:create 's:dedup.data var-n
{{
't1 var
't2 var
---reveal---
:s:dedup.register (s-)
s:keep @s:dedup.data swap &fll:append/value sip ;
:s:dedup.defined? (s-f)
!t1 #0 !t2
@s:dedup.data [ @t1 s:eq? @t2 or !t2 ] fll:for-each @t2 ;
:s:dedup.find (s-s)
!t1 #0 !t2
@s:dedup.data [ dup @t1 s:eq? [ !t2 ] [ drop ] choose ]
fll:for-each @t2 ;
:s:dedup (s-s)
dup s:dedup.defined? [ s:dedup.find ] [ s:dedup.register ]
choose ;
:s:unique? (s-f) s:dedup.defined? ;
}}
~~~

View file

@ -29,8 +29,9 @@
:ffi:invoke (n-)
#2 ffi:operation ;
'interface/ffi.retro s:keep
'interface/ffi.retro s:dedup
dup 'ffi:operation d:lookup d:source store
dup 'ffi:open d:lookup d:source store
dup 'ffi:map-sym d:lookup d:source store
dup 'ffi:invoke d:lookup d:source store
drop

View file

@ -167,7 +167,7 @@ once for each line in a file. This makes some things trivial. E.g., a simple
## d:source
~~~
'interface/filesystem.retro s:keep
'interface/filesystem.retro s:dedup
dup 'file:spew d:lookup d:source store
dup 'file:slurp d:lookup d:source store
dup 'file:for-each-line d:lookup d:source store

View file

@ -10,5 +10,5 @@ best approach on their host system.
dup n:negative? [ drop 'Error:_device_(0010)_not_found s:put nl ] if;
io:invoke ;
'interface/rng.retro s:keep d:last d:source store
'interface/rng.retro s:dedup d:last d:source store
~~~

File diff suppressed because it is too large Load diff