Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Untagged variant accepts @as number literals that are the same JavaScript number

クローズ 初心者向け
#8,953 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

関連するプルリクエストがすでにマージされています。

  • #8965 @cknitt による — マージ済み

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
77/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
javascript
領域
compilers

調査の方向性

compiler/ml/UntaggedVariants.md のルール 6 とそのテストを読み、次に、リテラルを表記で比較する重複リテラルのチェックを追ってください。1 と 1.0、1 と 4294967297 などのケースを、それぞれの JavaScript 実行時の値に照らして確認してください。同等の JavaScript 値が重複した @as ケースとして拒否され、これらの例をカバーするテストが追加されれば完了です。

索引モデルが issue の本文から書いたものです。

説明

An untagged variant accepts two @as number literals that are the same JavaScript number, when they are spelled differently.

@unboxed type t = | @as(1) A | @as(1.0) B
let name = v => switch v { | A => "A" | B => "B" }
@inline(never) let id = x => x
Console.log2(name(B), name(id(B)))

Output: B A. B is the number 1 at run time, so a dispatched B matches A, while the folded name(B) returns "B".

The same holds for @as(1) A | @as(4294967297) B, because int literals are emitted as 32-bit: name(id(B)) returns "A".

Expected: the declaration is rejected, as for two @as(1) cases, because the literals are equal as JavaScript values.

The duplicate-literal check compares literals by spelling. The rule and its tests are in compiler/ml/UntaggedVariants.md (rule 6), in #8952.

主要言語
OCaml
スター
7.5k
フォーク
483
平均マージ
20時間 7分
マージ済み PR(30日)
227

環境構築

Codespaces で開く

このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

rescript-lang/rescript のほかの issue

rescript-lang/rescript の issue をすべて見る

似ている issue

Compilers の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。