Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

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

Đã đóng Phù hợp với người mới
#8,953 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Một pull request liên quan đã được merge.

  • #8965 của @cknitt — đã merge

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
77/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
javascript
Lĩnh vực
compilers

Hướng nghiên cứu

Đọc quy tắc 6 và các bài kiểm thử của quy tắc này trong compiler/ml/UntaggedVariants.md, sau đó lần theo bước kiểm tra literal trùng lặp vốn so sánh literal theo cách viết. Kiểm tra các trường hợp như 1 và 1.0, cũng như 1 và 4294967297, dựa trên giá trị lúc chạy JavaScript của chúng. Hoàn tất khi các giá trị JavaScript tương đương bị từ chối dưới dạng các trường hợp @as trùng lặp và có bài kiểm thử bao quát những ví dụ này.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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.

Ngôn ngữ chính
OCaml
Star
7.5k
Fork
483
Merge trung bình
19 giờ 35 phút
Pull request đã merge (30 ngày)
208

Chuẩn bị môi trường

Mở trong Codespaces

Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của rescript-lang/rescript

Tất cả issue của rescript-lang/rescript

Issue tương tự

Thêm issue về Compilers

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.