Phase 12 TypeBox統合ABI設計完了: C ABI + Nyash ABI革命的統合
主な成果: - TypeBox(型情報をBoxとして扱う)による統合ABI設計 - C ABI + Nyash ABIの完全統合仕様書作成 - 3大AI専門家(Gemini/Codex/ChatGPT5)による検証済み - ChatGPT5の10個の安全性改善提案を反映 - README.mdのドキュメント更新(全起点から到達可能) MapBox拡張: - string型キーサポート(従来のi64に加えて) - remove/clear/getOr/keysStr/valuesStr/toJson実装 - keys()/values()のランタイムシムサポート(TypeBox待ち) その他の改善: - Phase 11.9(文法統一化)ドキュメント追加 - Phase 16(FoldLang)ドキュメント追加 - 非同期タイムアウトテスト追加 - 各種ビルド警告(未使用import等)は次のリファクタリングで対応予定 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -258,6 +258,39 @@ mod tests {
|
||||
let dump = MirPrinter::new().print_module(&result.module);
|
||||
assert!(dump.contains("await"), "Expected await in MIR dump. Got:\n{}", dump);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_await_has_checkpoints() {
|
||||
use crate::ast::{LiteralValue, Span};
|
||||
// Build: await 1
|
||||
let ast = ASTNode::AwaitExpression { expression: Box::new(ASTNode::Literal { value: LiteralValue::Integer(1), span: Span::unknown() }), span: Span::unknown() };
|
||||
let mut compiler = MirCompiler::new();
|
||||
let result = compiler.compile(ast).expect("compile");
|
||||
// Verifier should pass (await flanked by safepoints)
|
||||
assert!(result.verification_result.is_ok(), "Verifier failed for await checkpoints: {:?}", result.verification_result);
|
||||
let dump = compiler.dump_mir(&result.module);
|
||||
// Expect at least two safepoints in the function (before/after await)
|
||||
let sp_count = dump.matches("safepoint").count();
|
||||
assert!(sp_count >= 2, "Expected >=2 safepoints around await, got {}. Dump:\n{}", sp_count, dump);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_rewritten_await_still_checkpoints() {
|
||||
use crate::ast::{LiteralValue, Span};
|
||||
// Enable rewrite so Await → ExternCall(env.future.await)
|
||||
std::env::set_var("NYASH_REWRITE_FUTURE", "1");
|
||||
let ast = ASTNode::AwaitExpression { expression: Box::new(ASTNode::Literal { value: LiteralValue::Integer(1), span: Span::unknown() }), span: Span::unknown() };
|
||||
let mut compiler = MirCompiler::new();
|
||||
let result = compiler.compile(ast).expect("compile");
|
||||
// Verifier should still pass (checkpoint verification includes ExternCall await)
|
||||
assert!(result.verification_result.is_ok(), "Verifier failed for rewritten await checkpoints: {:?}", result.verification_result);
|
||||
let dump = compiler.dump_mir(&result.module);
|
||||
assert!(dump.contains("env.future.await"), "Expected rewritten await extern call. Dump:\n{}", dump);
|
||||
let sp_count = dump.matches("safepoint").count();
|
||||
assert!(sp_count >= 2, "Expected >=2 safepoints around rewritten await, got {}. Dump:\n{}", sp_count, dump);
|
||||
// Cleanup env
|
||||
std::env::remove_var("NYASH_REWRITE_FUTURE");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_throw_compilation() {
|
||||
|
||||
Reference in New Issue
Block a user