gleam-lang/gleam

Pattern matching on tuples or custom types produces broken JavaScript

Chiusa

#5680 aperta il 3 mag 2026

 (5 commenti) (0 reazioni) (0 assegnatari)Rust (960 fork)batch import
help wantedhigh priority

Metriche repository

Star
 (21.417 stelle)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

The following Gleam code

pub fn main() {
  case #(1, 2) {
    #(a, _) -> a
  }
  {2 + 4} * 2
  let a = 42
  Nil
}

produces this Javascript:

export function main() {
  let $ = [1, 2];
  let a = $[0];
  a
  (2 + 4) * 2;
  let a = 42;
  return undefined;
}

Here, 2 things go wrong:

  1. the a binding does not reserve the name in the enclosing scope, causing a parse error.
  2. The expression inside the arm of the pattern is not followed by a semicolon. The line after it is constructed in such a way that this is now parsed as a function call, changing the meaning of this program.

Both of these can be triggered independently.

~ 💜

Guida contributor