From d639c63fd358fe3a87215a8064f70fccacaf012d Mon Sep 17 00:00:00 2001 From: IgorCielniak Date: Wed, 25 Mar 2026 11:12:32 +0100 Subject: [PATCH] added 'rfind' --- stdlib/utils.sl | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/stdlib/utils.sl b/stdlib/utils.sl index c507dd2..3f69f9e 100644 --- a/stdlib/utils.sl +++ b/stdlib/utils.sl @@ -536,6 +536,7 @@ word contains end 0 nip nip nip nip end +# find the first occurence of a string inside another string, returns the index # find [*, addr, len, addr | len] -> [* | index] word find 0 >r 2 pick for @@ -543,3 +544,13 @@ word find >r >r >r 1 + r> r> r> rswap r> 1 + >r rswap end 0 nip nip nip nip end + +# find the last occurence of a string inside another string, returns the index +# rfind [*, addr, len, addr | len] -> [* | index] +word rfind + >r >r dup >r + 1 - r> r> r> + 2 pick 1 - >r 2 pick for + 4dup strcmp 1 == if rswap r> nip nip nip nip rdrop ret end + >r >r >r 1 - r> r> r> rswap r> 1 - >r rswap + end 0 nip nip nip nip +end