// JIT ANY Helpers Demo - JIT内部での統一的な型処理
// ANYヘルパーは nyash.any.length_h と nyash.any.is_empty_h として
// JITのHostCall経由で Array/String/Map を統一的に扱える！

box Helper {
    birth() {}
    
    // このメソッドがJITコンパイルされると、内部的にANYヘルパーが使われる
    getInfo(obj) {
        // JIT内部では nyash.any.length_h が呼ばれる
        local len
        len = obj.length()  // Array/Stringなら動作
        
        // JIT内部では nyash.any.is_empty_h が呼ばれる
        local empty
        empty = obj.isEmpty()  // Array/Stringなら動作
        
        return len
    }
}

static box Main {
    main() {
        local H
        H = new Helper()
        
        // Array での使用
        local arr
        arr = new ArrayBox()
        arr.push("cat")
        arr.push("dog")
        print("Array info: " + H.getInfo(arr))  // 2
        
        // String での使用
        local str
        str = new StringBox("Hello")
        print("String info: " + H.getInfo(str))  // 5
        
        // 注意: MapBoxは現在のインタープリターではlength()未実装
        // JITでは nyash.any.length_h が Map.size() にマップされる
        
        return "Done"
    }
}