Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Some(U) of an @as(undefined) case compiles to undefined when U is a constant

Aperta
#8,954 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
1-2 giorni
Idoneità per principianti
55/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
javascript
Ambito
compilers

Direzione di ricerca

Start by reading rule 12 in compiler/ml/UntaggedVariants.md and tracing the constant handling in compiler/ml/lambda.ml, especially const_some_none_depth. Reproduce the example and compare Some(U) with None for the constant and function cases. Done means both comparisons show Some(U) differs from None, with compiler tests covering the regression.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Some(U), where U is an @as(undefined) case of an untagged variant, compiles to undefined when U is a constant argument, so it equals None.

@unboxed type u = | @as(undefined) U | V(string)
let x: option<u> = Some(U)                       // compiles to: let x = undefined;
@inline(never) let mk = (v: u): option<u> => Some(v)
Console.log2(x == None, mk(U) == None)

Output: true false. Through a function, Some(U) is boxed and differs from None; as a constant, it is undefined.

Expected: Some(U) differs from None in both cases. This is the example of #6222, which made option unboxing compatible with untagged variants.

A likely place is compiler/ml/lambda.ml, const_some_none_depth, which treats every Const_constructor as not none, including one whose literal is undefined. This cause is not confirmed. The rule is compiler/ml/UntaggedVariants.md rule 12, in #8952.

Lingua principale
OCaml
Stelle
7.5k
Fork
483
Merge medio
1g 1h
PR unite (30g)
169

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di rescript-lang/rescript

Tutte le issue di rescript-lang/rescript

Issue simili

Altre issue su Compilers

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.