Files
hakorune/apps/std/string.nyash
Tomoaki 7d88c04c0e wip(phase15): AOT修正作業中 - Nyプラグインと標準ライブラリ実装
Phase 15のAOT/ネイティブビルド修正作業を継続中。
ChatGPTによるstd実装とプラグインシステムの改修を含む。

主な変更点:
- apps/std/: string.nyashとarray.nyashの標準ライブラリ追加
- apps/smokes/: stdライブラリのスモークテスト追加
- プラグインローダーv2の実装改修
- BoxCallのハンドル管理改善
- JIT hostcall registryの更新
- ビルドスクリプト(build_aot.sh, build_llvm.sh)の調整

まだ修正作業中のため、一部の機能は不完全な状態。

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-06 06:24:08 +09:00

53 lines
1.3 KiB
Plaintext

// std.string (Ny) - Phase15 MVP
// Usage:
// include "apps/std/string.nyash"
// StdStringNy.string_length("abc"), StdStringNy.string_concat("a","b"),
// StdStringNy.string_slice("hello",1,4), StdStringNy.string_index_of("banana","na"), StdStringNy.string_equals("x","y")
// Notes:
// - ASCII only; slice clamps [start,end)
// - index_of returns -1 when not found
// - Pure functions; no side effects
static box StdStringNy {
// Return length of string s (Integer)
string_length(s) {
if s == null { return 0 }
return s.length()
}
// Concatenate two strings
string_concat(a, b) {
return a.concat(b)
}
// Slice string in [start, end) with simple clamping
string_slice(s, start, end) {
if s == null { return "" }
return s.substring(start, end)
}
// Return first index of substring (or -1)
string_index_of(s, sub) {
if s == null { return -1 }
if sub == null { return 0 }
local n, m, i
n = s.length()
m = sub.length()
if m == 0 { return 0 }
if n < m { return -1 }
i = 0
loop (i <= (n - m)) {
// Compare window
if s.substring(i, i + m) == sub { return i }
i = i + 1
}
return -1
}
// Return 1 if equal else 0 (Integer)
string_equals(a, b) {
if a == b { return 1 }
return 0
}
}