WebAssembly μ»΄νμΌλ¬λ₯Ό μμ±νκ³ μμ΅λλ€. https://github.com/WebAssembly/spec/blob/634f0d9009404f498ef8d8bd510bd6f0941219cc/test/core/br_if.wast#L272 ν μ€νΈλ₯Ό λ³΄κ³ μμ΅λλ€. μ΄ ν μ€νΈλ μ½κ° νμ₯λ κ²μ²λΌ 보μ λλ€.
(module
(func
$type-arg-void-vs-num-nested
(result i32)
block i32
(i32.const 0)
block
(i32.const 1)
(br_if 1)
end
end
)
)
λ΄κ° μ»λ μ€λ₯λ λ€μκ³Ό κ°μ΅λλ€.
Error: check failed:
test.wast:10:12
type stack size too small at br_if value. got 0, expected at least 1
(br_if 1)
^^^^^^^
br_if
λλ¬ν λ μ€ν ν¬κΈ°κ° 2λΌκ³ μκ°ν©λλ€. μ¦, 쑰건문μ λν΄ 1μ νν λ€μ μΈλΆ λΈλ‘μ μΆ©μ‘±μν€κΈ° μν΄ νλκ° λ¨μ΅λλ€. (i32.const 0)
κ° μ€μ²© λΈλ‘μΌλ‘ λμ΄κ° κ²μ΄λΌκ³ κ°μ νμ΅λλ€. μ΄λ€ λΆλΆμ΄ λλ½ λμμ΅λκΉ? 미리 κ°μ¬λ립λλ€.
μ, wattμ μ€λ₯ λ³΄κ³ λ μ¬κΈ°μμ ν₯μλ μ μμ΅λλ€. μ€νμ i32
κ° λ κ° μμ΄λ μ°μ°μλ λΈλ‘μ μμ λΆλΆμ μ§λμΉμ§ μμΌλ―λ‘ μ¬μ€μ νλλ§ μμ΅λλ€.
μ΄κ²μ κ° λΈλ‘μ΄ μ체 μ€νμ κ°λλ€λ κ²μ μλ―Έν©λκΉ? μλ―Έλ‘ λ¬Έμμμ λ€μ μ§μ μ νΌλμ€λ¬μνμ΅λλ€.
λΈλ‘ λλ 루ν λͺ λ Ήμ΄ μ€νμ κ° μ€νμ μν₯μ λ―ΈμΉμ§ μμ΅λλ€.
μλ§λ λ€μκ³Ό κ°μ΄ λ³κ²½λμ΄μΌ ν©λλ€.
λΈλ‘ λλ 루ν λͺ λ Ήμ΄ μ€νμ κ° μ€νμ μν₯μ λ―ΈμΉμ§ μμ§λ§ μ€ν λΈλ‘ μΈλΆμ λͺ¨λ μ€ν κ°μ μ‘μΈμ€ν μ μμ΅λλ€.
μλλ©΄ λ΄κ° μ€ν΄νκ³ μμ΅λκΉ?
μ΄κ²μ κ° λΈλ‘μ΄ μ체 μ€νμ κ°λλ€λ κ²μ μλ―Έν©λκΉ?
λλ κ·Έλ€μ΄ μμ μ μ€νμ μ»λλ€κ³ λ§νμ§ μμ κ²μ λλ€. λ¨μ§ ν°μ§ μ μλ κ²μ νκ³κ° μλ€λ κ²λΏμ λλ€. μ΄κ²μ΄ μ€μ λ‘ wabtμμ ꡬνλλ λ°©μμ΄λ©°, κ°μΉ μ€νκ³Ό "λ μ΄λΈ" μ€νμ΄ μμ΅λλ€. κ° λ μ΄λΈμ λ μ΄λΈμ΄ νΈμλ λ κ° μ€νμ ν¬κΈ°μΈ "νκ³"λ₯Ό μ μ₯ν©λλ€. κ·Έλ° λ€μ νμ ν λλ§λ€ μμ λ μ΄λΈμ νκ³λ₯Ό νμΈν©λλ€.
λΈλ‘ λλ 루ν λͺ λ Ήμ΄ μ€νμ κ° μ€νμ μν₯μ λ―ΈμΉμ§ μμ΅λλ€.
μλ§λ λ€μκ³Ό κ°μ΄ λ³κ²½λμ΄μΌ ν©λλ€.
λΈλ‘ λλ 루ν λͺ λ Ήμ΄ μ€νμ κ° μ€νμ μν₯μ λ―ΈμΉμ§ μμ§λ§ λΈλ‘ μ€ν λΈλ‘ μΈλΆμ λͺ¨λ μ€ν κ°μ μ‘μΈμ€ν μ μμ΅λλ€.
μλλ©΄ λ΄κ° μ€ν΄νκ³ μμ΅λκΉ?
μ, Semantics.mdμμ μ΄μ κ°μ κ²μ μΈκΈν κ°μΉκ° μμ΅λλ€. 곡μμ μΈ μ°λ¬Έ μ¬μμ λν μμ λ μμμ μΈκΈν΄μΌ ν©λλ€.
>
μ΄κ²μ κ° λΈλ‘μ΄ μ체 μ€νμ κ°λλ€λ κ²μ μλ―Έν©λκΉ?
λλ κ·Έλ€μ΄ μμ μ μ€νμ μ»λλ€κ³ λ§νμ§ μμ κ²μ λλ€. λ¨μ§ νκ³κ° μλ€λ κ²λΏμ λλ€.
ν°μ§ μ μλ κ². κ·Έκ²μ΄ μ€μ λ‘ wabtμμ ꡬνλλ λ°©μμ λλ€.
κ° μ€ν λ° "λ μ΄λΈ" μ€νμ λλ€. κ° λ μ΄λΈμ "νκ³"λ₯Ό μ μ₯ν©λλ€.
λ μ΄λΈμ΄ νΈμλ λ κ° μ€νμ ν¬κΈ°μ λλ€. κ·Έλ¬λ©΄ μΈμ λΌλ
pop, λΉμ μ μμ λ μ΄λΈμ νκ³μ λν΄ νμΈν©λλ€.
λ λ€ μ ν¨ν 보기μ
λλ€. μλ―Έμ μΌλ‘ "λΈλ‘ λ‘컬 μ€ν" 보기μλ
μΆκ° λΆλ³λμ΄ νμνμ§ μλ€λ μ₯μ μ΄ μμ΅λλ€. "λ¨μΌ μ€ν"μΌλ‘
λͺ¨λ νκ³μ κ°μ μΆκ° μ νμ± κ°μ μ΄ νμν©λλ€.
λ μ΄λΈ μ€νμμ λ°μνλ κ²μ νμ¬ νΌμ°μ°μ μ€νμ λ²μ λ΄μ μμ΄μΌ ν©λλ€.
λμ΄, κ·Έλ€μ (λ°λμ μ격νκ²λ μλμ§λ§) μ€λ¦μ°¨μμΌλ‘ λ°μν΄μΌν©λλ€.
λ μ΄λΈ μ€νμ λΉμ λ μ μμ΅λλ€.
μ 보μ λν΄μ κ°μ¬λ립λλ€. μ€ν κ°λ₯ν κ²μ΄ μκ³ μ΄λ₯Ό μ€λͺ νκΈ° μν΄ λ 곡μμ μΈ μ¬μμ΄ λμ¬ κ²μ΄κΈ° λλ¬Έμ μ΄ κΈμ λ«μ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
>
λ λ€ μ ν¨ν 보기μ λλ€. μλ―Έμ μΌλ‘ "λΈλ‘ λ‘컬 μ€ν" 보기μλ
μΆκ° λΆλ³λμ΄ νμνμ§ μλ€λ μ₯μ μ΄ μμ΅λλ€. "λ¨μΌ μ€ν"μΌλ‘
λͺ¨λ νκ³μ κ°μ μΆκ° μ νμ± κ°μ μ΄ νμν©λλ€.
λ μ΄λΈ μ€νμμ λ°μνλ κ²μ νμ¬ νΌμ°μ°μ μ€νμ λ²μ λ΄μ μμ΄μΌ ν©λλ€.
λμ΄, κ·Έλ€μ (λ°λμ μ격νκ²λ μλμ§λ§) μ€λ¦μ°¨μμΌλ‘ λ°μν΄μΌν©λλ€.
λ μ΄λΈ μ€νμ λΉμ λ μ μμ΅λλ€.