Assemblyscript: call_indirectλ₯Ό μ‚¬μš©ν•˜λ €κ³  ν•  λ•Œ 컴파일 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2019λ…„ 12μ›” 19일  Β·  4μ½”λ©˜νŠΈ  Β·  좜처: AssemblyScript/assemblyscript

index.d.ts μ„€λͺ…λ˜μ–΄ μžˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  μ»΄νŒŒμΌν•˜λŠ” λ™μ•ˆ μ‚¬μš© μ‹œ 였λ₯˜ " ERROR TS2304: Cannot find name 'call_indirect' "κ°€ μƒμ„±λ©λ‹ˆλ‹€. call_direct λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

예, ν΄λ‘œμ € κ΅¬ν˜„μ— μ˜ˆμƒλ˜λŠ” 문제 λ•Œλ¬Έμ— μ œκ±°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ—¬μ „νžˆ λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

changetype<(a: i32, b: i32) => i32>(someTableIndex)(1, 2);

각기

var tableIndex = changetype<usize>(someFunction);

λͺ¨λ“  4 λŒ“κΈ€

https://github.com/AssemblyScript/assemblyscript/pull/974 μ—μ„œ 제거된 것 κ°™μŠ΅λ‹ˆλ‹€ --importTable ν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬) wasm λͺ¨λ“ˆμ— ν…Œμ΄λΈ”μ„ μ „λ‹¬ν•œ λ‹€μŒ call_indirect( this.callbackId ) 와 같은 것을 μ‚¬μš©ν•˜μ—¬ ν˜ΈμΆœν•˜λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

λͺ‡ 가지 κ³ λ € 사항 후에 두 가지 κ°€λŠ₯ν•œ μ†”λ£¨μ…˜μ„ 생각해 λƒˆμŠ΅λ‹ˆλ‹€.
1) JSμ—μ„œ 콜백 ν…Œμ΄λΈ”(단지 콜백 λ°°μ—΄)을 μœ μ§€ν•˜κ³  wasm λͺ¨λ“ˆμ— invokeCallback(callbackId: i32): void λ©”μ†Œλ“œλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
2) μ»΄νŒŒμΌλŸ¬μ— --tableBase μ˜΅μ…˜μ„ μΆ”κ°€ν•˜μ—¬ μ‚¬μš©μžκ°€ νŠΉλ³„νžˆ μ½œλ°±μ„ μœ„ν•΄ ν…Œμ΄λΈ”μ—μ„œ 일뢀 곡간을 μ˜ˆμ•½ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. μž‘λ™ν•  수 μžˆμ§€λ§Œ 컴파일러 μΈ‘μ—μ„œ μž‘μ—…μ„ λ³΅μž‘ν•˜κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ–΄μ¨Œλ“  이 문제λ₯Ό λ‹«μœΌμ‹­μ‹œμ˜€. call_indirect 및 call_direct κ°€ κΈ°λŠ₯에 λ‹€μ‹œ μΆ”κ°€λ˜μ§€ μ•ŠλŠ” 경우 index.d.ts μ—μ„œ μ œκ±°ν•΄μ•Ό ν•©λ‹ˆλ‹€.

예, ν΄λ‘œμ € κ΅¬ν˜„μ— μ˜ˆμƒλ˜λŠ” 문제 λ•Œλ¬Έμ— μ œκ±°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ—¬μ „νžˆ λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

changetype<(a: i32, b: i32) => i32>(someTableIndex)(1, 2);

각기

var tableIndex = changetype<usize>(someFunction);

#1017μ—μ„œ μˆ˜μ •

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰