From 9674970ee4895400c02b66b3616cb46c87fb5881 Mon Sep 17 00:00:00 2001 From: Bryan English Date: Thu, 5 Feb 2026 22:35:42 -0500 Subject: [PATCH] add new string stdlib module --- rel-lang/sorelc/src/ir.rs | 1 + rel-lang/stdlib/out.sorel | 12 +----------- rel-lang/stdlib/string.sorel | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 11 deletions(-) create mode 100644 rel-lang/stdlib/string.sorel 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 -- 2.43.0