44 lines
1.3 KiB
Plaintext
44 lines
1.3 KiB
Plaintext
|
|
// 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"
|
||
|
|
}
|
||
|
|
}
|