block y br_if en WebAssembly
Las etiquetas son salidas: br sobre un block salta más allá de su fin.
(module
;; br jumps to a label; on a block that means "exit here". br_if
;; makes the jump conditional -- this is the early return of WAT.
(func (export "first_fault") (param $a i32) (param $b i32) (result i32)
(block $out (result i32)
(i32.const 1)
(br_if $out (i32.eqz (local.get $a)))
drop
(i32.const 2)
(br_if $out (i32.eqz (local.get $b)))
drop
(i32.const 0))))
Cómo funciona
(block $out (result i32) ...)abre una región etiquetada.br_if $outsale temprano, llevando el valor que ya está en la pila.- El patrón encadena: empuja un candidato, prueba, sigue de largo.
Palabras clave y builtins usados aquí
blockbr_ifdropexportfunci32moduleparamresult
El intento, en números
- Líneas
- 12
- Caracteres a escribir
- 366
- Tokens
- 72
- Ritmo de tres estrellas
- 60 tpm
Al ritmo de tres estrellas de 60 tokens por minuto, este intento toma unos 72 segundos.
Paso 2 de 3 en Control de flujo; paso 11 de 28 en Fundamentos del lenguaje.