Files
hakorune/src/tests/json_lint_stringutils_min_vm.rs
nyash-codex e656958033 feat(env): Phase 71-73 - SSA fix + Stage-3 ENV consolidation
## Phase 71-SSA: StageBDriverBox birth warning 解消
- Fixed false-positive dev verify warning for static boxes
- StageBDriverBox is a static box, so it doesn't follow NewBox→birth pattern
- Modified lifecycle.rs to skip StageBDriverBox from birth() requirement

## Phase 73-A: Stage-3 legacy ENV 統一化
- Consolidated NYASH_PARSER_STAGE3 and HAKO_PARSER_STAGE3 → NYASH_FEATURES=stage3
- Updated 20 test files (46 direct replacements)
- Special handling for parser_stage3.rs compat layer and mir_static_main_args_loop.rs
- All test files now use unified NYASH_FEATURES=stage3

## Phase 72-73: ENV inventory documented
- Created phase72-73-env-inventory.md with complete usage analysis
- Identified 113 direct ENV reads requiring SSOT consolidation
- Prioritized Phase 72 (JoinIR EXPERIMENT SSOT) and Phase 73 (Stage-3 cleanup)

## Phase 74-SSA: Minimal reproduction for static box delegation
- Created parser_box_minimal.hako and ssa_static_delegation_min.hako
- Investigated spawn failure in selfhost compiler (arguments too long)
- Root cause: NYASH_NY_COMPILER_EMIT_ONLY=1 defaults to emit-only mode

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 12:36:28 +09:00

109 lines
3.4 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*!
* StringUtils arity suffix 自動補完テストPhase 21.7++
*
* 目的:
* - VM の execute_global_function で arity が欠落している場合に
* args.len() から自動補完される機能を検証する。
*
* 背景:
* - MIR 関数は "BoxName.method/arity" 形式で格納される
* - 呼び出し側が arity なしで "BoxName.method" を指定した場合、
* 自動的に "/arity" を追加して検索する
*
* 修正内容2025-11-21:
* 1. lang/src/llvm_ir/hako_module.toml の TOML パースエラーを修正
* 2. src/backend/mir_interpreter/handlers/calls/global.rs で arity 自動補完実装
*
* 注意:
* - このテストは using 解決をテストするものではなく、arity 自動補完のみをテストする
* - using 解決のテストは CLI 経由で実施apps/tests/json_lint_stringutils_min.hako
*/
use crate::ast::ASTNode;
use crate::backend::VM;
use crate::mir::MirCompiler;
use crate::parser::NyashParser;
fn ensure_stage3_env() {
std::env::set_var("NYASH_FEATURES", "stage3");
std::env::set_var("NYASH_FEATURES", "stage3");
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
std::env::set_var("NYASH_DISABLE_PLUGINS", "1");
std::env::set_var("HAKO_MIR_BUILDER_METHODIZE", "0");
}
#[test]
fn json_lint_stringutils_min_vm() {
ensure_stage3_env();
// arity 自動補完をテストするため、using を使わずに static box で直接実装
let src = r#"
static box StringUtils {
starts_with(text, prefix) {
local text_len = text.length()
local prefix_len = prefix.length()
if prefix_len > text_len { return 0 }
local i = 0
loop(i < prefix_len) {
if text.substring(i, i + 1) != prefix.substring(i, i + 1) {
return 0
}
i = i + 1
}
return 1
}
ends_with(text, suffix) {
local text_len = text.length()
local suffix_len = suffix.length()
if suffix_len > text_len { return 0 }
local offset = text_len - suffix_len
local i = 0
loop(i < suffix_len) {
if text.substring(offset + i, offset + i + 1) != suffix.substring(i, i + 1) {
return 0
}
i = i + 1
}
return 1
}
}
static box Main {
main() {
if StringUtils.starts_with("abc", "a") and StringUtils.ends_with("abc", "c") {
print("OK")
} else {
print("ERROR")
}
return 0
}
}
"#;
let ast: ASTNode = NyashParser::parse_from_string(src).expect("parse");
let mut mc = MirCompiler::with_options(false);
let cr = mc.compile(ast).expect("compile");
let mut vm = VM::new();
let result = vm.execute_module(&cr.module);
// ✅ arity 自動補完により StringUtils.starts_with → StringUtils.starts_with/2 に解決されることを確認
match result {
Ok(_v) => {
eprintln!("[json_lint_stringutils_min] VM executed successfully");
// Success - arity auto-completion worked!
}
Err(e) => {
panic!("VM should execute successfully, but got error: {:?}", e);
}
}
// cleanup
std::env::remove_var("NYASH_FEATURES");
std::env::remove_var("NYASH_FEATURES");
std::env::remove_var("NYASH_PARSER_ALLOW_SEMICOLON");
std::env::remove_var("NYASH_DISABLE_PLUGINS");
std::env::remove_var("HAKO_MIR_BUILDER_METHODIZE");
}