Как понимать br_if в wasm? - PullRequest
2 голосов
/ 28 января 2020

Как работает br_if. Я прочитал документы, но ничего не нашел о значении результата br_if. Я использую WebAssembly Studio . У меня есть этот код, и я не понимаю, почему он так работает.

(func $f (param $a i32) (result i32)
(block (result i32)
  (br_if 0 (i32.const 5) (get_local $a))
))

Я предполагал, что br_if выполняется только тогда, когда условное не равно 0, но эта функция всегда возвращает 5, даже если параметр a равен 0. Я думал, что br_if необязательное возвращаемое значение и попробуйте установить значение после блока, но это не скомпилировано. Пожалуйста, объясните мне, как это работает.

(func $f (param $a i32) (result i32)
(block (result i32)
  (br_if 0 (i32.const 5) (get_local $a))
)
(i32.const 10))

Также я хочу спросить о возвращении значения из блоков или циклов, потому что в документах я не видел ни одного предложения по этому поводу. Можно ли дополнительно возвращать значение из l oop или блокировать, когда функция возвращает значение во всех ветвях?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...