gleam-lang/gleam

Pattern matching on tuples or custom types produces broken JavaScript

Open

#5,680 opened on 2026年5月3日

GitHub で見る
 (5 comments) (0 reactions) (0 assignees)Rust (21,417 stars) (960 forks)batch import
help wantedhigh priority

説明

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.

~ 💜

コントリビューターガイド