From: Bryan English Date: Fri, 6 Feb 2026 03:35:42 +0000 (-0500) Subject: add new string stdlib module X-Git-Url: https://rethought.computer/gitweb//gitweb//git?a=commitdiff_plain;h=9674970ee4895400c02b66b3616cb46c87fb5881;p=sorel-lang.git add new string stdlib module --- diff --git a/rel-lang/sorelc/src/ir.rs b/rel-lang/sorelc/src/ir.rs index 7d31d1a..d38d7f7 100644 --- a/rel-lang/sorelc/src/ir.rs +++ b/rel-lang/sorelc/src/ir.rs @@ -63,6 +63,7 @@ fn std_import(specifier: &str) -> Result<&str> { match specifier { "std:mem" => Ok(include_str!("../../stdlib/mem.sorel")), "std:out" => Ok(include_str!("../../stdlib/out.sorel")), + "std:string" => Ok(include_str!("../../stdlib/string.sorel")), _ => bail!("{} is not a standard library module", specifier), } } diff --git a/rel-lang/stdlib/out.sorel b/rel-lang/stdlib/out.sorel index 000b320..5704f99 100644 --- a/rel-lang/stdlib/out.sorel +++ b/rel-lang/stdlib/out.sorel @@ -5,17 +5,7 @@ sys3 ; -: strlen ( addr -- len ) - dup dup \ ( addr addr addr ) - @:8 \ ( addr addr byte ) - loop \ ( addr addr ) - 1 + \ ( addr addr+1 ) - dup \ ( addr addr+1 addr+1) - @:8 \ ( addr addr+1 byte ) - endloop \ ( addr addr+len ) - swap \ ( addr+len addr ) - - \ ( len ) -; +import "std:string" export puts diff --git a/rel-lang/stdlib/string.sorel b/rel-lang/stdlib/string.sorel new file mode 100644 index 0000000..b0c76a8 --- /dev/null +++ b/rel-lang/stdlib/string.sorel @@ -0,0 +1,15 @@ +\ vim: filetype=forth + +: strlen ( addr -- len ) + dup dup \ ( addr addr addr ) + @:8 \ ( addr addr byte ) + loop \ ( addr addr ) + 1 + \ ( addr addr+1 ) + dup \ ( addr addr+1 addr+1) + @:8 \ ( addr addr+1 byte ) + endloop \ ( addr addr+len ) + swap \ ( addr+len addr ) + - \ ( len ) +; + +export strlen